You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2024/06/06 15:53:08 UTC

(activemq-artemis) branch main updated: ARTEMIS-4796 simplify SimpleString API

This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new 7ca30e9a63 ARTEMIS-4796 simplify SimpleString API
7ca30e9a63 is described below

commit 7ca30e9a638e5192bfbe135585e5df9185b73cd7
Author: Justin Bertram <jb...@apache.org>
AuthorDate: Tue Jun 4 16:10:21 2024 -0500

    ARTEMIS-4796 simplify SimpleString API
    
    This commit does the following:
    
     - deprecate the verbosely named `toSimpleString` static factory
       methods
     - add `of` static factory methods for all the ctors
     - replace any uses of the normal ctors with the `of` counterparts
    
    This makes the code more concise and readable.
---
 .../cli/commands/tools/xml/XMLMessageImporter.java |   4 +-
 .../cli/commands/tools/xml/XmlDataImporter.java    |  14 +-
 .../org/apache/activemq/cli/test/ArtemisTest.java  |   4 +-
 .../artemis/api/core/ParameterisedAddress.java     |  12 +-
 .../activemq/artemis/api/core/QueueAttributes.java |   6 +-
 .../artemis/api/core/QueueConfiguration.java       |  16 +-
 .../activemq/artemis/api/core/SimpleString.java    | 102 +++++-
 .../core/persistence/CoreMessageObjectPools.java   |   2 +-
 .../apache/activemq/artemis/utils/ByteUtil.java    |   2 +-
 .../activemq/artemis/utils/CompositeAddress.java   |   6 +-
 .../activemq/artemis/utils/DestinationUtil.java    |   2 +-
 .../apache/activemq/artemis/utils/RandomUtil.java  |   2 +-
 .../apache/activemq/artemis/utils/UTF8Util.java    |   2 +-
 .../activemq/artemis/utils/UUIDGenerator.java      |   2 +-
 .../activemq/artemis/utils/bean/MetaBean.java      |   2 +-
 .../artemis/utils/collections/TypedProperties.java |  18 +-
 .../utils/TypedPropertiesConcurrencyTest.java      |   8 +-
 .../utils/TypedPropertiesConversionTest.java       |  32 +-
 .../artemis/utils/TypedPropertiesTest.java         |  22 +-
 .../activemq/artemis/utils/bean/MetaBeanTest.java  |   4 +-
 .../api/config/ActiveMQDefaultConfiguration.java   |   4 +-
 .../activemq/artemis/api/core/FilterConstants.java |  22 +-
 .../apache/activemq/artemis/api/core/Message.java  |  44 +--
 .../artemis/api/core/client/ClientRequestor.java   |   4 +-
 .../api/core/management/ManagementHelper.java      |  70 ++---
 .../artemis/api/core/management/ResourceNames.java |   2 +-
 .../core/client/impl/ClientConsumerImpl.java       |   2 +-
 .../impl/ClientProducerCreditManagerImpl.java      |   2 +-
 .../core/client/impl/ClientProducerImpl.java       |   2 +-
 .../core/client/impl/ClientSessionImpl.java        |  58 ++--
 .../impl/CompressedLargeMessageControllerImpl.java |   2 +-
 .../client/impl/LargeMessageControllerImpl.java    |   2 +-
 .../artemis/core/cluster/DiscoveryGroup.java       |   4 +-
 .../artemis/core/message/impl/CoreMessage.java     |   8 +-
 .../core/protocol/core/impl/PacketImpl.java        |   8 +-
 .../protocol/core/impl/RemotingConnectionImpl.java |   2 +-
 .../core/impl/wireformat/DisconnectMessage_V2.java |   2 +-
 .../activemq/artemis/reader/MessageUtil.java       |  20 +-
 .../activemq/artemis/utils/BufferHelper.java       |   4 +-
 .../api/core/management/ResourceNamesTest.java     |   8 +-
 .../artemis/message/CoreMTMessageTest.java         |  10 +-
 .../activemq/artemis/message/CoreMessageTest.java  |  10 +-
 .../artemis/jms/client/ActiveMQDestination.java    |  12 +-
 .../artemis/jms/client/ActiveMQJMSProducer.java    |  40 +--
 .../artemis/jms/client/ActiveMQMapMessage.java     |  48 +--
 .../artemis/jms/client/ActiveMQMessage.java        |   8 +-
 .../jms/client/ActiveMQMessageProducer.java        |   2 +-
 .../artemis/jms/client/ActiveMQQueueBrowser.java   |   2 +-
 .../artemis/jms/client/ActiveMQSession.java        |  12 +-
 .../artemis/jms/client/ActiveMQTextMessage.java    |   2 +-
 .../persistence/config/PersistedDestination.java   |   4 +-
 .../jms/server/impl/JMSServerManagerImpl.java      |  16 +-
 .../jms/server/management/JMSNotificationType.java |   2 +-
 .../artemis/junit/ActiveMQConsumerResource.java    |   6 +-
 .../artemis/junit/ActiveMQProducerResource.java    |   6 +-
 .../junit/ActiveMQConsumerResourceTest.java        |   4 +-
 .../junit/ActiveMQDynamicProducerResourceTest.java |   4 +-
 ...roducerResourceWithoutAddressExceptionTest.java |   2 +-
 ...QDynamicProducerResourceWithoutAddressTest.java |   4 +-
 .../junit/ActiveMQProducerResourceTest.java        |   4 +-
 .../junit/EmbeddedActiveMQResourceTest.java        |   4 +-
 .../MultipleEmbeddedActiveMQResourcesTest.java     |  12 +-
 .../junit/MultipleEmbeddedJMSResourcesTest.java    |   4 +-
 .../junit/ActiveMQConsumerResourceTest.java        |   4 +-
 .../junit/ActiveMQDynamicProducerResourceTest.java |   4 +-
 ...roducerResourceWithoutAddressExceptionTest.java |   2 +-
 ...QDynamicProducerResourceWithoutAddressTest.java |   4 +-
 .../junit/ActiveMQProducerResourceTest.java        |   4 +-
 .../junit/EmbeddedActiveMQResourceTest.java        |   4 +-
 .../MultipleEmbeddedActiveMQResourcesTest.java     |  12 +-
 .../artemis/junit/ActiveMQConsumerDelegate.java    |   8 +-
 .../artemis/junit/ActiveMQProducerDelegate.java    |   6 +-
 .../artemis/junit/EmbeddedActiveMQDelegate.java    |  42 +--
 .../artemis/protocol/amqp/broker/AMQPMessage.java  |  14 +-
 .../protocol/amqp/broker/AMQPSessionCallback.java  |   2 +-
 .../amqp/broker/ProtonProtocolManager.java         |   4 +-
 .../amqp/connect/AMQPBrokerConnection.java         |   2 +-
 .../federation/AMQPFederationAddressConsumer.java  |   6 +-
 .../AMQPFederationAddressSenderController.java     |   4 +-
 .../AMQPFederationCommandDispatcher.java           |   6 +-
 .../federation/AMQPFederationEventDispatcher.java  |   6 +-
 .../federation/AMQPFederationQueueConsumer.java    |   4 +-
 .../AMQPFederationQueueSenderController.java       |   6 +-
 .../connect/mirror/AMQPMirrorControllerSource.java |   6 +-
 .../connect/mirror/AMQPMirrorControllerTarget.java |   4 +-
 .../amqp/connect/mirror/MirrorAddressFilter.java   |   4 +-
 .../amqp/converter/AMQPMessageSupport.java         |   2 +-
 .../coreWrapper/CoreMapMessageWrapper.java         |  48 +--
 .../converter/coreWrapper/CoreMessageWrapper.java  |   4 +-
 .../coreWrapper/CoreTextMessageWrapper.java        |   2 +-
 .../amqp/proton/AMQPConnectionContext.java         |   4 +-
 .../artemis/protocol/amqp/proton/AmqpSupport.java  |   2 +-
 .../amqp/proton/DefaultSenderController.java       |  16 +-
 .../amqp/proton/ProtonServerReceiverContext.java   |   6 +-
 .../protocol/amqp/broker/AMQPMessageTest.java      |  46 +--
 .../protocol/amqp/broker/AMQPPersisterTest.java    |   2 +-
 .../amqp/broker/AMQPSessionCallbackTest.java       |   6 +-
 .../AMQPFederationPolicySupportTest.java           |   4 +-
 .../connect/mirror/MirrorAddressFilterTest.java    |  16 +-
 .../protocol/amqp/converter/TestConversions.java   |  18 +-
 .../protocol/hornetq/PropertiesConversionTest.java |  16 +-
 .../hornetq/HQFilterConversionInterceptor.java     |   2 +-
 .../hornetq/util/HQPropertiesConverter.java        |  20 +-
 .../core/protocol/mqtt/MQTTPublishManager.java     |   4 +-
 .../protocol/mqtt/MQTTRetainMessageManager.java    |   2 +-
 .../protocol/mqtt/MQTTSubscriptionManager.java     |  10 +-
 .../artemis/core/protocol/mqtt/MQTTUtil.java       |  20 +-
 .../core/protocol/openwire/OpenWireConnection.java |   4 +-
 .../core/protocol/openwire/OpenWireConstants.java  |  34 +-
 .../openwire/OpenWireMessageConverter.java         |  16 +-
 .../protocol/openwire/OpenWireProtocolManager.java |   6 +-
 .../core/protocol/openwire/amq/AMQConsumer.java    |  14 +-
 .../core/protocol/openwire/amq/AMQSession.java     |   8 +-
 .../openwire/OpenWireMessageConverterTest.java     |   2 +-
 .../core/protocol/stomp/StompConnection.java       |   4 +-
 .../core/protocol/stomp/StompProtocolManager.java  |   2 +-
 .../artemis/core/protocol/stomp/StompSession.java  |  10 +-
 .../artemis/core/protocol/stomp/StompUtils.java    |   6 +-
 .../protocol/stomp/VersionedStompFrameHandler.java |  10 +-
 .../artemis/ra/inflow/ActiveMQMessageHandler.java  |   6 +-
 .../selector/filter/PropertyExpression.java        |   2 +-
 .../AMQPBrokerConnectionElement.java               |   4 +-
 .../core/config/impl/ConfigurationImpl.java        |   2 +-
 .../deployers/impl/FileConfigurationParser.java    |  28 +-
 .../artemis/core/filter/impl/FilterImpl.java       |   8 +-
 .../core/management/impl/AbstractControl.java      |   2 +-
 .../management/impl/ActiveMQServerControlImpl.java |  56 ++--
 .../core/management/impl/QueueControlImpl.java     |  12 +-
 .../core/management/impl/view/QueueView.java       |   4 +-
 .../impl/view/predicate/QueueFilterPredicate.java  |   4 +-
 .../paging/impl/PagingStoreFactoryDatabase.java    |   4 +-
 .../core/paging/impl/PagingStoreFactoryNIO.java    |   2 +-
 .../config/PersistedAddressSettingJSON.java        |   2 +-
 .../config/PersistedSecuritySetting.java           |  28 +-
 .../impl/journal/codec/DuplicateIDEncoding.java    |   2 +-
 .../codec/PersistentQueueBindingEncoding.java      |   4 +-
 .../core/postoffice/impl/PostOfficeImpl.java       |  14 +-
 .../protocol/core/impl/ActiveMQPacketHandler.java  |   2 +-
 .../protocol/core/impl/CoreProtocolManager.java    |   4 +-
 .../core/remoting/impl/invm/InVMAcceptor.java      |   8 +-
 .../core/remoting/impl/netty/NettyAcceptor.java    |  12 +-
 .../core/security/impl/SecurityStoreImpl.java      |  10 +-
 .../artemis/core/server/ActiveMQServer.java        |   2 +-
 .../activemq/artemis/core/server/NodeManager.java  |   4 +-
 .../core/server/cluster/ClusterController.java     |   2 +-
 .../core/server/cluster/ClusterManager.java        |   6 +-
 .../core/server/cluster/impl/BridgeImpl.java       |  16 +-
 .../server/cluster/impl/BroadcastGroupImpl.java    |   4 +-
 .../cluster/impl/ClusterConnectionBridge.java      |   4 +-
 .../server/cluster/impl/ClusterConnectionImpl.java |   6 +-
 .../cluster/quorum/QuorumVoteServerConnect.java    |   2 +-
 .../federation/AbstractFederationStream.java       |   2 +-
 .../artemis/core/server/federation/Federation.java |   2 +-
 .../federation/address/FederatedAddress.java       |   4 +-
 .../address/FederatedAddressConsumerKey.java       |   2 +-
 .../server/group/impl/LocalGroupingHandler.java    |   4 +-
 .../core/server/impl/ActiveMQServerImpl.java       |  28 +-
 .../artemis/core/server/impl/AddressInfo.java      |   4 +-
 .../core/server/impl/BucketMessageGroups.java      |   2 +-
 .../core/server/impl/ColocatedActivation.java      |   2 +-
 .../artemis/core/server/impl/DivertImpl.java       |   2 +-
 .../artemis/core/server/impl/QueueImpl.java        |  12 +-
 .../artemis/core/server/impl/ScaleDownHandler.java |   2 +-
 .../core/server/impl/ServerConsumerImpl.java       |   8 +-
 .../core/server/impl/ServerSessionImpl.java        |  26 +-
 .../management/ArtemisRbacInvocationHandler.java   |   2 +-
 .../management/impl/ManagementServiceImpl.java     |   4 +-
 .../impl/NotificationActiveMQServerPlugin.java     |   6 +-
 .../server/transformer/AddHeadersTransformer.java  |   2 +-
 .../core/server/transformer/ServerMessageImpl.java |   2 +-
 .../core/settings/impl/AddressSettings.java        |   8 +-
 .../core/settings/impl/ResourceLimitSettings.java  |   4 +-
 .../spi/core/protocol/AbstractProtocolManager.java |   4 +-
 .../AMQPMirrorBrokerConnectionElementTest.java     |   8 +-
 .../core/config/impl/AMQPConnectMatchTest.java     |   4 +-
 .../config/impl/AbstractConfigurationTestBase.java |   4 +-
 .../core/config/impl/ConfigurationImplTest.java    |  58 ++--
 .../config/impl/FileConfigurationParserTest.java   |   2 +-
 .../core/config/impl/FileConfigurationTest.java    |   4 +-
 .../artemis/core/filter/impl/FilterTest.java       | 128 ++++----
 .../impl/openmbean/OpenTypeSupportTest.java        |   2 +-
 .../core/paging/cursor/impl/ConcurrentAckTest.java |   2 +-
 .../artemis/core/server/QueueConfigTest.java       |   6 +-
 .../core/server/files/FileMoveManagerTest.java     |   2 +-
 .../server/group/impl/ClusteredResetMockTest.java  |   6 +-
 .../artemis/core/server/impl/QueueImplTest.java    |   2 +-
 .../core/server/impl/RoutingContextTest.java       |  16 +-
 .../ArtemisRbacMBeanServerBuilderTest.java         |  22 +-
 .../management/impl/ManagementServiceImplTest.java |  22 +-
 .../artemis/core/settings/AddressSettingsTest.java |  22 +-
 .../artemis/tests/util/SimpleStringTest.java       | 114 +++----
 .../artemiswrapper/ArtemisBrokerWrapper.java       |   6 +-
 .../java/org/apache/activemq/JMSConsumerTest.java  |   2 +-
 .../activemq/JmsQueueCompositeSendReceiveTest.java |   2 +-
 .../java/org/apache/activemq/OptimizedAckTest.java |   6 +-
 .../activemq/transport/failover/AMQ1925Test.java   |   2 +-
 .../failover/FailoverConsumerUnconsumedTest.java   |   2 +-
 .../MultiThreadRandomReattachTestBase.java         |  78 ++---
 .../cluster/reattach/RandomReattachTestBase.java   |  84 ++---
 .../largemessage/LargeMessageTestBase.java         |  14 +-
 .../artemis/tests/util/ActiveMQTestBase.java       |   8 +-
 .../activemq/artemis/utils/RealServerTestBase.java |   2 +-
 .../src/main/resources/hqsoak/artemisServer.groovy |   6 +-
 .../resources/jmsReplyToQueue/artemisServer.groovy |   8 +-
 .../jmsReplyToTempQueue/artemisServer.groovy       |   4 +-
 .../jmsReplyToTempTopic/artemisServer.groovy       |   6 +-
 .../resources/jmsReplyToTopic/artemisServer.groovy |   4 +-
 .../journalcompatibility/forcepaging.groovy        |   1 -
 .../resources/oldAddressSpace/artemisServer.groovy |  14 +-
 .../tests/compatibility/OldOpenWireTest.java       |   2 +-
 .../artemis/tests/db/paging/PagingTest.java        | 122 +++----
 .../isolated/security/JmxSecurityTest.java         |  12 +-
 .../isolated/security/LDAPSecurityTest.java        |  12 +-
 ...egacyLDAPSecuritySettingPluginListenerTest.java |   2 +-
 .../LegacyLDAPSecuritySettingPluginTest.java       |  10 +-
 .../tests/integration/DuplicateDetectionTest.java  | 154 ++++-----
 .../integration/addressing/AddressConfigTest.java  |   4 +-
 .../integration/addressing/AddressingTest.java     |  60 ++--
 .../tests/integration/addressing/AnycastTest.java  |   2 +-
 .../integration/addressing/MulticastTest.java      |   2 +-
 .../integration/addressing/SendDLQNoRouteTest.java |   6 +-
 .../addressing/TwoWaysRemoveAddressTest.java       |   4 +-
 .../integration/amqp/AmqpAnonymousRelayTest.java   |  16 +-
 .../amqp/AmqpBridgeApplicationPropertiesTest.java  |   8 +-
 .../amqp/AmqpBridgeClusterRedistributionTest.java  |   8 +-
 .../integration/amqp/AmqpClientTestSupport.java    |  14 +-
 ...leReceiverReconnectWithMulticastPrefixTest.java |   4 +-
 .../integration/amqp/AmqpDurableReceiverTest.java  |   2 +-
 .../integration/amqp/AmqpExpiredMessageTest.java   |   8 +-
 .../integration/amqp/AmqpFlowControlTest.java      |   8 +-
 .../amqp/AmqpFullyQualifiedNameTest.java           |  18 +-
 .../integration/amqp/AmqpMessageDivertsTest.java   |   4 +-
 .../integration/amqp/AmqpMessageRoutingTest.java   |  18 +-
 .../amqp/AmqpNonDurableReceiverTest.java           |   2 +-
 .../amqp/AmqpPurgeOnNoConsumersTest.java           |   4 +-
 .../tests/integration/amqp/AmqpReceiverTest.java   |   6 +-
 .../integration/amqp/AmqpScheduledMessageTest.java |   2 +-
 .../integration/amqp/AmqpSendReceiveTest.java      |   4 +-
 .../amqp/AmqpSenderRoutingTypeTest.java            |   4 +-
 .../AutoCreateWithDefaultRoutingTypesTest.java     |   2 +-
 .../amqp/BrokerDefinedAnycastConsumerTest.java     |   6 +-
 .../amqp/BrokerDefinedMulticastConsumerTest.java   |   6 +-
 .../amqp/ClientDefinedAnycastConsumerTest.java     |   2 +-
 .../amqp/ClientDefinedMultiConsumerTest.java       |  54 ++--
 .../amqp/DLQAfterExpiredMessageTest.java           |  14 +-
 .../tests/integration/amqp/ExtremeCancelsTest.java |   2 +-
 .../integration/amqp/JMSDurableConsumerTest.java   |   2 +-
 .../integration/amqp/JMSTopicConsumerTest.java     |  30 +-
 .../amqp/JMSTransactedRedeliveryBugTest.java       |   4 +-
 .../tests/integration/amqp/JMXManagementTest.java  |  10 +-
 .../integration/amqp/ParseAppMultiThread.java      |   6 +-
 .../integration/amqp/QueueAutoCreationTest.java    |   2 +-
 .../tests/integration/amqp/TopicDurableTests.java  |   2 +-
 .../integration/amqp/connect/AMQPBridgeTest.java   |   4 +-
 .../connect/AMQPFederationAddressPolicyTest.java   |  88 +++---
 .../connect/AMQPFederationBrokerPliuginTest.java   |  12 +-
 .../AMQPFederationConfigurationReloadTest.java     |  44 +--
 .../connect/AMQPFederationQueuePolicyTest.java     |  10 +-
 .../connect/AMQPFederationServerToServerTest.java  |  60 ++--
 .../amqp/connect/AMQPRedistributeClusterTest.java  |   4 +-
 .../integration/amqp/connect/AMQPReplicaTest.java  |   6 +-
 .../AMQPScheduledCoreOverBrokerConnectTest.java    |   2 +-
 .../integration/amqp/connect/AckManagerTest.java   |   4 +-
 .../integration/amqp/connect/BrokerInSyncTest.java |  20 +-
 .../amqp/connect/MirrorControllerBasicTest.java    |   2 +-
 .../AmqpReplicatedLargeMessageTest.java            |   2 +-
 .../SimpleStreamingLargeMessageTest.java           |   2 +-
 .../amqp/paging/AmqpMaxReadPagingTest.java         |   2 +-
 .../integration/amqp/paging/AmqpPagingTest.java    |   4 +-
 .../bridge/BridgeRetryFullFailureTest.java         |   4 +-
 .../integration/bridge/BridgeRoutingTest.java      |   4 +-
 .../tests/integration/cli/AddressCommandTest.java  |  32 +-
 .../tests/integration/cli/QueueCommandTest.java    |  48 +--
 .../tests/integration/client/AckBatchSizeTest.java |   8 +-
 .../tests/integration/client/AcknowledgeTest.java  |   8 +-
 .../integration/client/AddressSettingsTest.java    |  28 +-
 .../client/AutoCreateJmsDestinationTest.java       |   6 +-
 .../tests/integration/client/AutoCreateTest.java   |  24 +-
 .../integration/client/AutoDeleteAddressTest.java  |  12 +-
 .../client/AutoDeleteCreatedQueueTest.java         |   6 +-
 .../client/AutoDeleteJmsDestinationTest.java       |  18 +-
 .../integration/client/AutoDeleteQueueTest.java    |   4 +-
 .../tests/integration/client/AutogroupIdTest.java  |  10 +-
 .../integration/client/CommitRollbackTest.java     |  10 +-
 .../client/ConcurrentCreateDeleteProduceTest.java  |   2 +-
 .../integration/client/ConsumerRoundRobinTest.java |   4 +-
 .../integration/client/ConsumerStuckTest.java      |   2 +-
 .../tests/integration/client/ConsumerTest.java     |  24 +-
 .../integration/client/ConsumerWindowSizeTest.java |  16 +-
 .../tests/integration/client/CoreClientTest.java   |   2 +-
 .../client/CreateQueueIdempotentTest.java          |   4 +-
 .../tests/integration/client/CreateQueueTest.java  |  12 +-
 .../integration/client/DeadLetterAddressTest.java  |  52 +--
 .../integration/client/DeleteAddressTest.java      |   8 +-
 .../integration/client/DeliveryOrderTest.java      |   8 +-
 .../client/ExpireTestOnRestartTest.java            |   4 +-
 .../integration/client/ExpiryAddressTest.java      |  62 ++--
 .../integration/client/ExpiryLargeMessageTest.java |   6 +-
 .../tests/integration/client/ForceDeleteQueue.java |   2 +-
 .../integration/client/FullQualifiedQueueTest.java |  24 +-
 .../tests/integration/client/HangConsumerTest.java |   6 +-
 .../tests/integration/client/HeuristicXATest.java  |   2 +-
 .../integration/client/IngressTimestampTest.java   |   2 +-
 .../client/InterruptedLargeMessageTest.java        |   2 +-
 .../integration/client/InvalidCoreClientTest.java  |   2 +-
 .../tests/integration/client/JMSOrderTest.java     |   2 +-
 .../client/JMSPagingFileDeleteTest.java            |   6 +-
 .../integration/client/JMSTransactionTest.java     |   2 +-
 .../integration/client/JmsNettyNioStressTest.java  |  12 +-
 .../tests/integration/client/JournalCrashTest.java |   6 +-
 .../client/LargeMessageCompressTest.java           |   6 +-
 .../tests/integration/client/LargeMessageTest.java |  18 +-
 .../integration/client/MessageConcurrencyTest.java |   4 +-
 .../integration/client/MessageCounterTest.java     |   2 +-
 .../MessageGroupingConnectionFactoryTest.java      |   2 +-
 .../integration/client/MessageGroupingTest.java    |  32 +-
 .../integration/client/MessageHandlerTest.java     |   8 +-
 .../tests/integration/client/MessageRateTest.java  |   2 +-
 .../tests/integration/client/MixRoutingTest.java   |   8 +-
 .../integration/client/MultipleProducersTest.java  |   8 +-
 .../client/MultipleThreadFilterOneTest.java        |   2 +-
 .../client/NewDeadLetterAddressTest.java           |   6 +-
 .../client/ProducerFlowControlTest.java            |  12 +-
 .../tests/integration/client/ProducerTest.java     |   2 +-
 .../tests/integration/client/QueueBrowserTest.java |  16 +-
 .../integration/client/ReceiveImmediateTest.java   |   4 +-
 .../integration/client/RedeliveryConsumerTest.java |   2 +-
 .../tests/integration/client/RequestorTest.java    |   6 +-
 .../client/RescheduleJDBCDeliveryTest.java         |   2 +-
 .../tests/integration/client/RoutingTest.java      |  28 +-
 .../client/SelfExpandingBufferTest.java            |   2 +-
 .../tests/integration/client/SendAckFailTest.java  |   2 +-
 .../client/SessionCreateAndDeleteQueueTest.java    |   8 +-
 .../SessionSendAcknowledgementHandlerTest.java     |   4 +-
 .../integration/client/SessionStopStartTest.java   |  20 +-
 .../tests/integration/client/SessionTest.java      |  50 +--
 .../tests/integration/client/SlowConsumerTest.java |  16 +-
 .../client/TransactionDurabilityTest.java          |   6 +-
 .../integration/client/TransactionalSendTest.java  |   8 +-
 .../integration/client/TransientQueueTest.java     |  10 +-
 .../tests/integration/client/UpdateQueueTest.java  |   8 +-
 .../integration/client/WildCardRoutingTest.java    | 290 ++++++++---------
 .../client/WildcardConfigurationTest.java          |  12 +-
 .../tests/integration/client/XAJMSOrderTest.java   |   2 +-
 .../integration/clientcrash/ClientCrashTest.java   |   4 +-
 .../integration/clientcrash/ClientExitTest.java    |   2 +-
 .../integration/clientcrash/DummyInterceptor.java  |   2 +-
 .../clientcrash/PendingDeliveriesTest.java         |   2 +-
 .../integration/cluster/ClusterControllerTest.java |   2 +-
 .../cluster/bridge/BridgeReconnectTest.java        |  16 +-
 .../cluster/bridge/BridgeStartTest.java            |  16 +-
 .../integration/cluster/bridge/BridgeTest.java     |  94 +++---
 .../bridge/BridgeWithDiscoveryGroupStartTest.java  |   4 +-
 .../bridge/ClusteredBridgeReconnectTest.java       |   2 +-
 .../cluster/bridge/SimpleTransformer.java          |   6 +-
 .../crossprotocol/LargeHeadersClusterTest.java     |   6 +-
 .../ProtocolsMessageLoadBalancingTest.java         |   6 +-
 .../AnycastRoutingWithClusterTest.java             |   6 +-
 .../AutoDeleteClusteredDestinationTest.java        |   2 +-
 .../cluster/distribution/ClusterTestBase.java      |  16 +-
 .../distribution/ClusteredGroupingTest.java        | 156 ++++-----
 .../distribution/ExpireWhileLoadBalanceTest.java   |   2 +-
 .../distribution/MessageLoadBalancingTest.java     |   2 +-
 .../distribution/MessageRedistributionTest.java    |  12 +-
 .../RemoteBindingWithoutLoadBalancingTest.java     |   2 +-
 .../distribution/SimpleSymmetricClusterTest.java   |   6 +-
 .../cluster/distribution/SymmetricClusterTest.java |   2 +-
 .../distribution/TwoWayTwoNodeClusterTest.java     |   6 +-
 .../cluster/failover/AsynchronousFailoverTest.java |   2 +-
 .../cluster/failover/BackupSyncJournalTest.java    |   2 +-
 .../cluster/failover/FailBackAutoTest.java         |   4 +-
 .../cluster/failover/FailBackManualTest.java       |   4 +-
 .../cluster/failover/FailoverListenerTest.java     |   4 +-
 .../integration/cluster/failover/FailoverTest.java |  10 +-
 .../cluster/failover/FailoverTestBase.java         |   2 +-
 .../cluster/failover/GroupingFailoverTestBase.java |  28 +-
 .../failover/MultipleBackupsFailoverTestBase.java  |   4 +-
 .../failover/MultipleServerFailoverTestBase.java   |   2 +-
 .../failover/NettyReplicatedFailoverTest.java      |   4 +-
 .../cluster/failover/PagingFailoverTest.java       |  10 +-
 .../cluster/failover/ReplicaTimeoutTest.java       |   2 +-
 .../failover/ReplicatedDistributionTest.java       |   6 +-
 .../failover/SharedStoreScaleDownBackupTest.java   |   4 +-
 .../cluster/reattach/OrderReattachTest.java        |   8 +-
 .../integration/cluster/reattach/ReattachTest.java |  24 +-
 .../cluster/restart/ClusterRestartTest.java        |   2 +-
 .../crossprotocol/AMQPToJMSCoreTest.java           |   4 +-
 .../crossprotocol/AMQPToOpenwireTest.java          |   4 +-
 .../integration/crossprotocol/AMQPToStompTest.java |   4 +-
 .../crossprotocol/MessageIDMultiProtocolTest.java  |   2 +-
 .../crossprotocol/OpenWireToAMQPTest.java          |   4 +-
 .../crossprotocol/OpenwireAmqpResenderTest.java    |   2 +-
 .../RequestReplyMultiProtocolTest.java             |   6 +-
 .../crossprotocol/RequestReplyNonJMSTest.java      |   6 +-
 .../tests/integration/discovery/DiscoveryTest.java |   8 +-
 .../tests/integration/divert/DivertTest.java       | 184 +++++------
 .../integration/divert/PersistentDivertTest.java   |  24 +-
 .../federation/FederatedAddressTest.java           |  30 +-
 .../federation/FederatedQueuePullConsumerTest.java |   4 +-
 .../integration/federation/FederatedQueueTest.java |  16 +-
 .../integration/federation/FederatedTestBase.java  |   2 +-
 .../integration/http/CoreClientOverHttpTest.java   |   2 +-
 .../integration/interceptors/InterceptorTest.java  |   6 +-
 .../jdbc/store/journal/ShutdownServerTest.java     |   2 +-
 .../jms/ActiveMQConnectionFactoryTest.java         |   6 +-
 .../tests/integration/jms/JmsProducerTest.java     |   4 +-
 .../integration/jms/ProgrammaticRedeployTest.java  |   6 +-
 .../tests/integration/jms/RedeployTempTest.java    |   6 +-
 .../tests/integration/jms/RedeployTest.java        |  72 ++---
 .../integration/jms/client/ExclusiveTest.java      |   2 +-
 .../integration/jms/client/ExpiryMessageTest.java  |   2 +-
 .../tests/integration/jms/client/GroupingTest.java |   8 +-
 .../jms/client/MoveMessageDuplicateIDTest.java     |   8 +-
 .../jms/client/QueueAutoDeleteTest.java            |  40 +--
 .../jms/client/TemporaryDestinationTest.java       |  12 +-
 .../integration/jms/client/TopicCleanupTest.java   |   6 +-
 .../jms/cluster/JMSFailoverListenerTest.java       |   4 +-
 .../integration/jms/cluster/JMSFailoverTest.java   |   6 +-
 .../integration/jms/cluster/JMSReconnectTest.java  |   2 +-
 .../jms/cluster/TopicClusterPageStoreSizeTest.java |   8 +-
 .../jms/consumer/CreateSubscriptionTest.java       |   6 +-
 .../integration/jms/consumer/JmsConsumerTest.java  |  34 +-
 .../jms/jms2client/SharedConsumerTest.java         |   6 +-
 .../JMSConsumerDelayDispatchTest.java              |   4 +-
 .../jms/multiprotocol/JMSFQQNConsumerTest.java     |   8 +-
 .../integration/jms/multiprotocol/JMSLVQTest.java  |   8 +-
 .../jms/multiprotocol/JMSMessageGroupsTest.java    |   8 +-
 .../JMSMismatchedRoutingTypeTest.java              |   4 +-
 .../jms/multiprotocol/JMSNonDestructiveTest.java   |  24 +-
 .../jms/multiprotocol/JMSSelectorTest.java         |   2 +-
 .../jms/multiprotocol/JMSSharedConsumerTest.java   |   2 +-
 .../JMSSharedDurableConsumerTest.java              |   2 +-
 .../jms/multiprotocol/JMSTopicSubscriberTest.java  |   4 +-
 .../jms/multiprotocol/JMSXPathSelectorTest.java    |   2 +-
 .../MultiprotocolJMSClientTestSupport.java         |   6 +-
 .../server/management/TopicControlClusterTest.java |   2 +-
 .../integration/journal/DuplicateRecordIdTest.java |   4 +-
 .../management/AcceptorControlTest.java            |   4 +-
 .../management/ActiveMQServerControlTest.java      | 226 ++++++-------
 .../integration/management/AddressControlTest.java |   6 +-
 .../integration/management/BridgeControlTest.java  |   4 +-
 .../management/ClusterConnectionControlTest.java   |   4 +-
 .../integration/management/DivertControlTest.java  |   2 +-
 .../integration/management/ManagementTestBase.java |   2 +-
 .../management/ManagementWithPagingServerTest.java |   2 +-
 .../management/MessageAuthorizationTest.java       |   4 +-
 .../integration/management/NotificationTest.java   |  20 +-
 .../integration/management/QueueControlTest.java   | 170 +++++-----
 .../management/SecurityNotificationTest.java       |   2 +-
 .../tests/integration/mqtt/MQTTFQQNTest.java       |  18 +-
 .../tests/integration/mqtt/MQTTQueueCleanTest.java |  10 +-
 .../artemis/tests/integration/mqtt/MQTTTest.java   |  12 +-
 .../tests/integration/mqtt/MQTTTestSupport.java    |   4 +-
 .../mqtt/MqttWildCardSubAutoCreateTest.java        |   4 +-
 .../artemis/tests/integration/mqtt5/MQTT5Test.java |  18 +-
 .../tests/integration/mqtt5/MQTT5TestSupport.java  |   4 +-
 .../mqtt5/MQTTRetainMessageManagerTest.java        |   2 +-
 .../mqtt5/spec/TopicNameAndFilterTests.java        |   2 +-
 .../controlpackets/PublishTestsWithSecurity.java   |   2 +-
 .../mqtt5/spec/controlpackets/SubAckTests.java     |   2 +-
 .../mqtt5/spec/controlpackets/SubscribeTests.java  |   2 +-
 .../mqtt5/spec/controlpackets/UnsubAckTests.java   |   2 +-
 .../spec/controlpackets/UnsubscribeTests.java      |   2 +-
 .../integration/openwire/BasicOpenWireTest.java    |   8 +-
 .../openwire/CompactingOpenWireTest.java           |   2 +-
 .../openwire/CompositeDestinationTest.java         |   4 +-
 .../integration/openwire/FQQNOpenWireTest.java     |  38 +--
 .../openwire/FastReconnectOpenWireTest.java        |   8 +-
 .../LargeMessageQueueAutoCreationTest.java         |   2 +-
 .../openwire/OpenWireDivertExclusiveTest.java      |  16 +-
 .../openwire/OpenWireDivertNonExclusiveTest.java   |  12 +-
 .../openwire/OpenWireFlowControlFailTest.java      |   4 +-
 .../integration/openwire/OpenWireGroupingTest.java |   2 +-
 .../openwire/OpenWireLargeMessageTest.java         |   6 +-
 .../openwire/OpenWireScheduledDelayTest.java       |   2 +-
 .../integration/openwire/OpenWireTestBase.java     |   2 +-
 .../PrefetchRedeliveryCountOpenwireTest.java       |  16 +-
 .../integration/openwire/SecurityOpenWireTest.java |   2 +-
 .../integration/openwire/SimpleOpenWireTest.java   |  20 +-
 .../openwire/VerySimpleOenwireTest.java            |   4 +-
 .../openwire/VirtualTopicToFQQNOpenWireTest.java   |  24 +-
 .../integration/openwire/amq/JMSConsumer2Test.java |   2 +-
 .../openwire/amq/ProducerAutoCreateQueueTest.java  |  18 +-
 .../cluster/MessageRedistributionTest.java         |   6 +-
 .../cluster/TemporaryQueueClusterTest.java         |   2 +-
 .../openwire/interop/GeneralInteropTest.java       |   4 +-
 .../management/OpenWireDeleteQueueTest.java        |   6 +-
 .../paging/GlobalJournalPagingTest.java            |   6 +-
 .../integration/paging/JournalPagingTest.java      |  12 +-
 .../integration/paging/MaxMessagesPagingTest.java  |  12 +-
 .../paging/PageCountSyncOnNonTXTest.java           |   2 +-
 .../integration/paging/PagingCounterTest.java      |  40 +--
 .../tests/integration/paging/PagingOrderTest.java  |  42 +--
 .../integration/paging/PagingReceiveTest.java      |   2 +-
 .../tests/integration/paging/PagingSendTest.java   |   6 +-
 .../tests/integration/paging/PagingSyncTest.java   |   4 +-
 .../paging/PagingWithFailoverAndCountersTest.java  |   4 +-
 .../paging/TestDeadlockOnPurgePagingTest.java      |   2 +-
 .../persistence/AddressInfoRestartTest.java        |   4 +-
 .../AddressSettingsConfigurationStorageTest.java   |   6 +-
 .../integration/persistence/ConfigChangeTest.java  |  10 +-
 .../persistence/DeleteMessagesOnStartupTest.java   |   2 +-
 .../persistence/DuplicateCacheTest.java            |   8 +-
 .../persistence/QueueConfigRestartTest.java        |  34 +-
 .../integration/persistence/SyncSendTest.java      |   2 +-
 .../persistence/XmlImportExportRbacTest.java       |   2 +-
 .../persistence/XmlImportExportTest.java           |  28 +-
 .../metrics/JournalPendingMessageTest.java         |   4 +-
 .../tests/integration/plugin/CorePluginTest.java   |  10 +-
 .../plugin/FederationBrokerPluginTest.java         |   4 +-
 .../integration/plugin/MetricsPluginTest.java      |   4 +-
 .../tests/integration/ra/ActiveMQRATestBase.java   |   4 +-
 .../tests/integration/ra/ResourceAdapterTest.java  |   6 +-
 .../integration/remoting/DestroyConsumerTest.java  |   2 +-
 .../integration/remoting/DirectDeliverTest.java    |   2 +-
 .../tests/integration/remoting/ReconnectTest.java  |   4 +-
 .../compat/HQClientProtocolManagerTest.java        |   2 +-
 .../integration/replication/ReplicationTest.java   |   6 +-
 .../SharedNothingReplicationFlowControlTest.java   |   2 +-
 .../integration/routing/ElasticQueueTest.java      |   2 +-
 .../scheduling/ScheduledMessageTest.java           |   4 +-
 .../security/BasicSecurityManagerTest.java         |  12 +-
 .../integration/security/JMSXUserIDPluginTest.java |   2 +-
 .../security/SecurityPerAcceptorJmsTest.java       |   2 +-
 .../security/SecurityPerAcceptorTest.java          |  12 +-
 .../tests/integration/security/SecurityTest.java   |  54 ++--
 .../tests/integration/server/AddressQueryTest.java |  22 +-
 .../server/AutoCreateDeadLetterResourcesTest.java  |  12 +-
 .../server/AutoCreateExpiryResourcesTest.java      |   8 +-
 .../integration/server/ConfigurationTest.java      |  12 +-
 .../tests/integration/server/ExpiryRunnerTest.java |   8 +-
 .../tests/integration/server/LVQRecoveryTest.java  |  10 +-
 .../artemis/tests/integration/server/LVQTest.java  |  58 ++--
 .../integration/server/PredefinedQueueTest.java    |  22 +-
 .../server/QueueConfigPersistenceTest.java         |   4 +-
 .../tests/integration/server/QueueQueryTest.java   |  32 +-
 .../integration/server/ResourceLimitTest.java      |   2 +-
 .../server/ResourceLimitTestWithCerts.java         |   2 +-
 .../server/RetroactiveAddressFailoverTest.java     |   4 +-
 .../integration/server/RetroactiveAddressTest.java |  40 +--
 .../tests/integration/server/RingQueueTest.java    |   4 +-
 .../integration/server/ScaleDown3NodeTest.java     |  26 +-
 .../integration/server/ScaleDownDirectTest.java    |  20 +-
 .../integration/server/ScaleDownRemoveSFTest.java  |   2 +-
 .../tests/integration/server/ScaleDownTest.java    |  46 +--
 .../tests/integration/server/ServerFilterTest.java |   2 +-
 .../ssl/CoreClientOverOneWaySSLTest.java           |   2 +-
 .../ssl/CoreClientOverTwoWaySSLTest.java           |   2 +-
 .../integration/ssl/DualAuthenticationTest.java    |   2 +-
 .../artemis/tests/integration/ssl/SslPEMTest.java  |   2 +-
 .../tests/integration/stomp/FQQNStompTest.java     |  30 +-
 .../artemis/tests/integration/stomp/StompTest.java |  64 ++--
 .../integration/stomp/StompTestMultiThreaded.java  |   2 +-
 .../stomp/StompWithRejectingInterceptorTest.java   |   2 +-
 .../tests/integration/stomp/v11/StompV11Test.java  |   2 +-
 .../tests/integration/stomp/v12/StompV12Test.java  |   2 +-
 .../netty/NettyConnectorWithHTTPUpgradeTest.java   |   2 +-
 .../tests/integration/xa/BasicXaRecoveryTest.java  |  10 +-
 .../artemis/tests/integration/xa/BasicXaTest.java  |   8 +-
 .../tests/integration/xa/SessionFailureXATest.java |   2 +-
 .../tests/integration/xa/XaTimeoutTest.java        |   2 +-
 .../artemis/jms/tests/ActiveMQServerTestCase.java  |   4 +-
 .../artemis/jms/tests/MessageProducerTest.java     |   2 +-
 .../activemq/artemis/jms/tests/SecurityTest.java   |   8 +-
 .../message/MessagePropertyConversionTest.java     |   2 +-
 .../jms/tests/tools/container/LocalTestServer.java |   2 +-
 .../activemq/artemis/common/SpawnedJMSServer.java  |   2 +-
 .../artemis/tests/leak/CoreClientLeakTest.java     |   4 +-
 .../paging/MeasurePagingMultiThreadTest.java       |   2 +-
 .../artemis/tests/smoke/console/QueuesTest.java    |   8 +-
 .../smoke/jmxrbac/JmxRBACBrokerSecurityTest.java   |   4 +-
 .../artemis/tests/smoke/jmxrbac/JmxRBACTest.java   |   4 +-
 .../smoke/logging/AuditLoggerResourceTest.java     |   2 +-
 .../soak/client/ClientNonDivertedSoakTest.java     |   2 +-
 .../artemis/tests/soak/client/ClientSoakTest.java  |   2 +-
 .../soak/client/SimpleSendReceiveSoakTest.java     |   2 +-
 .../tests/soak/paging/M_and_M_FactoryTest.java     |   2 +-
 .../tests/soak/paging/MegaCleanerPagingTest.java   |   6 +-
 .../journal/MultiThreadConsumerStressTest.java     |   4 +-
 .../journal/NIOMultiThreadCompactorStressTest.java |   8 +-
 .../paging/MultipleConsumersPageStressTest.java    |   2 +-
 .../tests/stress/paging/PageCursorStressTest.java  |   8 +-
 .../tests/stress/paging/PageStressTest.java        |   6 +-
 .../core/server/impl/QueueConcurrentTest.java      |   2 +-
 .../timing/core/server/impl/QueueImplTest.java     |   8 +-
 .../timing/jms/bridge/impl/JMSBridgeImplTest.java  |   2 +-
 .../unit/core/message/impl/MessageImplTest.java    |  30 +-
 .../core/message/impl/MessagePropertyTest.java     |   8 +-
 .../tests/unit/core/paging/impl/PageTest.java      |  20 +-
 .../core/paging/impl/PagingManagerImplTest.java    |   4 +-
 .../unit/core/paging/impl/PagingStoreImplTest.java |  28 +-
 .../unit/core/postoffice/impl/AddressImplTest.java | 124 ++++----
 .../core/postoffice/impl/AddressMapUnitTest.java   | 350 ++++++++++-----------
 .../core/postoffice/impl/BindingsImplTest.java     |  16 +-
 .../impl/DuplicateDetectionUnitTest.java           |   2 +-
 .../core/postoffice/impl/QueueComparatorTest.java  |   6 +-
 .../impl/WildcardAddressManagerPerfTest.java       |   6 +-
 .../impl/WildcardAddressManagerUnitTest.java       | 156 ++++-----
 .../unit/core/remoting/ActiveMQBufferTestBase.java |   2 +-
 .../cluster/impl/RemoteQueueBindImplTest.java      |  10 +-
 .../group/impl/SystemPropertyOverrideTest.java     |   2 +-
 .../tests/unit/core/server/impl/QueueImplTest.java |  32 +-
 602 files changed, 4024 insertions(+), 3949 deletions(-)

diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XMLMessageImporter.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XMLMessageImporter.java
index 800af929c5..95819090d4 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XMLMessageImporter.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XMLMessageImporter.java
@@ -225,7 +225,7 @@ public class XMLMessageImporter {
             message.putLongProperty(key, Long.parseLong(value));
             break;
          case XmlDataConstants.PROPERTY_TYPE_SIMPLE_STRING:
-            message.putStringProperty(new SimpleString(key), value == null ? null : SimpleString.toSimpleString(value));
+            message.putStringProperty(SimpleString.of(key), value == null ? null : SimpleString.of(value));
             break;
          case XmlDataConstants.PROPERTY_TYPE_STRING:
             message.putStringProperty(key, value);
@@ -270,7 +270,7 @@ public class XMLMessageImporter {
              * the processor, and reset the cdata for the next event(s)
              */
             if (decodeTextMessage) {
-               SimpleString text = new SimpleString(cdata.toString());
+               SimpleString text = SimpleString.of(cdata.toString());
                ByteBuf byteBuf = ByteBufAllocator.DEFAULT.buffer(SimpleString.sizeofNullableString(text));
                SimpleString.writeNullableSimpleString(byteBuf, text);
                byte[] bytes = new byte[SimpleString.sizeofNullableString(text)];
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataImporter.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataImporter.java
index 538faa6dc3..c5e063f390 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataImporter.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataImporter.java
@@ -357,7 +357,7 @@ public final class XmlDataImporter extends ConnectionConfigurationAbtract {
       }
 
       message.putBytesProperty(Message.HDR_ROUTE_TO_IDS, buffer.array());
-      producer.send(SimpleString.toSimpleString(destination), message);
+      producer.send(SimpleString.of(destination), message);
    }
 
    private void oldBinding() throws Exception {
@@ -416,14 +416,14 @@ public final class XmlDataImporter extends ConnectionConfigurationAbtract {
       }
 
 
-      ClientSession.AddressQuery addressQuery = session.addressQuery(SimpleString.toSimpleString(address));
+      ClientSession.AddressQuery addressQuery = session.addressQuery(SimpleString.of(address));
 
       if (!addressQuery.isExists()) {
-         session.createAddress(SimpleString.toSimpleString(address), routingType, true);
+         session.createAddress(SimpleString.of(address), routingType, true);
       }
 
       if (!filter.equals(FilterImpl.GENERIC_IGNORED_FILTER)) {
-         ClientSession.QueueQuery queueQuery = session.queueQuery(new SimpleString(queueName));
+         ClientSession.QueueQuery queueQuery = session.queueQuery(SimpleString.of(queueName));
 
          if (!queueQuery.isExists()) {
             session.createQueue(new QueueConfiguration(queueName).setAddress(address).setRoutingType(routingType).setFilterString(filter));
@@ -463,7 +463,7 @@ public final class XmlDataImporter extends ConnectionConfigurationAbtract {
          }
       }
 
-      ClientSession.QueueQuery queueQuery = session.queueQuery(new SimpleString(queueName));
+      ClientSession.QueueQuery queueQuery = session.queueQuery(SimpleString.of(queueName));
 
       if (!queueQuery.isExists()) {
          session.createQueue(new QueueConfiguration(queueName).setAddress(address).setRoutingType(RoutingType.valueOf(routingType)).setFilterString(filter));
@@ -493,14 +493,14 @@ public final class XmlDataImporter extends ConnectionConfigurationAbtract {
          }
       }
 
-      ClientSession.AddressQuery addressQuery = session.addressQuery(new SimpleString(addressName));
+      ClientSession.AddressQuery addressQuery = session.addressQuery(SimpleString.of(addressName));
 
       if (!addressQuery.isExists()) {
          EnumSet<RoutingType> set = EnumSet.noneOf(RoutingType.class);
          for (String routingType : ListUtil.toList(routingTypes)) {
             set.add(RoutingType.valueOf(routingType));
          }
-         session.createAddress(SimpleString.toSimpleString(addressName), set, false);
+         session.createAddress(SimpleString.of(addressName), set, false);
          logger.debug("Binding address(name={}, routingTypes={})", addressName, routingTypes);
       } else {
          logger.debug("Binding {} already exists so won't re-bind.", addressName);
diff --git a/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java b/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
index 305ce977a2..c4c4be680f 100644
--- a/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
+++ b/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
@@ -1399,14 +1399,14 @@ public class ArtemisTest extends CliTestBase {
             for (String str : queues.split(",")) {
                String[] seg = str.split(":");
                RoutingType routingType = RoutingType.valueOf((seg.length == 2 ? seg[1] : "anycast").toUpperCase());
-               ClientSession.QueueQuery queryResult = coreSession.queueQuery(SimpleString.toSimpleString(seg[0]));
+               ClientSession.QueueQuery queryResult = coreSession.queueQuery(SimpleString.of(seg[0]));
                assertTrue(queryResult.isExists(), "Couldn't find queue " + seg[0]);
                assertEquals(routingType, queryResult.getRoutingType());
             }
             for (String str : addresses.split(",")) {
                String[] seg = str.split(":");
                RoutingType routingType = RoutingType.valueOf((seg.length == 2 ? seg[1] : "multicast").toUpperCase());
-               ClientSession.AddressQuery queryResult = coreSession.addressQuery(SimpleString.toSimpleString(seg[0]));
+               ClientSession.AddressQuery queryResult = coreSession.addressQuery(SimpleString.of(seg[0]));
                assertTrue(queryResult.isExists(), "Couldn't find address " + str);
                assertTrue(routingType == RoutingType.ANYCAST ? queryResult.isSupportsAnycast() : queryResult.isSupportsMulticast());
             }
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/ParameterisedAddress.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/ParameterisedAddress.java
index a8af6d4564..0144fdd84e 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/ParameterisedAddress.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/ParameterisedAddress.java
@@ -28,7 +28,7 @@ public class ParameterisedAddress {
 
    public static SimpleString toParameterisedAddress(SimpleString address, Map<String, String> parameters) {
       if (parameters != null && !parameters.isEmpty()) {
-         return SimpleString.toSimpleString(toParameterisedAddress(address.toString(), parameters));
+         return SimpleString.of(toParameterisedAddress(address.toString(), parameters));
       } else {
          return address;
       }
@@ -71,11 +71,11 @@ public class ParameterisedAddress {
 
    @Deprecated
    public ParameterisedAddress(String address, QueueAttributes queueAttributes) {
-      this(SimpleString.toSimpleString(address), queueAttributes.toQueueConfiguration());
+      this(SimpleString.of(address), queueAttributes.toQueueConfiguration());
    }
 
    public ParameterisedAddress(String address, QueueConfiguration queueConfiguration) {
-      this(SimpleString.toSimpleString(address), queueConfiguration);
+      this(SimpleString.of(address), queueConfiguration);
    }
 
    public ParameterisedAddress(SimpleString address) {
@@ -85,10 +85,10 @@ public class ParameterisedAddress {
    public ParameterisedAddress(String address) {
       int index = address.indexOf('?');
       if (index == -1) {
-         this.address = SimpleString.toSimpleString(address);
+         this.address = SimpleString.of(address);
          this.queueConfiguration = null;
       } else {
-         this.address = SimpleString.toSimpleString(address.substring(0, index));
+         this.address = SimpleString.of(address.substring(0, index));
          QueueConfiguration queueConfiguration = new QueueConfiguration(address);
          parseQuery(address).forEach(queueConfiguration::set);
          this.queueConfiguration = queueConfiguration;
@@ -108,7 +108,7 @@ public class ParameterisedAddress {
    }
 
    public static SimpleString extractAddress(SimpleString address) {
-      return SimpleString.toSimpleString(extractAddress(address.toString()));
+      return SimpleString.of(extractAddress(address.toString()));
    }
 
    /**
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/QueueAttributes.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/QueueAttributes.java
index c9c47f1536..700316a7b4 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/QueueAttributes.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/QueueAttributes.java
@@ -71,7 +71,7 @@ public class QueueAttributes implements Serializable {
          if (key.equals(ROUTING_TYPE)) {
             setRoutingType(RoutingType.valueOf(value.toUpperCase()));
          } else if (key.equals(FILTER_STRING)) {
-            setFilterString(SimpleString.toSimpleString(value));
+            setFilterString(SimpleString.of(value));
          } else if (key.equals(DURABLE)) {
             setDurable(Boolean.valueOf(value));
          } else if (key.equals(MAX_CONSUMERS)) {
@@ -81,7 +81,7 @@ public class QueueAttributes implements Serializable {
          } else if (key.equals(LAST_VALUE)) {
             setLastValue(Boolean.valueOf(value));
          } else if (key.equals(LAST_VALUE_KEY)) {
-            setLastValueKey(SimpleString.toSimpleString(value));
+            setLastValueKey(SimpleString.of(value));
          } else if (key.equals(NON_DESTRUCTIVE)) {
             setNonDestructive(Boolean.valueOf(value));
          } else if (key.equals(PURGE_ON_NO_CONSUMERS)) {
@@ -99,7 +99,7 @@ public class QueueAttributes implements Serializable {
          } else if (key.equals(GROUP_BUCKETS)) {
             setGroupBuckets(Integer.valueOf(value));
          } else if (key.equals(GROUP_FIRST_KEY)) {
-            setGroupFirstKey(SimpleString.toSimpleString(value));
+            setGroupFirstKey(SimpleString.of(value));
          } else if (key.equals(AUTO_DELETE)) {
             setAutoDelete(Boolean.valueOf(value));
          } else if (key.equals(AUTO_DELETE_DELAY)) {
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/QueueConfiguration.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/QueueConfiguration.java
index 42b4f45b2d..db8fdb8fbb 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/QueueConfiguration.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/QueueConfiguration.java
@@ -168,7 +168,7 @@ public class QueueConfiguration implements Serializable {
     * @param name the name to use for the queue
     */
    public QueueConfiguration(String name) {
-      this(SimpleString.toSimpleString(name));
+      this(SimpleString.of(name));
    }
 
    /**
@@ -227,7 +227,7 @@ public class QueueConfiguration implements Serializable {
          } else if (key.equals(DURABLE)) {
             setDurable(Boolean.valueOf(value));
          } else if (key.equals(USER)) {
-            setUser(SimpleString.toSimpleString(value));
+            setUser(SimpleString.of(value));
          } else if (key.equals(MAX_CONSUMERS)) {
             setMaxConsumers(Integer.valueOf(value));
          } else if (key.equals(EXCLUSIVE)) {
@@ -320,7 +320,7 @@ public class QueueConfiguration implements Serializable {
     * @see QueueConfiguration#setAddress(SimpleString)
     */
    public QueueConfiguration setAddress(String address) {
-      return setAddress(SimpleString.toSimpleString(address));
+      return setAddress(SimpleString.of(address));
    }
 
    public SimpleString getName() {
@@ -350,7 +350,7 @@ public class QueueConfiguration implements Serializable {
     * @see QueueConfiguration#setName(SimpleString)
     */
    public QueueConfiguration setName(String name) {
-      return setName(SimpleString.toSimpleString(name));
+      return setName(SimpleString.of(name));
    }
 
    public RoutingType getRoutingType() {
@@ -372,7 +372,7 @@ public class QueueConfiguration implements Serializable {
    }
 
    public QueueConfiguration setFilterString(String filterString) {
-      return setFilterString(filterString == null ? null : SimpleString.toSimpleString(filterString));
+      return setFilterString(filterString == null ? null : SimpleString.of(filterString));
    }
 
    /**
@@ -398,7 +398,7 @@ public class QueueConfiguration implements Serializable {
    }
 
    public QueueConfiguration setUser(String user) {
-      return setUser(SimpleString.toSimpleString(user));
+      return setUser(SimpleString.of(user));
    }
 
    public Integer getMaxConsumers() {
@@ -438,7 +438,7 @@ public class QueueConfiguration implements Serializable {
    }
 
    public QueueConfiguration setLastValueKey(String lastValueKey) {
-      return setLastValueKey(SimpleString.toSimpleString(lastValueKey));
+      return setLastValueKey(SimpleString.of(lastValueKey));
    }
 
    public Boolean isNonDestructive() {
@@ -533,7 +533,7 @@ public class QueueConfiguration implements Serializable {
    }
 
    public QueueConfiguration setGroupFirstKey(String groupFirstKey) {
-      return setGroupFirstKey(SimpleString.toSimpleString(groupFirstKey));
+      return setGroupFirstKey(SimpleString.of(groupFirstKey));
    }
 
    public Boolean isAutoDelete() {
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/SimpleString.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/SimpleString.java
index 51a76fe35f..9b64e8e945 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/SimpleString.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/api/core/SimpleString.java
@@ -35,7 +35,7 @@ import org.apache.activemq.artemis.utils.DataConstants;
  */
 public final class SimpleString implements CharSequence, Serializable, Comparable<SimpleString> {
 
-   private static final SimpleString EMPTY = new SimpleString("");
+   private static final SimpleString EMPTY = SimpleString.of("");
    private static final long serialVersionUID = 4204223851422244307L;
 
    private final byte[] data;
@@ -56,26 +56,89 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
     * @param string String used to instantiate a SimpleString.
     * @return A new SimpleString
     */
-   public static SimpleString toSimpleString(final String string) {
+   public static SimpleString of(final String string) {
       if (string == null) {
          return null;
       }
       return new SimpleString(string);
    }
 
-   public static SimpleString toSimpleString(final String string, StringSimpleStringPool pool) {
+   /**
+    * Returns a SimpleString constructed from the {@code string} parameter.
+    * <p>
+    * If {@code string} is {@code null}, the return value will be {@code null} too.
+    *
+    * @param string String used to instantiate a SimpleString.
+    * @param pool   The pool from which to create the SimpleString
+    * @return A new SimpleString
+    */
+   public static SimpleString of(final String string, StringSimpleStringPool pool) {
       if (pool == null) {
-         return toSimpleString(string);
+         return of(string);
       }
       return pool.getOrCreate(string);
    }
 
+   /**
+    * creates a SimpleString from a byte array
+    *
+    * @param data the byte array to use
+    */
+   public static SimpleString of(final byte[] data) {
+      return new SimpleString(data);
+   }
+
+   /**
+    * creates a SimpleString from a character
+    *
+    * @param c the char to use
+    */
+   public static SimpleString of(final char c) {
+      return new SimpleString(c);
+   }
+
+   /**
+    * Returns a SimpleString constructed from the {@code string} parameter.
+    * <p>
+    * If {@code string} is {@code null}, the return value will be {@code null} too.
+    *
+    * @deprecated
+    * Use {@link #of(String)} instead.
+    *
+    * @param string String used to instantiate a SimpleString.
+    * @return A new SimpleString
+    */
+   @Deprecated(forRemoval = true)
+   public static SimpleString toSimpleString(final String string) {
+      return of(string);
+   }
+
+   /**
+    * Returns a SimpleString constructed from the {@code string} parameter.
+    * <p>
+    * If {@code string} is {@code null}, the return value will be {@code null} too.
+    *
+    * @deprecated
+    * Use {@link #of(String, StringSimpleStringPool)} instead.
+    *
+    * @param string String used to instantiate a SimpleString.
+    * @param pool   The pool from which to create the SimpleString
+    * @return A new SimpleString
+    */
+   @Deprecated(forRemoval = true)
+   public static SimpleString toSimpleString(final String string, StringSimpleStringPool pool) {
+      return of(string, pool);
+   }
 
    /**
     * creates a SimpleString from a conventional String
     *
+    * @deprecated
+    * Use {@link #of(String)} instead.
+    *
     * @param string the string to transform
     */
+   @Deprecated(forRemoval = true)
    public SimpleString(final String string) {
       int len = string.length();
 
@@ -101,12 +164,25 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
    /**
     * creates a SimpleString from a byte array
     *
+    * @deprecated
+    * Use {@link #of(byte[])} instead.
+    *
     * @param data the byte array to use
     */
+   @Deprecated(forRemoval = true)
    public SimpleString(final byte[] data) {
       this.data = data;
    }
 
+   /**
+    * creates a SimpleString from a character
+    *
+    * @deprecated
+    * Use {@link #of(char)} instead.
+    *
+    * @param c the char to use
+    */
+   @Deprecated(forRemoval = true)
    public SimpleString(final char c) {
       data = new byte[2];
 
@@ -180,7 +256,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
       }
       byte[] data = new byte[length];
       buffer.readBytes(data);
-      return new SimpleString(data);
+      return SimpleString.of(data);
    }
 
    public static void writeNullableSimpleString(ByteBuf buffer, SimpleString val) {
@@ -209,7 +285,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
 
          System.arraycopy(data, start << 1, bytes, 0, newlen);
 
-         return new SimpleString(bytes);
+         return SimpleString.of(bytes);
       }
    }
 
@@ -387,7 +463,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
                // Note by Clebert
                all = new ArrayList<>(2);
             }
-            all.add(new SimpleString(bytes));
+            all.add(SimpleString.of(bytes));
          }
       }
 
@@ -397,7 +473,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
          // Adding the last one
          byte[] bytes = new byte[data.length - lasPos];
          System.arraycopy(data, lasPos, bytes, 0, bytes.length);
-         all.add(new SimpleString(bytes));
+         all.add(SimpleString.of(bytes));
 
          // Converting it to arrays
          SimpleString[] parts = new SimpleString[all.size()];
@@ -445,7 +521,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
          final int ssIndex = startIndex << 1;
          final int delIndex = endIndex << 1;
          final byte[] bytes = Arrays.copyOfRange(data, ssIndex, delIndex);
-         ss = new SimpleString(bytes);
+         ss = SimpleString.of(bytes);
       }
       // We will create the ArrayList lazily
       if (all == null) {
@@ -513,7 +589,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
          bytes[offset] = (byte) (c & 0xFF);
          bytes[offset + 1] = (byte) (c >> 8 & 0xFF);
       }
-      return new SimpleString(bytes);
+      return SimpleString.of(bytes);
    }
 
    /**
@@ -526,7 +602,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
       byte[] bytes = new byte[data.length + toAdd.getData().length];
       System.arraycopy(data, 0, bytes, 0, data.length);
       System.arraycopy(toAdd.getData(), 0, bytes, data.length, toAdd.getData().length);
-      return new SimpleString(bytes);
+      return SimpleString.of(bytes);
    }
 
    /**
@@ -540,7 +616,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
       System.arraycopy(data, 0, bytes, 0, data.length);
       bytes[data.length] = (byte) (c & 0xFF);
       bytes[data.length + 1] = (byte) (c >> 8 & 0xFF);
-      return new SimpleString(bytes);
+      return SimpleString.of(bytes);
    }
 
    /**
@@ -660,7 +736,7 @@ public final class SimpleString implements CharSequence, Serializable, Comparabl
 
       @Override
       protected SimpleString create(String value) {
-         return toSimpleString(value);
+         return of(value);
       }
 
       @Override
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/core/persistence/CoreMessageObjectPools.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/core/persistence/CoreMessageObjectPools.java
index 5db9d53af3..074680531b 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/core/persistence/CoreMessageObjectPools.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/core/persistence/CoreMessageObjectPools.java
@@ -72,6 +72,6 @@ public class CoreMessageObjectPools {
    }
 
    public static SimpleString cachedAddressSimpleString(String address, CoreMessageObjectPools coreMessageObjectPools) {
-      return SimpleString.toSimpleString(address, coreMessageObjectPools == null ? null : coreMessageObjectPools.getAddressStringSimpleStringPool());
+      return SimpleString.of(address, coreMessageObjectPools == null ? null : coreMessageObjectPools.getAddressStringSimpleStringPool());
    }
 }
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java
index 45ff7f9de4..6e192bd7ae 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java
@@ -167,7 +167,7 @@ public class ByteUtil {
    }
 
    public static String toSimpleString(byte[] bytes) {
-      SimpleString simpleString = new SimpleString(bytes);
+      SimpleString simpleString = SimpleString.of(bytes);
       String value = simpleString.toString();
 
       for (char c : value.toCharArray()) {
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/CompositeAddress.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/CompositeAddress.java
index 65bbd2d250..e22c8ae89b 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/CompositeAddress.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/CompositeAddress.java
@@ -23,7 +23,7 @@ public class CompositeAddress {
    public static final String SEPARATOR = "::";
 
    public static String toFullyQualified(String address, String qName) {
-      return toFullyQualified(SimpleString.toSimpleString(address), SimpleString.toSimpleString(qName)).toString();
+      return toFullyQualified(SimpleString.of(address), SimpleString.of(qName)).toString();
    }
 
    public static SimpleString toFullyQualified(SimpleString address, SimpleString qName) {
@@ -58,7 +58,7 @@ public class CompositeAddress {
       if (queueName.equals(nameString)) {
          return name;
       }
-      return new SimpleString(queueName);
+      return SimpleString.of(queueName);
    }
 
    public static String extractQueueName(String queue) {
@@ -81,7 +81,7 @@ public class CompositeAddress {
       if (addressName.equals(addrString)) {
          return address;
       }
-      return new SimpleString(addressName);
+      return SimpleString.of(addressName);
    }
 
    public static String extractAddressName(String address) {
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/DestinationUtil.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/DestinationUtil.java
index 95fa7d6a88..ce693970cd 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/DestinationUtil.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/DestinationUtil.java
@@ -68,7 +68,7 @@ public class DestinationUtil {
                escape(subscriptionName);
          }
       }
-      return SimpleString.toSimpleString(queueName);
+      return SimpleString.of(queueName);
    }
 
 }
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/RandomUtil.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/RandomUtil.java
index 54f44bd139..1ccc8a1fff 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/RandomUtil.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/RandomUtil.java
@@ -37,7 +37,7 @@ public class RandomUtil {
    }
 
    public static SimpleString randomSimpleString() {
-      return new SimpleString(RandomUtil.randomString());
+      return SimpleString.of(RandomUtil.randomString());
    }
 
    public static char randomChar() {
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/UTF8Util.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/UTF8Util.java
index 87a929c277..b6cb93e047 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/UTF8Util.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/UTF8Util.java
@@ -69,7 +69,7 @@ public final class UTF8Util {
          saveUTF(buffer, val);
       } else {
          // Store as SimpleString, since can't store utf > 0xffff in length
-         SimpleString.writeSimpleString(buffer, new SimpleString(val));
+         SimpleString.writeSimpleString(buffer, SimpleString.of(val));
       }
    }
 
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/UUIDGenerator.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/UUIDGenerator.java
index db5b7465e3..b0f84d36cf 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/UUIDGenerator.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/UUIDGenerator.java
@@ -169,7 +169,7 @@ public final class UUIDGenerator {
    }
 
    public SimpleString generateSimpleStringUUID() {
-      return new SimpleString(generateStringUUID());
+      return SimpleString.of(generateStringUUID());
    }
 
    public UUID generateUUID() {
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/bean/MetaBean.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/bean/MetaBean.java
index 70bb0b16e7..70fbcb2c6d 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/bean/MetaBean.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/bean/MetaBean.java
@@ -192,7 +192,7 @@ public class MetaBean<T> {
             } else if (type == String.class) {
                setter.accept(resultObject, json.getString(name));
             } else if (type == SimpleString.class) {
-               setter.accept(resultObject, SimpleString.toSimpleString(json.getString(name)));
+               setter.accept(resultObject, SimpleString.of(json.getString(name)));
             } else if (type == Integer.class) {
                setter.accept(resultObject, json.getInt(name));
             } else if (type == Long.class) {
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/TypedProperties.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/TypedProperties.java
index 528802388d..6450cd3bf1 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/TypedProperties.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/TypedProperties.java
@@ -297,21 +297,21 @@ public class TypedProperties {
       if (value instanceof SimpleString) {
          return (SimpleString) value;
       } else if (value instanceof Boolean) {
-         return new SimpleString(value.toString());
+         return SimpleString.of(value.toString());
       } else if (value instanceof Character) {
-         return new SimpleString(value.toString());
+         return SimpleString.of(value.toString());
       } else if (value instanceof Byte) {
-         return new SimpleString(value.toString());
+         return SimpleString.of(value.toString());
       } else if (value instanceof Short) {
-         return new SimpleString(value.toString());
+         return SimpleString.of(value.toString());
       } else if (value instanceof Integer) {
-         return new SimpleString(value.toString());
+         return SimpleString.of(value.toString());
       } else if (value instanceof Long) {
-         return new SimpleString(value.toString());
+         return SimpleString.of(value.toString());
       } else if (value instanceof Float) {
-         return new SimpleString(value.toString());
+         return SimpleString.of(value.toString());
       } else if (value instanceof Double) {
-         return new SimpleString(value.toString());
+         return SimpleString.of(value.toString());
       }
       throw new ActiveMQPropertyConversionException("Invalid conversion: " + key);
    }
@@ -1199,7 +1199,7 @@ public class TypedProperties {
       } else if (value instanceof Double) {
          properties.putDoubleProperty(key, (Double) value);
       } else if (value instanceof String) {
-         properties.putSimpleStringProperty(key, new SimpleString((String) value));
+         properties.putSimpleStringProperty(key, SimpleString.of((String) value));
       } else if (value instanceof SimpleString) {
          properties.putSimpleStringProperty(key, (SimpleString) value);
       } else if (value instanceof byte[]) {
diff --git a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesConcurrencyTest.java b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesConcurrencyTest.java
index 72980898b1..09ab0ac52d 100644
--- a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesConcurrencyTest.java
+++ b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesConcurrencyTest.java
@@ -46,7 +46,7 @@ public class TypedPropertiesConcurrencyTest {
             try {
                countDownLatch.await();
                for (int h = 0; h < 100; h++) {
-                  props.putSimpleStringProperty(SimpleString.toSimpleString("S" + h), SimpleString.toSimpleString("hello"));
+                  props.putSimpleStringProperty(SimpleString.of("S" + h), SimpleString.of("hello"));
                }
                props.clear();
             } catch (ConcurrentModificationException t) {
@@ -94,7 +94,7 @@ public class TypedPropertiesConcurrencyTest {
             try {
                countDownLatch.await();
                for (int h = 0; h < 100; h++) {
-                  props.putSimpleStringProperty(SimpleString.toSimpleString("S" + h), SimpleString.toSimpleString("hello"));
+                  props.putSimpleStringProperty(SimpleString.of("S" + h), SimpleString.of("hello"));
                }
                props.getPropertyNames().clear();
             } catch (UnsupportedOperationException uoe) {
@@ -133,7 +133,7 @@ public class TypedPropertiesConcurrencyTest {
    @Test
    public void testEncodedSizeAfterClearIsSameAsNewTypedProperties() throws Exception {
       TypedProperties props = new TypedProperties();
-      props.putSimpleStringProperty(SimpleString.toSimpleString("helllllloooooo"), SimpleString.toSimpleString("raaaaaaaaaaaaaaaaaaaaaaaa"));
+      props.putSimpleStringProperty(SimpleString.of("helllllloooooo"), SimpleString.of("raaaaaaaaaaaaaaaaaaaaaaaa"));
 
       props.clear();
 
@@ -144,7 +144,7 @@ public class TypedPropertiesConcurrencyTest {
    @Test
    public void testMemoryOffsetAfterClearIsSameAsNewTypedProperties() throws Exception {
       TypedProperties props = new TypedProperties();
-      props.putSimpleStringProperty(SimpleString.toSimpleString("helllllloooooo"), SimpleString.toSimpleString("raaaaaaaaaaaaaaaaaaaaaaaa"));
+      props.putSimpleStringProperty(SimpleString.of("helllllloooooo"), SimpleString.of("raaaaaaaaaaaaaaaaaaaaaaaa"));
 
       props.clear();
 
diff --git a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesConversionTest.java b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesConversionTest.java
index 520ddf18dc..1efc761337 100644
--- a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesConversionTest.java
+++ b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesConversionTest.java
@@ -36,7 +36,7 @@ public class TypedPropertiesConversionTest {
 
    private SimpleString key;
 
-   private final SimpleString unknownKey = new SimpleString("this.key.is.never.used");
+   private final SimpleString unknownKey = SimpleString.of("this.key.is.never.used");
 
    @BeforeEach
    public void setUp() throws Exception {
@@ -50,9 +50,9 @@ public class TypedPropertiesConversionTest {
       props.putBooleanProperty(key, val);
 
       assertEquals(val, props.getBooleanProperty(key));
-      assertEquals(new SimpleString(Boolean.toString(val)), props.getSimpleStringProperty(key));
+      assertEquals(SimpleString.of(Boolean.toString(val)), props.getSimpleStringProperty(key));
 
-      props.putSimpleStringProperty(key, new SimpleString(Boolean.toString(val)));
+      props.putSimpleStringProperty(key, SimpleString.of(Boolean.toString(val)));
       assertEquals(val, props.getBooleanProperty(key));
 
       try {
@@ -71,7 +71,7 @@ public class TypedPropertiesConversionTest {
       props.putCharProperty(key, val);
 
       assertEquals(val, props.getCharProperty(key));
-      assertEquals(new SimpleString(Character.toString(val)), props.getSimpleStringProperty(key));
+      assertEquals(SimpleString.of(Character.toString(val)), props.getSimpleStringProperty(key));
 
       try {
          props.putByteProperty(key, RandomUtil.randomByte());
@@ -93,9 +93,9 @@ public class TypedPropertiesConversionTest {
       props.putByteProperty(key, val);
 
       assertEquals(val, props.getByteProperty(key));
-      assertEquals(new SimpleString(Byte.toString(val)), props.getSimpleStringProperty(key));
+      assertEquals(SimpleString.of(Byte.toString(val)), props.getSimpleStringProperty(key));
 
-      props.putSimpleStringProperty(key, new SimpleString(Byte.toString(val)));
+      props.putSimpleStringProperty(key, SimpleString.of(Byte.toString(val)));
       assertEquals(val, props.getByteProperty(key));
 
       try {
@@ -130,9 +130,9 @@ public class TypedPropertiesConversionTest {
       props.putIntProperty(key, val);
 
       assertEquals(val, props.getIntProperty(key));
-      assertEquals(new SimpleString(Integer.toString(val)), props.getSimpleStringProperty(key));
+      assertEquals(SimpleString.of(Integer.toString(val)), props.getSimpleStringProperty(key));
 
-      props.putSimpleStringProperty(key, new SimpleString(Integer.toString(val)));
+      props.putSimpleStringProperty(key, SimpleString.of(Integer.toString(val)));
       assertEquals(val, props.getIntProperty(key));
 
       Byte byteVal = RandomUtil.randomByte();
@@ -159,9 +159,9 @@ public class TypedPropertiesConversionTest {
       props.putLongProperty(key, val);
 
       assertEquals(val, props.getLongProperty(key));
-      assertEquals(new SimpleString(Long.toString(val)), props.getSimpleStringProperty(key));
+      assertEquals(SimpleString.of(Long.toString(val)), props.getSimpleStringProperty(key));
 
-      props.putSimpleStringProperty(key, new SimpleString(Long.toString(val)));
+      props.putSimpleStringProperty(key, SimpleString.of(Long.toString(val)));
       assertEquals(val, props.getLongProperty(key));
 
       Byte byteVal = RandomUtil.randomByte();
@@ -196,9 +196,9 @@ public class TypedPropertiesConversionTest {
       props.putDoubleProperty(key, val);
 
       assertEquals(val, props.getDoubleProperty(key));
-      assertEquals(new SimpleString(Double.toString(val)), props.getSimpleStringProperty(key));
+      assertEquals(SimpleString.of(Double.toString(val)), props.getSimpleStringProperty(key));
 
-      props.putSimpleStringProperty(key, new SimpleString(Double.toString(val)));
+      props.putSimpleStringProperty(key, SimpleString.of(Double.toString(val)));
       assertEquals(val, props.getDoubleProperty(key));
 
       try {
@@ -222,9 +222,9 @@ public class TypedPropertiesConversionTest {
 
       assertEquals(val, props.getFloatProperty(key));
       assertEquals(Double.valueOf(val), props.getDoubleProperty(key));
-      assertEquals(new SimpleString(Float.toString(val)), props.getSimpleStringProperty(key));
+      assertEquals(SimpleString.of(Float.toString(val)), props.getSimpleStringProperty(key));
 
-      props.putSimpleStringProperty(key, new SimpleString(Float.toString(val)));
+      props.putSimpleStringProperty(key, SimpleString.of(Float.toString(val)));
       assertEquals(val, props.getFloatProperty(key));
 
       try {
@@ -248,9 +248,9 @@ public class TypedPropertiesConversionTest {
 
       assertEquals(val, props.getShortProperty(key));
       assertEquals(Integer.valueOf(val), props.getIntProperty(key));
-      assertEquals(new SimpleString(Short.toString(val)), props.getSimpleStringProperty(key));
+      assertEquals(SimpleString.of(Short.toString(val)), props.getSimpleStringProperty(key));
 
-      props.putSimpleStringProperty(key, new SimpleString(Short.toString(val)));
+      props.putSimpleStringProperty(key, SimpleString.of(Short.toString(val)));
       assertEquals(val, props.getShortProperty(key));
 
       Byte byteVal = RandomUtil.randomByte();
diff --git a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesTest.java b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesTest.java
index 3b24cd41ee..d556954186 100644
--- a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesTest.java
+++ b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/TypedPropertiesTest.java
@@ -238,7 +238,7 @@ public class TypedPropertiesTest {
       TypedPropertiesTest.assertEqualsTypeProperties(emptyProps, decodedProps);
    }
 
-   private static final SimpleString PROP_NAME = SimpleString.toSimpleString("TEST_PROP");
+   private static final SimpleString PROP_NAME = SimpleString.of("TEST_PROP");
 
    @Test
    public void testCannotClearInternalPropertiesIfEmpty() {
@@ -268,7 +268,7 @@ public class TypedPropertiesTest {
       ByteBuf buf = Unpooled.buffer(Byte.BYTES, Byte.BYTES);
       props.encode(buf);
       buf.resetReaderIndex();
-      assertFalse(searchProperty(SimpleString.toSimpleString(""), buf, 0), "There is no property");
+      assertFalse(searchProperty(SimpleString.of(""), buf, 0), "There is no property");
    }
 
    @Test
@@ -294,7 +294,7 @@ public class TypedPropertiesTest {
       assertFalse(searchProperty(value, buf, 0));
       props.forEachKey(key -> {
          assertTrue(searchProperty(key, buf, 0));
-         assertTrue(searchProperty(SimpleString.toSimpleString(key.toString()), buf, 0));
+         assertTrue(searchProperty(SimpleString.of(key.toString()), buf, 0));
          // concat a string just to check if the search won't perform an eager search to find the string pattern
          assertFalse(searchProperty(key.concat(" "), buf, 0));
       });
@@ -308,7 +308,7 @@ public class TypedPropertiesTest {
          buf.writeByte(DataConstants.NOT_NULL);
          buf.writeInt(1);
          buf.resetReaderIndex();
-         searchProperty(SimpleString.toSimpleString(" "), buf, 0);
+         searchProperty(SimpleString.of(" "), buf, 0);
       });
    }
 
@@ -322,7 +322,7 @@ public class TypedPropertiesTest {
          //SimpleString::data length
          buf.writeInt(2);
          buf.resetReaderIndex();
-         searchProperty(SimpleString.toSimpleString("a"), buf, 0);
+         searchProperty(SimpleString.of("a"), buf, 0);
       });
    }
 
@@ -339,7 +339,7 @@ public class TypedPropertiesTest {
          // invalid type
          buf.writeByte(Byte.MIN_VALUE);
          buf.resetReaderIndex();
-         searchProperty(SimpleString.toSimpleString(""), buf, 0);
+         searchProperty(SimpleString.of(""), buf, 0);
       });
    }
 
@@ -355,7 +355,7 @@ public class TypedPropertiesTest {
       // invalid type
       buf.writeByte(Byte.MIN_VALUE);
       buf.resetReaderIndex();
-      assertFalse(searchProperty(SimpleString.toSimpleString(""), buf, 0));
+      assertFalse(searchProperty(SimpleString.of(""), buf, 0));
    }
 
    @BeforeEach
@@ -369,10 +369,10 @@ public class TypedPropertiesTest {
       final int capacity = 8;
       final int chars = Integer.toString(capacity).length();
       final TypedProperties.StringValue.ByteBufStringValuePool pool = new TypedProperties.StringValue.ByteBufStringValuePool(capacity, chars);
-      final int bytes = new SimpleString(Integer.toString(capacity)).sizeof();
+      final int bytes = SimpleString.of(Integer.toString(capacity)).sizeof();
       final ByteBuf bb = Unpooled.buffer(bytes, bytes);
       for (int i = 0; i < capacity; i++) {
-         final SimpleString s = new SimpleString(Integer.toString(i));
+         final SimpleString s = SimpleString.of(Integer.toString(i));
          bb.resetWriterIndex();
          SimpleString.writeSimpleString(bb, s);
          bb.resetReaderIndex();
@@ -385,7 +385,7 @@ public class TypedPropertiesTest {
 
    @Test
    public void testByteBufStringValuePoolTooLong() {
-      final SimpleString tooLong = new SimpleString("aa");
+      final SimpleString tooLong = SimpleString.of("aa");
       final ByteBuf bb = Unpooled.buffer(tooLong.sizeof(), tooLong.sizeof());
       SimpleString.writeSimpleString(bb, tooLong);
       final TypedProperties.StringValue.ByteBufStringValuePool pool = new TypedProperties.StringValue.ByteBufStringValuePool(1, tooLong.length() - 1);
@@ -414,7 +414,7 @@ public class TypedPropertiesTest {
       };
       t.start();
       for (int i = 0; !error.get() && (i < 100 || copies.get() < 50); i++) {
-         properties.putIntProperty(SimpleString.toSimpleString("key" + i), i);
+         properties.putIntProperty(SimpleString.of("key" + i), i);
       }
 
       running.set(false);
diff --git a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/bean/MetaBeanTest.java b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/bean/MetaBeanTest.java
index 50f0076d90..0721104349 100644
--- a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/bean/MetaBeanTest.java
+++ b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/bean/MetaBeanTest.java
@@ -46,7 +46,7 @@ public class MetaBeanTest {
       sourceObject.setC(RandomUtil.randomInt());
       sourceObject.setD(null);
       sourceObject.setIdCacheSize(333);
-      sourceObject.setSimpleString(SimpleString.toSimpleString("mySimpleString"));
+      sourceObject.setSimpleString(SimpleString.of("mySimpleString"));
       sourceObject.setFloatValue(33.33f);
       sourceObject.setDoubleValue(11.11);
       sourceObject.setBoolValue(true);
@@ -71,7 +71,7 @@ public class MetaBeanTest {
       assertEquals(MyEnum.TWO, result.getMyEnum());
       assertTrue(result.getBoolValue());
 
-      sourceObject.setGated(SimpleString.toSimpleString("gated-now-has-value"));
+      sourceObject.setGated(SimpleString.of("gated-now-has-value"));
       jsonObject = MYClass.metaBean.toJSON(sourceObject, false);
       assertTrue(jsonObject.containsKey("gated"));
       assertEquals("gated-now-has-value", jsonObject.getString("gated"));
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
index 7b996ceaa1..3b580f40b6 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
@@ -176,10 +176,10 @@ public final class ActiveMQDefaultConfiguration {
 
    private static String DEFAULT_ADDRESS_PATH_SEPARATOR = ".";
 
-   private static SimpleString DEFAULT_MANAGEMENT_ADDRESS = new SimpleString("activemq.management");
+   private static SimpleString DEFAULT_MANAGEMENT_ADDRESS = SimpleString.of("activemq.management");
 
    // the name of the address that consumers bind to receive management notifications
-   private static SimpleString DEFAULT_MANAGEMENT_NOTIFICATION_ADDRESS = new SimpleString("activemq.notifications");
+   private static SimpleString DEFAULT_MANAGEMENT_NOTIFICATION_ADDRESS = SimpleString.of("activemq.notifications");
 
    // The default address used for clustering, empty string means all addresses
    private static String DEFAULT_CLUSTER_ADDRESS = "";
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/FilterConstants.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/FilterConstants.java
index 3803a5452f..e690ba602d 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/FilterConstants.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/FilterConstants.java
@@ -25,57 +25,57 @@ public final class FilterConstants {
    /**
     * Name of the ActiveMQ Artemis UserID header.
     */
-   public static final SimpleString ACTIVEMQ_USERID = new SimpleString("AMQUserID");
+   public static final SimpleString ACTIVEMQ_USERID = SimpleString.of("AMQUserID");
 
    /**
     * Name of the ActiveMQ Artemis Message expiration header.
     */
-   public static final SimpleString ACTIVEMQ_EXPIRATION = new SimpleString("AMQExpiration");
+   public static final SimpleString ACTIVEMQ_EXPIRATION = SimpleString.of("AMQExpiration");
 
    /**
     * Name of the ActiveMQ Artemis Message durable header.
     */
-   public static final SimpleString ACTIVEMQ_DURABLE = new SimpleString("AMQDurable");
+   public static final SimpleString ACTIVEMQ_DURABLE = SimpleString.of("AMQDurable");
 
    /**
     * Value for the Durable header when the message is non-durable.
     */
-   public static final SimpleString NON_DURABLE = new SimpleString("NON_DURABLE");
+   public static final SimpleString NON_DURABLE = SimpleString.of("NON_DURABLE");
 
    /**
     * Value for the Durable header when the message is durable.
     */
-   public static final SimpleString DURABLE = new SimpleString("DURABLE");
+   public static final SimpleString DURABLE = SimpleString.of("DURABLE");
 
    /**
     * Name of the ActiveMQ Artemis Message timestamp header.
     */
-   public static final SimpleString ACTIVEMQ_TIMESTAMP = new SimpleString("AMQTimestamp");
+   public static final SimpleString ACTIVEMQ_TIMESTAMP = SimpleString.of("AMQTimestamp");
 
    /**
     * Name of the ActiveMQ Artemis Message priority header.
     */
-   public static final SimpleString ACTIVEMQ_PRIORITY = new SimpleString("AMQPriority");
+   public static final SimpleString ACTIVEMQ_PRIORITY = SimpleString.of("AMQPriority");
 
    /**
     * Name of the ActiveMQ Artemis Message size header.
     */
-   public static final SimpleString ACTIVEMQ_SIZE = new SimpleString("AMQSize");
+   public static final SimpleString ACTIVEMQ_SIZE = SimpleString.of("AMQSize");
 
    /**
     * Name of the ActiveMQ Artemis Address header
     */
-   public static final SimpleString ACTIVEMQ_ADDRESS = new SimpleString("AMQAddress");
+   public static final SimpleString ACTIVEMQ_ADDRESS = SimpleString.of("AMQAddress");
 
    /**
     * Name of the ActiveMQ Artemis Message group id header.
     */
-   public static final SimpleString ACTIVEMQ_GROUP_ID = new SimpleString("AMQGroupID");
+   public static final SimpleString ACTIVEMQ_GROUP_ID = SimpleString.of("AMQGroupID");
 
    /**
     * All ActiveMQ Artemis headers are prepended by this prefix.
     */
-   public static final SimpleString ACTIVEMQ_PREFIX = new SimpleString("AMQ");
+   public static final SimpleString ACTIVEMQ_PREFIX = SimpleString.of("AMQ");
 
    /**
     * Proton protocol stores JMSMessageID as NATIVE_MESSAGE_ID
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java
index ff4a0c4182..88abfa5531 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java
@@ -86,98 +86,98 @@ public interface Message {
       name -> (name.startsWith(Message.HDR_ROUTE_TO_IDS) && !name.equals(Message.HDR_ROUTE_TO_IDS)) ||
       (name.startsWith(Message.HDR_ROUTE_TO_ACK_IDS) && !name.equals(Message.HDR_ROUTE_TO_ACK_IDS));
 
-   SimpleString HDR_ROUTE_TO_IDS = new SimpleString("_AMQ_ROUTE_TO");
+   SimpleString HDR_ROUTE_TO_IDS = SimpleString.of("_AMQ_ROUTE_TO");
 
-   SimpleString HDR_SCALEDOWN_TO_IDS = new SimpleString("_AMQ_SCALEDOWN_TO");
+   SimpleString HDR_SCALEDOWN_TO_IDS = SimpleString.of("_AMQ_SCALEDOWN_TO");
 
-   SimpleString HDR_ROUTE_TO_ACK_IDS = new SimpleString("_AMQ_ACK_ROUTE_TO");
+   SimpleString HDR_ROUTE_TO_ACK_IDS = SimpleString.of("_AMQ_ACK_ROUTE_TO");
 
    // used by the bridges to set duplicates
-   SimpleString HDR_BRIDGE_DUPLICATE_ID = new SimpleString("_AMQ_BRIDGE_DUP");
+   SimpleString HDR_BRIDGE_DUPLICATE_ID = SimpleString.of("_AMQ_BRIDGE_DUP");
 
    /**
     * the actual time the message was expired.
     * * *
     */
-   SimpleString HDR_ACTUAL_EXPIRY_TIME = new SimpleString("_AMQ_ACTUAL_EXPIRY");
+   SimpleString HDR_ACTUAL_EXPIRY_TIME = SimpleString.of("_AMQ_ACTUAL_EXPIRY");
 
    /**
     * The original address of a message when a message is diverted or transferred through DLQ or expiry
     */
-   SimpleString HDR_ORIGINAL_ADDRESS = new SimpleString("_AMQ_ORIG_ADDRESS");
+   SimpleString HDR_ORIGINAL_ADDRESS = SimpleString.of("_AMQ_ORIG_ADDRESS");
 
    /**
     * The original address of a message when a message is transferred through DLQ or expiry
     */
-   SimpleString HDR_ORIGINAL_QUEUE = new SimpleString("_AMQ_ORIG_QUEUE");
+   SimpleString HDR_ORIGINAL_QUEUE = SimpleString.of("_AMQ_ORIG_QUEUE");
 
    /**
     * The original message ID before the message was transferred.
     */
-   SimpleString HDR_ORIG_MESSAGE_ID = new SimpleString("_AMQ_ORIG_MESSAGE_ID");
+   SimpleString HDR_ORIG_MESSAGE_ID = SimpleString.of("_AMQ_ORIG_MESSAGE_ID");
 
    /**
     * For the Message Grouping feature.
     */
-   SimpleString HDR_GROUP_ID = new SimpleString("_AMQ_GROUP_ID");
+   SimpleString HDR_GROUP_ID = SimpleString.of("_AMQ_GROUP_ID");
 
-   SimpleString HDR_GROUP_SEQUENCE = new SimpleString("_AMQ_GROUP_SEQUENCE");
+   SimpleString HDR_GROUP_SEQUENCE = SimpleString.of("_AMQ_GROUP_SEQUENCE");
 
    /**
     * to determine if the Large Message was compressed.
     */
-   SimpleString HDR_LARGE_COMPRESSED = new SimpleString("_AMQ_LARGE_COMPRESSED");
+   SimpleString HDR_LARGE_COMPRESSED = SimpleString.of("_AMQ_LARGE_COMPRESSED");
 
    /**
     * The body size of a large message before it was compressed.
     */
-   SimpleString HDR_LARGE_BODY_SIZE = new SimpleString("_AMQ_LARGE_SIZE");
+   SimpleString HDR_LARGE_BODY_SIZE = SimpleString.of("_AMQ_LARGE_SIZE");
 
    /**
     * To be used with Scheduled Delivery.
     */
-   SimpleString HDR_SCHEDULED_DELIVERY_TIME = new SimpleString("_AMQ_SCHED_DELIVERY");
+   SimpleString HDR_SCHEDULED_DELIVERY_TIME = SimpleString.of("_AMQ_SCHED_DELIVERY");
 
    /**
     * To be used with duplicate detection.
     */
-   SimpleString HDR_DUPLICATE_DETECTION_ID = new SimpleString("_AMQ_DUPL_ID");
+   SimpleString HDR_DUPLICATE_DETECTION_ID = SimpleString.of("_AMQ_DUPL_ID");
 
    /**
     * To be used with Last value queues.
     */
-   SimpleString HDR_LAST_VALUE_NAME = new SimpleString("_AMQ_LVQ_NAME");
+   SimpleString HDR_LAST_VALUE_NAME = SimpleString.of("_AMQ_LVQ_NAME");
 
    /**
     * To define the mime-type of body messages. Mainly for stomp but it could be informed on any message for user purposes.
     */
-   SimpleString HDR_CONTENT_TYPE = new SimpleString("_AMQ_CONTENT_TYPE");
+   SimpleString HDR_CONTENT_TYPE = SimpleString.of("_AMQ_CONTENT_TYPE");
 
    /**
     * The name of the validated user who sent the message. Useful for auditing.
     */
-   SimpleString HDR_VALIDATED_USER = new SimpleString("_AMQ_VALIDATED_USER");
+   SimpleString HDR_VALIDATED_USER = SimpleString.of("_AMQ_VALIDATED_USER");
 
    /**
     * The Routing Type for this message.  Ensures that this message is only routed to queues with matching routing type.
     */
-   SimpleString HDR_ROUTING_TYPE = new SimpleString("_AMQ_ROUTING_TYPE");
+   SimpleString HDR_ROUTING_TYPE = SimpleString.of("_AMQ_ROUTING_TYPE");
 
    /**
     * The original routing type of a message before getting transferred through DLQ or expiry
     */
-   SimpleString HDR_ORIG_ROUTING_TYPE = new SimpleString("_AMQ_ORIG_ROUTING_TYPE");
+   SimpleString HDR_ORIG_ROUTING_TYPE = SimpleString.of("_AMQ_ORIG_ROUTING_TYPE");
 
    /**
     * The time at which the message arrived at the broker.
     */
-   SimpleString HDR_INGRESS_TIMESTAMP = new SimpleString("_AMQ_INGRESS_TIMESTAMP");
+   SimpleString HDR_INGRESS_TIMESTAMP = SimpleString.of("_AMQ_INGRESS_TIMESTAMP");
 
    /**
     * The prefix used (if any) when sending this message.  For protocols (e.g. STOMP) that need to track this and restore
     * the prefix when the message is consumed.
     */
-   SimpleString HDR_PREFIX = new SimpleString("_AMQ_PREFIX");
+   SimpleString HDR_PREFIX = SimpleString.of("_AMQ_PREFIX");
 
    byte DEFAULT_TYPE = 0;
 
@@ -501,7 +501,7 @@ public interface Message {
          if (duplicateID instanceof SimpleString) {
             return ((SimpleString) duplicateID).getData();
          } else if (duplicateID instanceof String) {
-            return new SimpleString(duplicateID.toString()).getData();
+            return SimpleString.of(duplicateID.toString()).getData();
          } else {
             return (byte[]) duplicateID;
          }
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientRequestor.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientRequestor.java
index 020887fb25..ce03d73ff2 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientRequestor.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientRequestor.java
@@ -51,7 +51,7 @@ public final class ClientRequestor implements AutoCloseable {
       queueSession = session;
 
       requestProducer = queueSession.createProducer(requestAddress);
-      replyQueue = new SimpleString(requestAddress + "." + UUID.randomUUID().toString());
+      replyQueue = SimpleString.of(requestAddress + "." + UUID.randomUUID().toString());
       queueSession.createQueue(new QueueConfiguration(replyQueue).setDurable(false).setTemporary(true));
       replyConsumer = queueSession.createConsumer(replyQueue);
    }
@@ -60,7 +60,7 @@ public final class ClientRequestor implements AutoCloseable {
     * @see ClientRequestor#ClientRequestor(ClientSession, SimpleString)
     */
    public ClientRequestor(final ClientSession session, final String requestAddress) throws Exception {
-      this(session, SimpleString.toSimpleString(requestAddress));
+      this(session, SimpleString.of(requestAddress));
    }
 
    /**
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ManagementHelper.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ManagementHelper.java
index 8f70139c4c..88090c2ef9 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ManagementHelper.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ManagementHelper.java
@@ -36,63 +36,63 @@ import org.apache.activemq.artemis.core.message.impl.CoreMessage;
  */
 public final class ManagementHelper {
 
-   public static final SimpleString HDR_RESOURCE_NAME = new SimpleString("_AMQ_ResourceName");
+   public static final SimpleString HDR_RESOURCE_NAME = SimpleString.of("_AMQ_ResourceName");
 
-   public static final SimpleString HDR_ATTRIBUTE = new SimpleString("_AMQ_Attribute");
+   public static final SimpleString HDR_ATTRIBUTE = SimpleString.of("_AMQ_Attribute");
 
-   public static final SimpleString HDR_OPERATION_NAME = new SimpleString("_AMQ_OperationName");
+   public static final SimpleString HDR_OPERATION_NAME = SimpleString.of("_AMQ_OperationName");
 
-   public static final SimpleString HDR_OPERATION_SUCCEEDED = new SimpleString("_AMQ_OperationSucceeded");
+   public static final SimpleString HDR_OPERATION_SUCCEEDED = SimpleString.of("_AMQ_OperationSucceeded");
 
-   public static final SimpleString HDR_NOTIFICATION_TYPE = new SimpleString("_AMQ_NotifType");
+   public static final SimpleString HDR_NOTIFICATION_TYPE = SimpleString.of("_AMQ_NotifType");
 
-   public static final SimpleString HDR_NOTIFICATION_TIMESTAMP = new SimpleString("_AMQ_NotifTimestamp");
+   public static final SimpleString HDR_NOTIFICATION_TIMESTAMP = SimpleString.of("_AMQ_NotifTimestamp");
 
-   public static final SimpleString HDR_ROUTING_NAME = new SimpleString("_AMQ_RoutingName");
+   public static final SimpleString HDR_ROUTING_NAME = SimpleString.of("_AMQ_RoutingName");
 
-   public static final SimpleString HDR_CLUSTER_NAME = new SimpleString("_AMQ_ClusterName");
+   public static final SimpleString HDR_CLUSTER_NAME = SimpleString.of("_AMQ_ClusterName");
 
-   public static final SimpleString HDR_ADDRESS = new SimpleString("_AMQ_Address");
+   public static final SimpleString HDR_ADDRESS = SimpleString.of("_AMQ_Address");
 
-   public static final SimpleString HDR_ROUTING_TYPE = new SimpleString("_AMQ_Routing_Type");
+   public static final SimpleString HDR_ROUTING_TYPE = SimpleString.of("_AMQ_Routing_Type");
 
-   public static final SimpleString HDR_BINDING_ID = new SimpleString("_AMQ_Binding_ID");
+   public static final SimpleString HDR_BINDING_ID = SimpleString.of("_AMQ_Binding_ID");
 
-   public static final SimpleString HDR_BINDING_TYPE = new SimpleString("_AMQ_Binding_Type");
+   public static final SimpleString HDR_BINDING_TYPE = SimpleString.of("_AMQ_Binding_Type");
 
-   public static final SimpleString HDR_FILTERSTRING = new SimpleString("_AMQ_FilterString");
+   public static final SimpleString HDR_FILTERSTRING = SimpleString.of("_AMQ_FilterString");
 
-   public static final SimpleString HDR_DISTANCE = new SimpleString("_AMQ_Distance");
+   public static final SimpleString HDR_DISTANCE = SimpleString.of("_AMQ_Distance");
 
-   public static final SimpleString HDR_CONSUMER_COUNT = new SimpleString("_AMQ_ConsumerCount");
+   public static final SimpleString HDR_CONSUMER_COUNT = SimpleString.of("_AMQ_ConsumerCount");
 
-   public static final SimpleString HDR_USER = new SimpleString("_AMQ_User");
+   public static final SimpleString HDR_USER = SimpleString.of("_AMQ_User");
 
-   public static final SimpleString HDR_VALIDATED_USER = new SimpleString("_AMQ_ValidatedUser");
+   public static final SimpleString HDR_VALIDATED_USER = SimpleString.of("_AMQ_ValidatedUser");
 
-   public static final SimpleString HDR_CERT_SUBJECT_DN = new SimpleString("_AMQ_CertSubjectDN");
+   public static final SimpleString HDR_CERT_SUBJECT_DN = SimpleString.of("_AMQ_CertSubjectDN");
 
-   public static final SimpleString HDR_CHECK_TYPE = new SimpleString("_AMQ_CheckType");
+   public static final SimpleString HDR_CHECK_TYPE = SimpleString.of("_AMQ_CheckType");
 
-   public static final SimpleString HDR_SESSION_NAME = new SimpleString("_AMQ_SessionName");
+   public static final SimpleString HDR_SESSION_NAME = SimpleString.of("_AMQ_SessionName");
 
-   public static final SimpleString HDR_REMOTE_ADDRESS = new SimpleString("_AMQ_RemoteAddress");
+   public static final SimpleString HDR_REMOTE_ADDRESS = SimpleString.of("_AMQ_RemoteAddress");
 
-   public static final SimpleString HDR_PROPOSAL_GROUP_ID = new SimpleString("_JBM_ProposalGroupId");
+   public static final SimpleString HDR_PROPOSAL_GROUP_ID = SimpleString.of("_JBM_ProposalGroupId");
 
-   public static final SimpleString HDR_PROPOSAL_VALUE = new SimpleString("_JBM_ProposalValue");
+   public static final SimpleString HDR_PROPOSAL_VALUE = SimpleString.of("_JBM_ProposalValue");
 
-   public static final SimpleString HDR_PROPOSAL_ALT_VALUE = new SimpleString("_JBM_ProposalAltValue");
+   public static final SimpleString HDR_PROPOSAL_ALT_VALUE = SimpleString.of("_JBM_ProposalAltValue");
 
-   public static final SimpleString HDR_CONSUMER_NAME = new SimpleString("_AMQ_ConsumerName");
+   public static final SimpleString HDR_CONSUMER_NAME = SimpleString.of("_AMQ_ConsumerName");
 
-   public static final SimpleString HDR_CONNECTION_NAME = new SimpleString("_AMQ_ConnectionName");
+   public static final SimpleString HDR_CONNECTION_NAME = SimpleString.of("_AMQ_ConnectionName");
 
-   public static final SimpleString HDR_MESSAGE_ID = new SimpleString("_AMQ_Message_ID");
+   public static final SimpleString HDR_MESSAGE_ID = SimpleString.of("_AMQ_Message_ID");
 
-   public static final SimpleString HDR_PROTOCOL_NAME = new SimpleString("_AMQ_Protocol_Name");
+   public static final SimpleString HDR_PROTOCOL_NAME = SimpleString.of("_AMQ_Protocol_Name");
 
-   public static final SimpleString HDR_CLIENT_ID = new SimpleString("_AMQ_Client_ID");
+   public static final SimpleString HDR_CLIENT_ID = SimpleString.of("_AMQ_Client_ID");
 
    // Lambda declaration for management function. Pretty much same thing as java.util.function.Consumer but with an exception in the declaration that was needed.
    public interface MessageAcceptor {
@@ -142,8 +142,8 @@ public final class ManagementHelper {
     * @see ResourceNames
     */
    public static void putAttribute(final ICoreMessage message, final String resourceName, final String attribute) {
-      message.putStringProperty(ManagementHelper.HDR_RESOURCE_NAME, new SimpleString(resourceName));
-      message.putStringProperty(ManagementHelper.HDR_ATTRIBUTE, new SimpleString(attribute));
+      message.putStringProperty(ManagementHelper.HDR_RESOURCE_NAME, SimpleString.of(resourceName));
+      message.putStringProperty(ManagementHelper.HDR_ATTRIBUTE, SimpleString.of(attribute));
    }
 
    /**
@@ -174,8 +174,8 @@ public final class ManagementHelper {
                                              final String operationName,
                                              final Object... parameters) throws Exception {
       // store the name of the operation in the headers
-      message.putStringProperty(ManagementHelper.HDR_RESOURCE_NAME, new SimpleString(resourceName));
-      message.putStringProperty(ManagementHelper.HDR_OPERATION_NAME, new SimpleString(operationName));
+      message.putStringProperty(ManagementHelper.HDR_RESOURCE_NAME, SimpleString.of(resourceName));
+      message.putStringProperty(ManagementHelper.HDR_OPERATION_NAME, SimpleString.of(operationName));
 
       // and the params go in the body, since might be too large for header
 
@@ -189,7 +189,7 @@ public final class ManagementHelper {
          paramString = null;
       }
 
-      message.getBodyBuffer().writeNullableSimpleString(SimpleString.toSimpleString(paramString));
+      message.getBodyBuffer().writeNullableSimpleString(SimpleString.of(paramString));
    }
 
    /**
@@ -238,7 +238,7 @@ public final class ManagementHelper {
          resultString = null;
       }
 
-      message.getBodyBuffer().writeNullableSimpleString(SimpleString.toSimpleString(resultString));
+      message.getBodyBuffer().writeNullableSimpleString(SimpleString.of(resultString));
    }
 
    /**
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ResourceNames.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ResourceNames.java
index 6092214e31..e07f99ce4e 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ResourceNames.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ResourceNames.java
@@ -61,7 +61,7 @@ public final class ResourceNames {
    }
 
    private static SimpleString getRetroactiveResourceName(String prefix, String delimiter, SimpleString address, String resourceType) {
-      return SimpleString.toSimpleString(prefix.concat(address.toString()).concat(delimiter).concat(resourceType).concat(delimiter).concat(RETROACTIVE_SUFFIX));
+      return SimpleString.of(prefix.concat(address.toString()).concat(delimiter).concat(resourceType).concat(delimiter).concat(RETROACTIVE_SUFFIX));
    }
 
    public static boolean isRetroactiveResource(String prefix, SimpleString address) {
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientConsumerImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientConsumerImpl.java
index b8a7b86546..431921b13a 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientConsumerImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientConsumerImpl.java
@@ -59,7 +59,7 @@ public final class ClientConsumerImpl implements ClientConsumerInternal {
 
    private static final int NUM_PRIORITIES = 10;
 
-   public static final SimpleString FORCED_DELIVERY_MESSAGE = new SimpleString("_hornetq.forced.delivery.seq");
+   public static final SimpleString FORCED_DELIVERY_MESSAGE = SimpleString.of("_hornetq.forced.delivery.seq");
 
    private final ClientSessionInternal session;
 
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerCreditManagerImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerCreditManagerImpl.java
index fba2928343..59762aa786 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerCreditManagerImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerCreditManagerImpl.java
@@ -237,7 +237,7 @@ public class ClientProducerCreditManagerImpl implements ClientProducerCreditMana
 
       @Override
       public SimpleString getAddress() {
-         return SimpleString.toSimpleString("");
+         return SimpleString.of("");
       }
 
       @Override
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerImpl.java
index f3b01a7eca..e538379b90 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerImpl.java
@@ -131,7 +131,7 @@ public class ClientProducerImpl implements ClientProducerInternal {
 
    @Override
    public void send(final String address1, final Message message) throws ActiveMQException {
-      send(SimpleString.toSimpleString(address1), message);
+      send(SimpleString.of(address1), message);
    }
 
    @Override
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java
index 0e1b7a4c01..065a1945fc 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java
@@ -276,7 +276,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
    public void createQueue(final String address,
                            final String queueName,
                            final boolean durable) throws ActiveMQException {
-      createQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), durable);
+      createQueue(SimpleString.of(address), SimpleString.of(queueName), durable);
    }
 
    @Override
@@ -346,9 +346,9 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
                            final String queueName,
                            final String filterString,
                            final boolean durable) throws ActiveMQException {
-      createQueue(SimpleString.toSimpleString(address),
-                  SimpleString.toSimpleString(queueName),
-                  SimpleString.toSimpleString(filterString),
+      createQueue(SimpleString.of(address),
+                  SimpleString.of(queueName),
+                  SimpleString.of(filterString),
                   durable);
    }
 
@@ -367,7 +367,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
                            final String filterString,
                            final boolean durable,
                            final boolean autoCreated) throws ActiveMQException {
-      createQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filterString), durable, autoCreated);
+      createQueue(SimpleString.of(address), SimpleString.of(queueName), SimpleString.of(filterString), durable, autoCreated);
    }
 
    @Override
@@ -377,7 +377,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
    @Override
    public void createTemporaryQueue(final String address, final String queueName) throws ActiveMQException {
-      createTemporaryQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName));
+      createTemporaryQueue(SimpleString.of(address), SimpleString.of(queueName));
    }
 
    @Override
@@ -391,7 +391,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
    public void createTemporaryQueue(final String address,
                                     final String queueName,
                                     final String filter) throws ActiveMQException {
-      createTemporaryQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filter));
+      createTemporaryQueue(SimpleString.of(address), SimpleString.of(queueName), SimpleString.of(filter));
    }
 
 
@@ -421,10 +421,10 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
    @Override
    public void createQueue(final String address, final RoutingType routingType, final String queueName, final String filterString,
                            final boolean durable, final boolean autoCreated) throws ActiveMQException {
-      createQueue(SimpleString.toSimpleString(address),
+      createQueue(SimpleString.of(address),
                   routingType,
-                  SimpleString.toSimpleString(queueName),
-                  SimpleString.toSimpleString(filterString),
+                  SimpleString.of(queueName),
+                  SimpleString.of(filterString),
                   durable,
                   autoCreated);
    }
@@ -493,10 +493,10 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
    @Override
    public void createQueue(final String address, final RoutingType routingType, final String queueName, final String filterString,
                            final boolean durable, final boolean autoCreated, final int maxConsumers, final boolean purgeOnNoConsumers, Boolean exclusive, Boolean lastValue) throws ActiveMQException {
-      createQueue(SimpleString.toSimpleString(address),
+      createQueue(SimpleString.of(address),
                   routingType,
-                  SimpleString.toSimpleString(queueName),
-                  SimpleString.toSimpleString(filterString),
+                  SimpleString.of(queueName),
+                  SimpleString.of(filterString),
                   durable,
                   autoCreated,
                   maxConsumers,
@@ -514,7 +514,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
    @Override
    public void createTemporaryQueue(final String address, final RoutingType routingType, final String queueName) throws ActiveMQException {
-      createTemporaryQueue(SimpleString.toSimpleString(address), routingType, SimpleString.toSimpleString(queueName));
+      createTemporaryQueue(SimpleString.of(address), routingType, SimpleString.of(queueName));
    }
 
    @Deprecated
@@ -564,7 +564,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
    @Override
    public void createTemporaryQueue(final String address, final RoutingType routingType, final String queueName, final String filter) throws ActiveMQException {
-      createTemporaryQueue(SimpleString.toSimpleString(address), routingType, SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filter));
+      createTemporaryQueue(SimpleString.of(address), routingType, SimpleString.of(queueName), SimpleString.of(filter));
    }
 
    /**
@@ -679,7 +679,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
     */
    @Override
    public void createQueue(String address, RoutingType routingType, String queueName, boolean durable) throws ActiveMQException {
-      createQueue(SimpleString.toSimpleString(address), routingType, SimpleString.toSimpleString(queueName), durable);
+      createQueue(SimpleString.of(address), routingType, SimpleString.of(queueName), durable);
    }
 
    /**
@@ -693,8 +693,8 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
    @Deprecated
    @Override
    public void createQueue(String address, RoutingType routingType, String queueName) throws ActiveMQException {
-      internalCreateQueue(SimpleString.toSimpleString(address),
-                          SimpleString.toSimpleString(queueName),
+      internalCreateQueue(SimpleString.of(address),
+                          SimpleString.of(queueName),
                           false,
                           false,
                           new QueueAttributes()
@@ -766,7 +766,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
     */
    @Override
    public void createQueue(String address, RoutingType routingType, String queueName, String filter, boolean durable) throws ActiveMQException {
-      createQueue(SimpleString.toSimpleString(address), routingType, SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filter),
+      createQueue(SimpleString.of(address), routingType, SimpleString.of(queueName), SimpleString.of(filter),
                   durable);
    }
 
@@ -785,7 +785,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
    @Override
    public void deleteQueue(final String queueName) throws ActiveMQException {
-      deleteQueue(SimpleString.toSimpleString(queueName));
+      deleteQueue(SimpleString.of(queueName));
    }
 
    @Override
@@ -815,7 +815,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
    @Override
    public ClientConsumer createConsumer(final String queueName) throws ActiveMQException {
-      return createConsumer(SimpleString.toSimpleString(queueName));
+      return createConsumer(SimpleString.of(queueName));
    }
 
    @Override
@@ -826,12 +826,12 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
    @Override
    public void createQueue(final String address, final String queueName) throws ActiveMQException {
-      createQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName));
+      createQueue(SimpleString.of(address), SimpleString.of(queueName));
    }
 
    @Override
    public ClientConsumer createConsumer(final String queueName, final String filterString) throws ActiveMQException {
-      return createConsumer(SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filterString));
+      return createConsumer(SimpleString.of(queueName), SimpleString.of(filterString));
    }
 
    @Override
@@ -859,12 +859,12 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
    public ClientConsumer createConsumer(final String queueName,
                                         final String filterString,
                                         final boolean browseOnly) throws ActiveMQException {
-      return createConsumer(SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filterString), browseOnly);
+      return createConsumer(SimpleString.of(queueName), SimpleString.of(filterString), browseOnly);
    }
 
    @Override
    public ClientConsumer createConsumer(final String queueName, final boolean browseOnly) throws ActiveMQException {
-      return createConsumer(SimpleString.toSimpleString(queueName), null, browseOnly);
+      return createConsumer(SimpleString.of(queueName), null, browseOnly);
    }
 
    @Override
@@ -907,7 +907,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
                                         final int windowSize,
                                         final int maxRate,
                                         final boolean browseOnly) throws ActiveMQException {
-      return createConsumer(SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filterString), windowSize, maxRate, browseOnly);
+      return createConsumer(SimpleString.of(queueName), SimpleString.of(filterString), windowSize, maxRate, browseOnly);
    }
 
    @Override
@@ -922,7 +922,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
    @Override
    public ClientProducer createProducer(final String address) throws ActiveMQException {
-      return createProducer(SimpleString.toSimpleString(address));
+      return createProducer(SimpleString.of(address));
    }
 
    @Override
@@ -931,7 +931,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
    }
 
    public ClientProducer createProducer(final String address, final int rate) throws ActiveMQException {
-      return createProducer(SimpleString.toSimpleString(address), rate);
+      return createProducer(SimpleString.of(address), rate);
    }
 
    @Override
@@ -2040,7 +2040,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
                                                                       maxRate == -1 ? null : new TokenBucketLimiterImpl(maxRate, false),
                                                                       autoCommitSends && blockOnNonDurableSend,
                                                                       autoCommitSends && blockOnDurableSend,
-                                                                      autoGroup, groupID == null ? null : new SimpleString(groupID),
+                                                                      autoGroup, groupID == null ? null : SimpleString.of(groupID),
                                                                       minLargeMessageSize,
                                                                       sessionContext,
                                                                       producerIDs.incrementAndGet());
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/CompressedLargeMessageControllerImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/CompressedLargeMessageControllerImpl.java
index eae68326be..e2e16231e1 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/CompressedLargeMessageControllerImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/CompressedLargeMessageControllerImpl.java
@@ -631,7 +631,7 @@ final class CompressedLargeMessageControllerImpl implements LargeMessageControll
       int len = readInt();
       byte[] data = new byte[len];
       readBytes(data);
-      return new SimpleString(data);
+      return SimpleString.of(data);
    }
 
    @Override
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/LargeMessageControllerImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/LargeMessageControllerImpl.java
index 798bd49a6a..56736afbfd 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/LargeMessageControllerImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/LargeMessageControllerImpl.java
@@ -1016,7 +1016,7 @@ public class LargeMessageControllerImpl implements LargeMessageController {
       int len = readInt();
       byte[] data = new byte[len];
       readBytes(data);
-      return new SimpleString(data);
+      return SimpleString.of(data);
    }
 
    @Override
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/cluster/DiscoveryGroup.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/cluster/DiscoveryGroup.java
index b7bb3d133d..577694aecc 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/cluster/DiscoveryGroup.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/cluster/DiscoveryGroup.java
@@ -130,7 +130,7 @@ public final class DiscoveryGroup implements ActiveMQComponent {
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
 
-         props.putSimpleStringProperty(new SimpleString("name"), new SimpleString(name));
+         props.putSimpleStringProperty(SimpleString.of("name"), SimpleString.of(name));
 
          Notification notification = new Notification(nodeID, CoreNotificationType.DISCOVERY_GROUP_STARTED, props);
 
@@ -191,7 +191,7 @@ public final class DiscoveryGroup implements ActiveMQComponent {
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("name"), new SimpleString(name));
+         props.putSimpleStringProperty(SimpleString.of("name"), SimpleString.of(name));
          Notification notification = new Notification(nodeID, CoreNotificationType.DISCOVERY_GROUP_STOPPED, props);
          try {
             notificationService.sendNotification(notification);
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
index 7cb58e24f6..8575fc573b 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
@@ -313,7 +313,7 @@ public class CoreMessage extends RefCountMessage implements ICoreMessage {
 
    @Override
    public CoreMessage setGroupID(String groupId) {
-      return this.setGroupID(SimpleString.toSimpleString(groupId, coreMessageObjectPools == null ? null : coreMessageObjectPools.getGroupIdStringSimpleStringPool()));
+      return this.setGroupID(SimpleString.of(groupId, coreMessageObjectPools == null ? null : coreMessageObjectPools.getGroupIdStringSimpleStringPool()));
    }
 
    @Override
@@ -860,7 +860,7 @@ public class CoreMessage extends RefCountMessage implements ICoreMessage {
    @Override
    public CoreMessage setAddress(String address) {
       messageChanged();
-      this.address = SimpleString.toSimpleString(address, coreMessageObjectPools == null ? null : coreMessageObjectPools.getAddressStringSimpleStringPool());
+      this.address = SimpleString.of(address, coreMessageObjectPools == null ? null : coreMessageObjectPools.getAddressStringSimpleStringPool());
       return this;
    }
 
@@ -1308,11 +1308,11 @@ public class CoreMessage extends RefCountMessage implements ICoreMessage {
    }
 
    private SimpleString key(String key) {
-      return SimpleString.toSimpleString(key, getPropertyKeysPool());
+      return SimpleString.of(key, getPropertyKeysPool());
    }
 
    private SimpleString value(String value) {
-      return SimpleString.toSimpleString(value, getPropertyValuesPool());
+      return SimpleString.of(value, getPropertyValuesPool());
    }
 
    private SimpleString.StringSimpleStringPool getPropertyKeysPool() {
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java
index 9d5b6e8a0d..8b59358b62 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java
@@ -53,10 +53,10 @@ public class PacketImpl implements Packet {
    // 2.29.0
    public static final int ARTEMIS_2_29_0_VERSION = 135;
 
-   public static final SimpleString OLD_QUEUE_PREFIX = new SimpleString("jms.queue.");
-   public static final SimpleString OLD_TEMP_QUEUE_PREFIX = new SimpleString("jms.tempqueue.");
-   public static final SimpleString OLD_TOPIC_PREFIX = new SimpleString("jms.topic.");
-   public static final SimpleString OLD_TEMP_TOPIC_PREFIX = new SimpleString("jms.temptopic.");
+   public static final SimpleString OLD_QUEUE_PREFIX = SimpleString.of("jms.queue.");
+   public static final SimpleString OLD_TEMP_QUEUE_PREFIX = SimpleString.of("jms.tempqueue.");
+   public static final SimpleString OLD_TOPIC_PREFIX = SimpleString.of("jms.topic.");
+   public static final SimpleString OLD_TEMP_TOPIC_PREFIX = SimpleString.of("jms.temptopic.");
 
    // The minimal size for all the packets, Common data for all the packets (look at
    // PacketImpl.encode)
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/RemotingConnectionImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/RemotingConnectionImpl.java
index 45a009dc6c..1d47d56ffb 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/RemotingConnectionImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/RemotingConnectionImpl.java
@@ -288,7 +288,7 @@ public class RemotingConnectionImpl extends AbstractRemotingConnection implement
       Packet disconnect;
 
       if (channel0.supports(PacketImpl.DISCONNECT_V3)) {
-         disconnect = new DisconnectMessage_V3(nodeID, reason, SimpleString.toSimpleString(targetNodeID), targetConnector);
+         disconnect = new DisconnectMessage_V3(nodeID, reason, SimpleString.of(targetNodeID), targetConnector);
       } else if (channel0.supports(PacketImpl.DISCONNECT_V2)) {
          disconnect = new DisconnectMessage_V2(nodeID, reason.isScaleDown() ? targetNodeID : null);
       } else {
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/DisconnectMessage_V2.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/DisconnectMessage_V2.java
index 99461597fb..b920b77c92 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/DisconnectMessage_V2.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/DisconnectMessage_V2.java
@@ -28,7 +28,7 @@ public class DisconnectMessage_V2 extends DisconnectMessage {
 
       this.nodeID = nodeID;
 
-      this.scaleDownNodeID = SimpleString.toSimpleString(scaleDownNodeID);
+      this.scaleDownNodeID = SimpleString.of(scaleDownNodeID);
    }
 
    public DisconnectMessage_V2() {
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java
index 780085f4fd..eb4fcf74d0 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java
@@ -36,19 +36,19 @@ public class MessageUtil {
 
    public static final String CORRELATIONID_HEADER_NAME_STRING = "JMSCorrelationID";
 
-   public static final SimpleString CORRELATIONID_HEADER_NAME = new SimpleString(CORRELATIONID_HEADER_NAME_STRING);
+   public static final SimpleString CORRELATIONID_HEADER_NAME = SimpleString.of(CORRELATIONID_HEADER_NAME_STRING);
 
-   public static final SimpleString REPLYTO_HEADER_NAME = new SimpleString("JMSReplyTo");
+   public static final SimpleString REPLYTO_HEADER_NAME = SimpleString.of("JMSReplyTo");
 
    public static final String TYPE_HEADER_NAME_STRING = "JMSType";
 
-   public static final SimpleString TYPE_HEADER_NAME = new SimpleString(TYPE_HEADER_NAME_STRING);
+   public static final SimpleString TYPE_HEADER_NAME = SimpleString.of(TYPE_HEADER_NAME_STRING);
 
-   public static final SimpleString JMS = new SimpleString("JMS");
+   public static final SimpleString JMS = SimpleString.of("JMS");
 
-   public static final SimpleString JMSX = new SimpleString("JMSX");
+   public static final SimpleString JMSX = SimpleString.of("JMSX");
 
-   public static final SimpleString JMS_ = new SimpleString("JMS_");
+   public static final SimpleString JMS_ = SimpleString.of("JMS_");
 
    public static final String JMSXDELIVERYCOUNT = "JMSXDeliveryCount";
 
@@ -60,7 +60,7 @@ public class MessageUtil {
 
    public static final String CONNECTION_ID_PROPERTY_NAME_STRING = "__AMQ_CID";
 
-   public static final SimpleString CONNECTION_ID_PROPERTY_NAME = new SimpleString(CONNECTION_ID_PROPERTY_NAME_STRING);
+   public static final SimpleString CONNECTION_ID_PROPERTY_NAME = SimpleString.of(CONNECTION_ID_PROPERTY_NAME_STRING);
 
    //   public static ActiveMQBuffer getBodyBuffer(Message message) {
    //      return message.getBodyBuffer();
@@ -77,7 +77,7 @@ public class MessageUtil {
    }
 
    public static void setJMSType(Message message, String type) {
-      message.putStringProperty(TYPE_HEADER_NAME, new SimpleString(type));
+      message.putStringProperty(TYPE_HEADER_NAME, SimpleString.of(type));
    }
 
    public static String getJMSType(Message message) {
@@ -102,7 +102,7 @@ public class MessageUtil {
       if (correlationID == null) {
          message.removeProperty(CORRELATIONID_HEADER_NAME);
       } else {
-         message.putStringProperty(CORRELATIONID_HEADER_NAME, new SimpleString(correlationID));
+         message.putStringProperty(CORRELATIONID_HEADER_NAME, SimpleString.of(correlationID));
       }
    }
 
@@ -178,7 +178,7 @@ public class MessageUtil {
    }
 
    public static boolean propertyExists(Message message, String name) {
-      return message.containsProperty(new SimpleString(name)) || name.equals(MessageUtil.JMSXDELIVERYCOUNT) ||
+      return message.containsProperty(SimpleString.of(name)) || name.equals(MessageUtil.JMSXDELIVERYCOUNT) ||
          (MessageUtil.JMSXGROUPID.equals(name) && message.containsProperty(Message.HDR_GROUP_ID)) ||
          (MessageUtil.JMSXGROUPSEQ.equals(name) && message.containsProperty(Message.HDR_GROUP_SEQUENCE)) ||
          (MessageUtil.JMSXUSERID.equals(name) && message.containsProperty(Message.HDR_VALIDATED_USER));
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/BufferHelper.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/BufferHelper.java
index ca92d60d58..9cd689532b 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/BufferHelper.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/BufferHelper.java
@@ -45,7 +45,7 @@ public class BufferHelper {
    }
 
    public static void writeAsNullableSimpleString(ActiveMQBuffer buffer, String str) {
-      buffer.writeNullableSimpleString(SimpleString.toSimpleString(str));
+      buffer.writeNullableSimpleString(SimpleString.of(str));
    }
 
    public static String readNullableSimpleStringAsString(ActiveMQBuffer buffer) {
@@ -54,7 +54,7 @@ public class BufferHelper {
    }
 
    public static void writeAsSimpleString(ActiveMQBuffer buffer, String str) {
-      buffer.writeSimpleString(new SimpleString(str));
+      buffer.writeSimpleString(SimpleString.of(str));
    }
 
    /**
diff --git a/artemis-core-client/src/test/java/org/apache/activemq/artemis/api/core/management/ResourceNamesTest.java b/artemis-core-client/src/test/java/org/apache/activemq/artemis/api/core/management/ResourceNamesTest.java
index 285fc42d85..06893b9295 100644
--- a/artemis-core-client/src/test/java/org/apache/activemq/artemis/api/core/management/ResourceNamesTest.java
+++ b/artemis-core-client/src/test/java/org/apache/activemq/artemis/api/core/management/ResourceNamesTest.java
@@ -54,7 +54,7 @@ public class ResourceNamesTest {
       super();
       this.delimiterChar = delimiterChar;
       delimiter = "" + delimiterChar;
-      testAddress = SimpleString.toSimpleString(UUID.randomUUID().toString());
+      testAddress = SimpleString.of(UUID.randomUUID().toString());
       prefix = ActiveMQDefaultConfiguration.getInternalNamingPrefix().replace('.', delimiterChar);
       baseName = prefix + testAddress + delimiter;
       testResourceAddressName = baseName + ResourceNames.ADDRESS.replace('.', delimiterChar) + ResourceNames.RETROACTIVE_SUFFIX;
@@ -86,8 +86,8 @@ public class ResourceNamesTest {
 
    @TestTemplate
    public void testIsRetroactiveResource() {
-      assertTrue(ResourceNames.isRetroactiveResource(prefix, SimpleString.toSimpleString(testResourceAddressName)));
-      assertTrue(ResourceNames.isRetroactiveResource(prefix, SimpleString.toSimpleString(testResourceMulticastQueueName)));
-      assertTrue(ResourceNames.isRetroactiveResource(prefix, SimpleString.toSimpleString(testResourceDivertName)));
+      assertTrue(ResourceNames.isRetroactiveResource(prefix, SimpleString.of(testResourceAddressName)));
+      assertTrue(ResourceNames.isRetroactiveResource(prefix, SimpleString.of(testResourceMulticastQueueName)));
+      assertTrue(ResourceNames.isRetroactiveResource(prefix, SimpleString.of(testResourceDivertName)));
    }
 }
diff --git a/artemis-core-client/src/test/java/org/apache/activemq/artemis/message/CoreMTMessageTest.java b/artemis-core-client/src/test/java/org/apache/activemq/artemis/message/CoreMTMessageTest.java
index 581e274e33..00fc02904b 100644
--- a/artemis-core-client/src/test/java/org/apache/activemq/artemis/message/CoreMTMessageTest.java
+++ b/artemis-core-client/src/test/java/org/apache/activemq/artemis/message/CoreMTMessageTest.java
@@ -38,8 +38,8 @@ import org.junit.jupiter.api.Test;
 
 public class CoreMTMessageTest {
 
-   public static final SimpleString ADDRESS = new SimpleString("this.local.address");
-   public static final SimpleString ADDRESS2 = new SimpleString("some.other.address");
+   public static final SimpleString ADDRESS = SimpleString.of("this.local.address");
+   public static final SimpleString ADDRESS2 = SimpleString.of("some.other.address");
    public static final byte MESSAGE_TYPE = Message.TEXT_TYPE;
    public static final boolean DURABLE = true;
    public static final long EXPIRATION = 123L;
@@ -62,11 +62,11 @@ public class CoreMTMessageTest {
       UUID userID = UUIDGenerator.getInstance().generateUUID();
       String body = UUIDGenerator.getInstance().generateStringUUID();
       ClientMessageImpl message = new ClientMessageImpl(MESSAGE_TYPE, DURABLE, EXPIRATION, TIMESTAMP, PRIORITY, 10 * 1024, objectPools);
-      TextMessageUtil.writeBodyText(message.getBodyBuffer(), SimpleString.toSimpleString(body));
+      TextMessageUtil.writeBodyText(message.getBodyBuffer(), SimpleString.of(body));
 
       message.setAddress(ADDRESS);
       message.setUserID(userID);
-      message.getProperties().putSimpleStringProperty(SimpleString.toSimpleString("str-prop"), propValue);
+      message.getProperties().putSimpleStringProperty(SimpleString.of("str-prop"), propValue);
 
       ActiveMQBuffer buffer = ActiveMQBuffers.dynamicBuffer(10 * 1024);
       message.sendBuffer(buffer.byteBuf(), 0);
@@ -96,7 +96,7 @@ public class CoreMTMessageTest {
                recMessage.receiveBuffer(buffer.byteBuf());
                assertEquals(ADDRESS2, recMessage.getAddressSimpleString());
                assertEquals(33, recMessage.getMessageID());
-               assertEquals(propValue, recMessage.getSimpleStringProperty(SimpleString.toSimpleString("str-prop")));
+               assertEquals(propValue, recMessage.getSimpleStringProperty(SimpleString.of("str-prop")));
             } catch (Throwable e) {
                e.printStackTrace();
                errors.incrementAndGet();
diff --git a/artemis-core-client/src/test/java/org/apache/activemq/artemis/message/CoreMessageTest.java b/artemis-core-client/src/test/java/org/apache/activemq/artemis/message/CoreMessageTest.java
index 8f46a95e65..55dbc77ee2 100644
--- a/artemis-core-client/src/test/java/org/apache/activemq/artemis/message/CoreMessageTest.java
+++ b/artemis-core-client/src/test/java/org/apache/activemq/artemis/message/CoreMessageTest.java
@@ -44,7 +44,7 @@ import org.junit.jupiter.api.Test;
 
 public class CoreMessageTest {
 
-   public static final SimpleString ADDRESS = new SimpleString("this.local.address");
+   public static final SimpleString ADDRESS = SimpleString.of("this.local.address");
    public static final byte MESSAGE_TYPE = Message.TEXT_TYPE;
    public static final boolean DURABLE = true;
    public static final long EXPIRATION = 123L;
@@ -57,8 +57,8 @@ public class CoreMessageTest {
       0, 0, 0, 0,
       0, 0, 0, 0,
       0, 0, 0, 1});
-   public static final SimpleString PROP1_NAME = new SimpleString("t1");
-   public static final SimpleString PROP1_VALUE = new SimpleString("value-t1");
+   public static final SimpleString PROP1_NAME = SimpleString.of("t1");
+   public static final SimpleString PROP1_VALUE = SimpleString.of("value-t1");
 
    /**
     * This encode was generated by {@link #generate()}.
@@ -276,7 +276,7 @@ public class CoreMessageTest {
       legacyBuffer.resetWriterIndex();
       legacyBuffer.clear();
 
-      TextMessageUtil.writeBodyText(legacyBuffer, SimpleString.toSimpleString(newString));
+      TextMessageUtil.writeBodyText(legacyBuffer, SimpleString.of(newString));
 
       ByteBuf newbuffer = Unpooled.buffer(150000);
 
@@ -400,7 +400,7 @@ public class CoreMessageTest {
    public String generate(String body) throws Exception {
 
       ClientMessageImpl message = new ClientMessageImpl(MESSAGE_TYPE, DURABLE, EXPIRATION, TIMESTAMP, PRIORITY, 10 * 1024, null);
-      TextMessageUtil.writeBodyText(message.getBodyBuffer(), SimpleString.toSimpleString(body));
+      TextMessageUtil.writeBodyText(message.getBodyBuffer(), SimpleString.of(body));
 
       message.setAddress(ADDRESS);
       message.setUserID(uuid);
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQDestination.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQDestination.java
index ec9a2b8e39..9f3e70c96e 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQDestination.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQDestination.java
@@ -213,11 +213,11 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
    }
 
    public static SimpleString createQueueAddressFromName(final String name) {
-      return new SimpleString(QUEUE_QUALIFIED_PREFIX + name);
+      return SimpleString.of(QUEUE_QUALIFIED_PREFIX + name);
    }
 
    public static SimpleString createTopicAddressFromName(final String name) {
-      return new SimpleString(TOPIC_QUALIFIED_PREFIX + name);
+      return SimpleString.of(TOPIC_QUALIFIED_PREFIX + name);
    }
 
    public static ActiveMQQueue createQueue(final String address) {
@@ -320,7 +320,7 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
    protected ActiveMQDestination(final String address,
                                  final TYPE type,
                                  final ActiveMQSession session) {
-      this(SimpleString.toSimpleString(address), type, session);
+      this(SimpleString.of(address), type, session);
    }
 
    protected ActiveMQDestination(final SimpleString address,
@@ -344,7 +344,7 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
                                  final String name,
                                  final TYPE type,
                                  final ActiveMQSession session) {
-      this(SimpleString.toSimpleString(address), name, type, session);
+      this(SimpleString.of(address), name, type, session);
    }
 
    @Deprecated
@@ -360,7 +360,7 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
    }
 
    public void setAddress(String address) {
-      setSimpleAddress(SimpleString.toSimpleString(address));
+      setSimpleAddress(SimpleString.of(address));
    }
 
    @Override
@@ -390,7 +390,7 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
    }
 
    public void setSimpleAddress(String address) {
-      setSimpleAddress(new SimpleString(address));
+      setSimpleAddress(SimpleString.of(address));
    }
 
    public void delete() throws JMSException {
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQJMSProducer.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQJMSProducer.java
index e97a3c2102..b7345c0479 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQJMSProducer.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQJMSProducer.java
@@ -332,57 +332,57 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public JMSProducer setProperty(String name, boolean value) {
       checkName(name);
-      properties.putBooleanProperty(new SimpleString(name), value);
+      properties.putBooleanProperty(SimpleString.of(name), value);
       return this;
    }
 
    @Override
    public JMSProducer setProperty(String name, byte value) {
       checkName(name);
-      properties.putByteProperty(new SimpleString(name), value);
+      properties.putByteProperty(SimpleString.of(name), value);
       return this;
    }
 
    @Override
    public JMSProducer setProperty(String name, short value) {
       checkName(name);
-      properties.putShortProperty(new SimpleString(name), value);
+      properties.putShortProperty(SimpleString.of(name), value);
       return this;
    }
 
    @Override
    public JMSProducer setProperty(String name, int value) {
       checkName(name);
-      properties.putIntProperty(new SimpleString(name), value);
+      properties.putIntProperty(SimpleString.of(name), value);
       return this;
    }
 
    @Override
    public JMSProducer setProperty(String name, long value) {
       checkName(name);
-      properties.putLongProperty(new SimpleString(name), value);
+      properties.putLongProperty(SimpleString.of(name), value);
       return this;
    }
 
    @Override
    public JMSProducer setProperty(String name, float value) {
       checkName(name);
-      properties.putFloatProperty(new SimpleString(name), value);
+      properties.putFloatProperty(SimpleString.of(name), value);
       return this;
    }
 
    @Override
    public JMSProducer setProperty(String name, double value) {
       checkName(name);
-      properties.putDoubleProperty(new SimpleString(name), value);
+      properties.putDoubleProperty(SimpleString.of(name), value);
       return this;
    }
 
    @Override
    public JMSProducer setProperty(String name, String value) {
       checkName(name);
-      SimpleString key = new SimpleString(name);
-      properties.putSimpleStringProperty(key, new SimpleString(value));
+      SimpleString key = SimpleString.of(name);
+      properties.putSimpleStringProperty(key, SimpleString.of(value));
       stringPropertyNames.add(key);
       return this;
    }
@@ -391,7 +391,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    public JMSProducer setProperty(String name, Object value) {
       checkName(name);
       try {
-         TypedProperties.setObjectProperty(new SimpleString(name), value, properties);
+         TypedProperties.setObjectProperty(SimpleString.of(name), value, properties);
       } catch (ActiveMQPropertyConversionException amqe) {
          throw new MessageFormatRuntimeException(amqe.getMessage());
       } catch (RuntimeException e) {
@@ -413,13 +413,13 @@ public final class ActiveMQJMSProducer implements JMSProducer {
 
    @Override
    public boolean propertyExists(String name) {
-      return properties.containsProperty(new SimpleString(name));
+      return properties.containsProperty(SimpleString.of(name));
    }
 
    @Override
    public boolean getBooleanProperty(String name) {
       try {
-         return properties.getBooleanProperty(new SimpleString(name));
+         return properties.getBooleanProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException ce) {
          throw new MessageFormatRuntimeException(ce.getMessage());
       } catch (RuntimeException e) {
@@ -430,7 +430,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public byte getByteProperty(String name) {
       try {
-         return properties.getByteProperty(new SimpleString(name));
+         return properties.getByteProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException ce) {
          throw new MessageFormatRuntimeException(ce.getMessage());
       }
@@ -439,7 +439,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public short getShortProperty(String name) {
       try {
-         return properties.getShortProperty(new SimpleString(name));
+         return properties.getShortProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException ce) {
          throw new MessageFormatRuntimeException(ce.getMessage());
       }
@@ -448,7 +448,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public int getIntProperty(String name) {
       try {
-         return properties.getIntProperty(new SimpleString(name));
+         return properties.getIntProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException ce) {
          throw new MessageFormatRuntimeException(ce.getMessage());
       }
@@ -457,7 +457,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public long getLongProperty(String name) {
       try {
-         return properties.getLongProperty(new SimpleString(name));
+         return properties.getLongProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException ce) {
          throw new MessageFormatRuntimeException(ce.getMessage());
       }
@@ -466,7 +466,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public float getFloatProperty(String name) {
       try {
-         return properties.getFloatProperty(new SimpleString(name));
+         return properties.getFloatProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException ce) {
          throw new MessageFormatRuntimeException(ce.getMessage());
       }
@@ -475,7 +475,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public double getDoubleProperty(String name) {
       try {
-         return properties.getDoubleProperty(new SimpleString(name));
+         return properties.getDoubleProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException ce) {
          throw new MessageFormatRuntimeException(ce.getMessage());
       }
@@ -484,7 +484,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public String getStringProperty(String name) {
       try {
-         SimpleString prop = properties.getSimpleStringProperty(new SimpleString(name));
+         SimpleString prop = properties.getSimpleStringProperty(SimpleString.of(name));
          if (prop == null)
             return null;
          return prop.toString();
@@ -498,7 +498,7 @@ public final class ActiveMQJMSProducer implements JMSProducer {
    @Override
    public Object getObjectProperty(String name) {
       try {
-         SimpleString key = new SimpleString(name);
+         SimpleString key = SimpleString.of(name);
          Object property = properties.getProperty(key);
          if (stringPropertyNames.contains(key)) {
             property = property.toString();
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMapMessage.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMapMessage.java
index bf1e0593cc..11ecd7efba 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMapMessage.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMapMessage.java
@@ -95,70 +95,70 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public void setBoolean(final String name, final boolean value) throws JMSException {
       checkName(name);
-      map.putBooleanProperty(new SimpleString(name), value);
+      map.putBooleanProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
    @Override
    public void setByte(final String name, final byte value) throws JMSException {
       checkName(name);
-      map.putByteProperty(new SimpleString(name), value);
+      map.putByteProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
    @Override
    public void setShort(final String name, final short value) throws JMSException {
       checkName(name);
-      map.putShortProperty(new SimpleString(name), value);
+      map.putShortProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
    @Override
    public void setChar(final String name, final char value) throws JMSException {
       checkName(name);
-      map.putCharProperty(new SimpleString(name), value);
+      map.putCharProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
    @Override
    public void setInt(final String name, final int value) throws JMSException {
       checkName(name);
-      map.putIntProperty(new SimpleString(name), value);
+      map.putIntProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
    @Override
    public void setLong(final String name, final long value) throws JMSException {
       checkName(name);
-      map.putLongProperty(new SimpleString(name), value);
+      map.putLongProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
    @Override
    public void setFloat(final String name, final float value) throws JMSException {
       checkName(name);
-      map.putFloatProperty(new SimpleString(name), value);
+      map.putFloatProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
    @Override
    public void setDouble(final String name, final double value) throws JMSException {
       checkName(name);
-      map.putDoubleProperty(new SimpleString(name), value);
+      map.putDoubleProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
    @Override
    public void setString(final String name, final String value) throws JMSException {
       checkName(name);
-      map.putSimpleStringProperty(new SimpleString(name), value == null ? null : new SimpleString(value));
+      map.putSimpleStringProperty(SimpleString.of(name), value == null ? null : SimpleString.of(value));
       invalid = true;
    }
 
    @Override
    public void setBytes(final String name, final byte[] value) throws JMSException {
       checkName(name);
-      map.putBytesProperty(new SimpleString(name), value);
+      map.putBytesProperty(SimpleString.of(name), value);
       invalid = true;
    }
 
@@ -170,7 +170,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
       }
       byte[] newBytes = new byte[length];
       System.arraycopy(value, offset, newBytes, 0, length);
-      map.putBytesProperty(new SimpleString(name), newBytes);
+      map.putBytesProperty(SimpleString.of(name), newBytes);
       invalid = true;
    }
 
@@ -178,7 +178,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    public void setObject(final String name, final Object value) throws JMSException {
       checkName(name);
       try {
-         TypedProperties.setObjectProperty(new SimpleString(name), value, map);
+         TypedProperties.setObjectProperty(SimpleString.of(name), value, map);
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -188,7 +188,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public boolean getBoolean(final String name) throws JMSException {
       try {
-         return map.getBooleanProperty(new SimpleString(name));
+         return map.getBooleanProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -197,7 +197,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public byte getByte(final String name) throws JMSException {
       try {
-         return map.getByteProperty(new SimpleString(name));
+         return map.getByteProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -206,7 +206,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public short getShort(final String name) throws JMSException {
       try {
-         return map.getShortProperty(new SimpleString(name));
+         return map.getShortProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -215,7 +215,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public char getChar(final String name) throws JMSException {
       try {
-         return map.getCharProperty(new SimpleString(name));
+         return map.getCharProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -224,7 +224,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public int getInt(final String name) throws JMSException {
       try {
-         return map.getIntProperty(new SimpleString(name));
+         return map.getIntProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -233,7 +233,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public long getLong(final String name) throws JMSException {
       try {
-         return map.getLongProperty(new SimpleString(name));
+         return map.getLongProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -242,7 +242,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public float getFloat(final String name) throws JMSException {
       try {
-         return map.getFloatProperty(new SimpleString(name));
+         return map.getFloatProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -251,7 +251,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public double getDouble(final String name) throws JMSException {
       try {
-         return map.getDoubleProperty(new SimpleString(name));
+         return map.getDoubleProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -260,7 +260,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public String getString(final String name) throws JMSException {
       try {
-         SimpleString str = map.getSimpleStringProperty(new SimpleString(name));
+         SimpleString str = map.getSimpleStringProperty(SimpleString.of(name));
          if (str == null) {
             return null;
          } else {
@@ -274,7 +274,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
    @Override
    public byte[] getBytes(final String name) throws JMSException {
       try {
-         return map.getBytesProperty(new SimpleString(name));
+         return map.getBytesProperty(SimpleString.of(name));
       } catch (ActiveMQPropertyConversionException e) {
          throw new MessageFormatException(e.getMessage());
       }
@@ -282,7 +282,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
 
    @Override
    public Object getObject(final String name) throws JMSException {
-      Object val = map.getProperty(new SimpleString(name));
+      Object val = map.getProperty(SimpleString.of(name));
 
       if (val instanceof SimpleString) {
          val = ((SimpleString) val).toString();
@@ -298,7 +298,7 @@ public class ActiveMQMapMessage extends ActiveMQMessage implements MapMessage {
 
    @Override
    public boolean itemExists(final String name) throws JMSException {
-      return map.containsProperty(new SimpleString(name));
+      return map.containsProperty(SimpleString.of(name));
    }
 
    @Override
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java
index 9ca991844d..1fcc53bb5d 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java
@@ -66,10 +66,10 @@ public class ActiveMQMessage implements javax.jms.Message {
 
    public static final byte TYPE = org.apache.activemq.artemis.api.core.Message.DEFAULT_TYPE;
 
-   public static final SimpleString OLD_QUEUE_QUALIFIED_PREFIX = SimpleString.toSimpleString(ActiveMQDestination.QUEUE_QUALIFIED_PREFIX + PacketImpl.OLD_QUEUE_PREFIX);
-   public static final SimpleString OLD_TEMP_QUEUE_QUALIFED_PREFIX = SimpleString.toSimpleString(ActiveMQDestination.TEMP_QUEUE_QUALIFED_PREFIX + PacketImpl.OLD_TEMP_QUEUE_PREFIX);
-   public static final SimpleString OLD_TOPIC_QUALIFIED_PREFIX = SimpleString.toSimpleString(ActiveMQDestination.TOPIC_QUALIFIED_PREFIX + PacketImpl.OLD_TOPIC_PREFIX);
-   public static final SimpleString OLD_TEMP_TOPIC_QUALIFED_PREFIX = SimpleString.toSimpleString(ActiveMQDestination.TEMP_TOPIC_QUALIFED_PREFIX + PacketImpl.OLD_TEMP_TOPIC_PREFIX);
+   public static final SimpleString OLD_QUEUE_QUALIFIED_PREFIX = SimpleString.of(ActiveMQDestination.QUEUE_QUALIFIED_PREFIX + PacketImpl.OLD_QUEUE_PREFIX);
+   public static final SimpleString OLD_TEMP_QUEUE_QUALIFED_PREFIX = SimpleString.of(ActiveMQDestination.TEMP_QUEUE_QUALIFED_PREFIX + PacketImpl.OLD_TEMP_QUEUE_PREFIX);
+   public static final SimpleString OLD_TOPIC_QUALIFIED_PREFIX = SimpleString.of(ActiveMQDestination.TOPIC_QUALIFIED_PREFIX + PacketImpl.OLD_TOPIC_PREFIX);
+   public static final SimpleString OLD_TEMP_TOPIC_QUALIFED_PREFIX = SimpleString.of(ActiveMQDestination.TEMP_TOPIC_QUALIFED_PREFIX + PacketImpl.OLD_TEMP_TOPIC_PREFIX);
 
    public static Map<String, Object> coreMaptoJMSMap(final Map<String, Object> coreMessage) {
       Map<String, Object> jmsMessage = new HashMap<>();
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java
index a9e761b1df..ffc419bc82 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java
@@ -83,7 +83,7 @@ public class ActiveMQMessageProducer implements MessageProducer, QueueSender, To
       this.options = options;
       this.connection = connection;
 
-      connID = connection.getClientID() != null ? new SimpleString(connection.getClientID()) : connection.getUID();
+      connID = connection.getClientID() != null ? SimpleString.of(connection.getClientID()) : connection.getUID();
 
       this.clientProducer = producer;
 
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQQueueBrowser.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQQueueBrowser.java
index 76e13065a7..0466ad29f8 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQQueueBrowser.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQQueueBrowser.java
@@ -59,7 +59,7 @@ public final class ActiveMQQueueBrowser implements QueueBrowser {
       this.session = session;
       this.queue = queue;
       if (messageSelector != null) {
-         filterString = new SimpleString(SelectorTranslator.convertToActiveMQFilterString(messageSelector));
+         filterString = SimpleString.of(SelectorTranslator.convertToActiveMQFilterString(messageSelector));
       }
       this.enable1xPrefixes = enable1xPrefixes;
    }
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java
index 32228300ef..9970d84f2b 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java
@@ -92,7 +92,7 @@ public class ActiveMQSession implements QueueSession, TopicSession {
 
    public static final int TYPE_TOPIC_SESSION = 2;
 
-   private static SimpleString REJECTING_FILTER = new SimpleString("_AMQX=-1");
+   private static SimpleString REJECTING_FILTER = SimpleString.of("_AMQX=-1");
 
    private final ConnectionFactoryOptions options;
 
@@ -736,7 +736,7 @@ public class ActiveMQSession implements QueueSession, TopicSession {
          SimpleString coreFilterString = null;
 
          if (selectorString != null) {
-            coreFilterString = new SimpleString(SelectorTranslator.convertToActiveMQFilterString(selectorString));
+            coreFilterString = SimpleString.of(SelectorTranslator.convertToActiveMQFilterString(selectorString));
          }
 
          ClientConsumer consumer;
@@ -810,7 +810,7 @@ public class ActiveMQSession implements QueueSession, TopicSession {
          SimpleString coreFilterString = null;
 
          if (selectorString != null) {
-            coreFilterString = new SimpleString(SelectorTranslator.convertToActiveMQFilterString(selectorString));
+            coreFilterString = SimpleString.of(SelectorTranslator.convertToActiveMQFilterString(selectorString));
          }
 
          ClientConsumer consumer;
@@ -854,7 +854,7 @@ public class ActiveMQSession implements QueueSession, TopicSession {
                if (CompositeAddress.isFullyQualified(dest.getAddress())) {
                   queueName = createFQQNSubscription(dest, coreFilterString, response);
                } else {
-                  queueName = new SimpleString(UUID.randomUUID().toString());
+                  queueName = SimpleString.of(UUID.randomUUID().toString());
                   createTemporaryQueue(dest, RoutingType.MULTICAST, queueName, coreFilterString, response);
                }
 
@@ -996,7 +996,7 @@ public class ActiveMQSession implements QueueSession, TopicSession {
             SelectorParser.parse(filterString.trim());
          }
       } catch (FilterException e) {
-         throw JMSExceptionHelper.convertFromActiveMQException(ActiveMQJMSClientBundle.BUNDLE.invalidFilter(new SimpleString(filterString), e));
+         throw JMSExceptionHelper.convertFromActiveMQException(ActiveMQJMSClientBundle.BUNDLE.invalidFilter(SimpleString.of(filterString), e));
       }
 
       ActiveMQDestination activeMQDestination = (ActiveMQDestination) queue;
@@ -1006,7 +1006,7 @@ public class ActiveMQSession implements QueueSession, TopicSession {
       }
 
       try {
-         AddressQuery response = session.addressQuery(new SimpleString(activeMQDestination.getAddress()));
+         AddressQuery response = session.addressQuery(SimpleString.of(activeMQDestination.getAddress()));
          if (!response.isExists()) {
             if (response.isAutoCreateQueues()) {
                createQueue(activeMQDestination, RoutingType.ANYCAST, activeMQDestination.getSimpleAddress(), null, true, true, response);
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQTextMessage.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQTextMessage.java
index ebb10ed078..2e213f6054 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQTextMessage.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQTextMessage.java
@@ -73,7 +73,7 @@ public class ActiveMQTextMessage extends ActiveMQMessage implements TextMessage
       checkWrite();
 
       if (text != null) {
-         this.text = new SimpleString(text);
+         this.text = SimpleString.of(text);
       } else {
          this.text = null;
       }
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/persistence/config/PersistedDestination.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/persistence/config/PersistedDestination.java
index e898b8646e..18d1b92772 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/persistence/config/PersistedDestination.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/persistence/config/PersistedDestination.java
@@ -87,8 +87,8 @@ public class PersistedDestination implements EncodingSupport {
    @Override
    public void encode(final ActiveMQBuffer buffer) {
       buffer.writeByte(type.getType());
-      buffer.writeSimpleString(SimpleString.toSimpleString(name));
-      buffer.writeNullableSimpleString(SimpleString.toSimpleString(selector));
+      buffer.writeSimpleString(SimpleString.of(name));
+      buffer.writeNullableSimpleString(SimpleString.of(selector));
       buffer.writeBoolean(durable);
    }
 
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
index c5d265138f..e5507a1839 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
@@ -779,11 +779,11 @@ public class JMSServerManagerImpl extends CleaningActivateCallback implements JM
    public synchronized boolean destroyQueue(final String name, final boolean removeConsumers) throws Exception {
       checkInitialised();
 
-      server.destroyQueue(SimpleString.toSimpleString(name), null, !removeConsumers, removeConsumers);
+      server.destroyQueue(SimpleString.of(name), null, !removeConsumers, removeConsumers);
 
       // if the queue has consumers and 'removeConsumers' is false then the queue won't actually be removed
       // therefore only remove the queue from Bindings, etc. if the queue is actually removed
-      if (this.server.getPostOffice().getBinding(SimpleString.toSimpleString(name)) == null) {
+      if (this.server.getPostOffice().getBinding(SimpleString.of(name)) == null) {
          removeFromBindings(queues, queueBindings, name);
 
          queues.remove(name);
@@ -809,7 +809,7 @@ public class JMSServerManagerImpl extends CleaningActivateCallback implements JM
       AddressControl addressControl = (AddressControl) server.getManagementService().getResource(ResourceNames.ADDRESS + name);
       if (addressControl != null) {
          for (String queueName : addressControl.getAllQueueNames()) {
-            Binding binding = server.getPostOffice().getBinding(new SimpleString(queueName));
+            Binding binding = server.getPostOffice().getBinding(SimpleString.of(queueName));
             if (binding == null) {
                ActiveMQJMSServerLogger.LOGGER.noQueueOnTopic(queueName, name);
                continue;
@@ -817,13 +817,13 @@ public class JMSServerManagerImpl extends CleaningActivateCallback implements JM
 
             // We can't remove the remote binding. As this would be the bridge associated with the topic on this case
             if (binding.getType() != BindingType.REMOTE_QUEUE) {
-               server.destroyQueue(SimpleString.toSimpleString(queueName), null, !removeConsumers, removeConsumers, false);
+               server.destroyQueue(SimpleString.of(queueName), null, !removeConsumers, removeConsumers, false);
             }
          }
 
          if (addressControl.getAllQueueNames().length == 0) {
             try {
-               server.removeAddressInfo(SimpleString.toSimpleString(name), null);
+               server.removeAddressInfo(SimpleString.of(name), null);
             } catch (ActiveMQAddressDoesNotExistException e) {
                // ignore
             }
@@ -1030,7 +1030,7 @@ public class JMSServerManagerImpl extends CleaningActivateCallback implements JM
 
    private void sendNotification(JMSNotificationType type, String message) {
       TypedProperties prop = new TypedProperties();
-      prop.putSimpleStringProperty(JMSNotificationType.MESSAGE, SimpleString.toSimpleString(message));
+      prop.putSimpleStringProperty(JMSNotificationType.MESSAGE, SimpleString.of(message));
       Notification notif = new Notification(null, type, prop);
       try {
          server.getManagementService().sendNotification(notif);
@@ -1080,7 +1080,7 @@ public class JMSServerManagerImpl extends CleaningActivateCallback implements JM
             coreFilterString = SelectorTranslator.convertToActiveMQFilterString(selectorString);
          }
 
-         server.addOrUpdateAddressInfo(new AddressInfo(SimpleString.toSimpleString(queueName)).addRoutingType(RoutingType.ANYCAST));
+         server.addOrUpdateAddressInfo(new AddressInfo(SimpleString.of(queueName)).addRoutingType(RoutingType.ANYCAST));
 
          server.createQueue(new QueueConfiguration(queueName).setRoutingType(RoutingType.ANYCAST).setFilterString(coreFilterString).setDurable(durable), true);
 
@@ -1114,7 +1114,7 @@ public class JMSServerManagerImpl extends CleaningActivateCallback implements JM
       } else {
          // Create the JMS topic with topicName as the logical name of the topic *and* address as its address
          ActiveMQTopic activeMQTopic = ActiveMQDestination.createTopic(address, topicName);
-         server.addOrUpdateAddressInfo(new AddressInfo(SimpleString.toSimpleString(activeMQTopic.getAddress()), RoutingType.MULTICAST));
+         server.addOrUpdateAddressInfo(new AddressInfo(SimpleString.of(activeMQTopic.getAddress()), RoutingType.MULTICAST));
 
          topics.put(address, activeMQTopic);
 
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/management/JMSNotificationType.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/management/JMSNotificationType.java
index 5f71effbd9..a287d4c54c 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/management/JMSNotificationType.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/management/JMSNotificationType.java
@@ -27,7 +27,7 @@ public enum JMSNotificationType implements NotificationType {
    CONNECTION_FACTORY_CREATED(4),
    CONNECTION_FACTORY_DESTROYED(5);
 
-   public static final SimpleString MESSAGE = new SimpleString("message");
+   public static final SimpleString MESSAGE = SimpleString.of("message");
 
    private int type;
 
diff --git a/artemis-junit/artemis-junit-4/src/main/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResource.java b/artemis-junit/artemis-junit-4/src/main/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResource.java
index 5a02681648..b6f310895c 100644
--- a/artemis-junit/artemis-junit-4/src/main/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResource.java
+++ b/artemis-junit/artemis-junit-4/src/main/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResource.java
@@ -54,7 +54,7 @@ public class ActiveMQConsumerResource extends ExternalResource implements Active
 
    public ActiveMQConsumerResource(String url, String queueName, String username, String password) {
       this.activeMQConsumer =
-               new ActiveMQConsumerDelegate(url, SimpleString.toSimpleString(queueName), username, password);
+               new ActiveMQConsumerDelegate(url, SimpleString.of(queueName), username, password);
    }
 
    public ActiveMQConsumerResource(String url, SimpleString queueName, String username, String password) {
@@ -66,11 +66,11 @@ public class ActiveMQConsumerResource extends ExternalResource implements Active
    }
 
    public ActiveMQConsumerResource(ServerLocator serverLocator, String queueName, String username, String password) {
-      this(serverLocator, SimpleString.toSimpleString(queueName), username, password);
+      this(serverLocator, SimpleString.of(queueName), username, password);
    }
 
    public ActiveMQConsumerResource(ServerLocator serverLocator, String queueName) {
-      this(serverLocator, SimpleString.toSimpleString(queueName), null, null);
+      this(serverLocator, SimpleString.of(queueName), null, null);
    }
 
    public ActiveMQConsumerResource(ServerLocator serverLocator, SimpleString queueName, String username,
diff --git a/artemis-junit/artemis-junit-4/src/main/java/org/apache/activemq/artemis/junit/ActiveMQProducerResource.java b/artemis-junit/artemis-junit-4/src/main/java/org/apache/activemq/artemis/junit/ActiveMQProducerResource.java
index 5959c82dc0..a2665f4d5a 100644
--- a/artemis-junit/artemis-junit-4/src/main/java/org/apache/activemq/artemis/junit/ActiveMQProducerResource.java
+++ b/artemis-junit/artemis-junit-4/src/main/java/org/apache/activemq/artemis/junit/ActiveMQProducerResource.java
@@ -67,7 +67,7 @@ public class ActiveMQProducerResource extends ExternalResource implements Active
    }
 
    public ActiveMQProducerResource(String url, String address, String username, String password) {
-      activeMQProducer = new ActiveMQProducerDelegate(url, SimpleString.toSimpleString(address), username, password);
+      activeMQProducer = new ActiveMQProducerDelegate(url, SimpleString.of(address), username, password);
    }
 
    public ActiveMQProducerResource(String url, String address) {
@@ -84,11 +84,11 @@ public class ActiveMQProducerResource extends ExternalResource implements Active
 
    public ActiveMQProducerResource(ServerLocator serverLocator, String address, String username, String password) {
       activeMQProducer =
-               new ActiveMQProducerDelegate(serverLocator, SimpleString.toSimpleString(address), username, password);
+               new ActiveMQProducerDelegate(serverLocator, SimpleString.of(address), username, password);
    }
 
    public ActiveMQProducerResource(ServerLocator serverLocator, String address) {
-      activeMQProducer = new ActiveMQProducerDelegate(serverLocator, SimpleString.toSimpleString(address));
+      activeMQProducer = new ActiveMQProducerDelegate(serverLocator, SimpleString.of(address));
    }
 
    public ActiveMQProducerResource(ServerLocator serverLocator, SimpleString address, String username,
diff --git a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResourceTest.java b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResourceTest.java
index 8d6bb1b0ac..822761f4c8 100644
--- a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResourceTest.java
+++ b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResourceTest.java
@@ -34,8 +34,8 @@ import static org.junit.Assert.assertTrue;
 
 public class ActiveMQConsumerResourceTest {
 
-   static final SimpleString TEST_QUEUE = new SimpleString("test.queue");
-   static final SimpleString TEST_ADDRESS = new SimpleString("test.queue");
+   static final SimpleString TEST_QUEUE = SimpleString.of("test.queue");
+   static final SimpleString TEST_ADDRESS = SimpleString.of("test.queue");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceTest.java b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceTest.java
index 19dfa3e8ea..bc22e1b7a4 100644
--- a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceTest.java
+++ b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceTest.java
@@ -34,8 +34,8 @@ import static org.junit.Assert.assertTrue;
 
 public class ActiveMQDynamicProducerResourceTest {
 
-   static final SimpleString TEST_QUEUE_ONE = new SimpleString("test.queue.one");
-   static final SimpleString TEST_QUEUE_TWO = new SimpleString("test.queue.two");
+   static final SimpleString TEST_QUEUE_ONE = SimpleString.of("test.queue.one");
+   static final SimpleString TEST_QUEUE_TWO = SimpleString.of("test.queue.two");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressExceptionTest.java b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressExceptionTest.java
index 35d4a385fa..b014505e66 100644
--- a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressExceptionTest.java
+++ b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressExceptionTest.java
@@ -28,7 +28,7 @@ import org.junit.rules.RuleChain;
 
 public class ActiveMQDynamicProducerResourceWithoutAddressExceptionTest {
 
-   static final SimpleString TEST_QUEUE_ONE = new SimpleString("test.queue.one");
+   static final SimpleString TEST_QUEUE_ONE = SimpleString.of("test.queue.one");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressTest.java b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressTest.java
index a77efdb911..933ed285ae 100644
--- a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressTest.java
+++ b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressTest.java
@@ -35,8 +35,8 @@ import static org.junit.Assert.assertTrue;
 
 public class ActiveMQDynamicProducerResourceWithoutAddressTest {
 
-   static final SimpleString TEST_QUEUE_ONE = new SimpleString("test.queue.one");
-   static final SimpleString TEST_QUEUE_TWO = new SimpleString("test.queue.two");
+   static final SimpleString TEST_QUEUE_ONE = SimpleString.of("test.queue.one");
+   static final SimpleString TEST_QUEUE_TWO = SimpleString.of("test.queue.two");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQProducerResourceTest.java b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQProducerResourceTest.java
index 8c5ab7d781..bc3fcefb1c 100644
--- a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQProducerResourceTest.java
+++ b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/ActiveMQProducerResourceTest.java
@@ -33,8 +33,8 @@ import static org.junit.Assert.assertTrue;
 
 public class ActiveMQProducerResourceTest {
 
-   static final SimpleString TEST_QUEUE = new SimpleString("test.queue");
-   static final SimpleString TEST_ADDRESS = new SimpleString("test.queue");
+   static final SimpleString TEST_QUEUE = SimpleString.of("test.queue");
+   static final SimpleString TEST_ADDRESS = SimpleString.of("test.queue");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQResourceTest.java b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQResourceTest.java
index ec0f27bcfc..7cf37cf9dc 100644
--- a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQResourceTest.java
+++ b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQResourceTest.java
@@ -35,8 +35,8 @@ import static org.junit.Assert.assertTrue;
 
 public class EmbeddedActiveMQResourceTest {
 
-   static final SimpleString TEST_QUEUE = new SimpleString("test.queue");
-   static final SimpleString TEST_ADDRESS = new SimpleString("test.queueName");
+   static final SimpleString TEST_QUEUE = SimpleString.of("test.queue");
+   static final SimpleString TEST_ADDRESS = SimpleString.of("test.queueName");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedActiveMQResourcesTest.java b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedActiveMQResourcesTest.java
index 6712a0c9e7..3bb261b9ee 100644
--- a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedActiveMQResourcesTest.java
+++ b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedActiveMQResourcesTest.java
@@ -28,10 +28,10 @@ import static org.junit.Assert.assertNotNull;
 
 public class MultipleEmbeddedActiveMQResourcesTest {
 
-   static final SimpleString TEST_QUEUE_ONE = new SimpleString("test.queue.one");
-   static final SimpleString TEST_QUEUE_TWO = new SimpleString("test.queue.two");
-   static final SimpleString TEST_ADDRESS_ONE = new SimpleString("test.address.one");
-   static final SimpleString TEST_ADDRESS_TWO = new SimpleString("test.address.two");
+   static final SimpleString TEST_QUEUE_ONE = SimpleString.of("test.queue.one");
+   static final SimpleString TEST_QUEUE_TWO = SimpleString.of("test.queue.two");
+   static final SimpleString TEST_ADDRESS_ONE = SimpleString.of("test.address.one");
+   static final SimpleString TEST_ADDRESS_TWO = SimpleString.of("test.address.two");
 
    static final String TEST_BODY = "Test Message";
 
@@ -48,8 +48,8 @@ public class MultipleEmbeddedActiveMQResourcesTest {
 
    @Before
    public void setUp() throws Exception {
-      serverOne.getServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.toSimpleString("DLA")).setExpiryAddress(SimpleString.toSimpleString("Expiry")));
-      serverTwo.getServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.toSimpleString("DLA")).setExpiryAddress(SimpleString.toSimpleString("Expiry")));
+      serverOne.getServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.of("DLA")).setExpiryAddress(SimpleString.of("Expiry")));
+      serverTwo.getServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.of("DLA")).setExpiryAddress(SimpleString.of("Expiry")));
 
       serverOne.createQueue(TEST_ADDRESS_ONE, TEST_QUEUE_ONE);
       serverTwo.createQueue(TEST_ADDRESS_TWO, TEST_QUEUE_TWO);
diff --git a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedJMSResourcesTest.java b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedJMSResourcesTest.java
index 053699c523..9332b63484 100644
--- a/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedJMSResourcesTest.java
+++ b/artemis-junit/artemis-junit-4/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedJMSResourcesTest.java
@@ -44,8 +44,8 @@ public class MultipleEmbeddedJMSResourcesTest {
 
    @Test
    public void testMultipleServers() throws Exception {
-      jmsServerOne.getJmsServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.toSimpleString("DLA")).setExpiryAddress(SimpleString.toSimpleString("Expiry")));
-      jmsServerTwo.getJmsServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.toSimpleString("DLA")).setExpiryAddress(SimpleString.toSimpleString("Expiry")));
+      jmsServerOne.getJmsServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.of("DLA")).setExpiryAddress(SimpleString.of("Expiry")));
+      jmsServerTwo.getJmsServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.of("DLA")).setExpiryAddress(SimpleString.of("Expiry")));
 
       Message pushedOne = jmsServerOne.pushMessage(TEST_QUEUE_ONE, TEST_BODY);
       assertNotNull(String.format(ASSERT_PUSHED_FORMAT, TEST_QUEUE_ONE), pushedOne);
diff --git a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResourceTest.java b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResourceTest.java
index 9360bbd740..8b8aa40d00 100644
--- a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResourceTest.java
+++ b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQConsumerResourceTest.java
@@ -36,8 +36,8 @@ import static org.junit.jupiter.api.TestInstance.Lifecycle;
 @TestInstance(Lifecycle.PER_CLASS)
 public class ActiveMQConsumerResourceTest {
 
-   static final SimpleString TEST_QUEUE = new SimpleString("test.queue");
-   static final SimpleString TEST_ADDRESS = new SimpleString("test.queue");
+   static final SimpleString TEST_QUEUE = SimpleString.of("test.queue");
+   static final SimpleString TEST_ADDRESS = SimpleString.of("test.queue");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceTest.java b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceTest.java
index c7ba052b2d..e86c8c2b16 100644
--- a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceTest.java
+++ b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceTest.java
@@ -36,8 +36,8 @@ import static org.junit.jupiter.api.TestInstance.Lifecycle;
 @TestInstance(Lifecycle.PER_CLASS)
 public class ActiveMQDynamicProducerResourceTest {
 
-   static final SimpleString TEST_QUEUE_ONE = new SimpleString("test.queue.one");
-   static final SimpleString TEST_QUEUE_TWO = new SimpleString("test.queue.two");
+   static final SimpleString TEST_QUEUE_ONE = SimpleString.of("test.queue.one");
+   static final SimpleString TEST_QUEUE_TWO = SimpleString.of("test.queue.two");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressExceptionTest.java b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressExceptionTest.java
index 89373f53d6..443828e394 100644
--- a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressExceptionTest.java
+++ b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressExceptionTest.java
@@ -32,7 +32,7 @@ import static org.junit.jupiter.api.TestInstance.Lifecycle;
 @TestInstance(Lifecycle.PER_CLASS)
 public class ActiveMQDynamicProducerResourceWithoutAddressExceptionTest {
 
-   static final SimpleString TEST_QUEUE_ONE = new SimpleString("test.queue.one");
+   static final SimpleString TEST_QUEUE_ONE = SimpleString.of("test.queue.one");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressTest.java b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressTest.java
index 79d6d451e6..a3a1d4a39e 100644
--- a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressTest.java
+++ b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQDynamicProducerResourceWithoutAddressTest.java
@@ -37,8 +37,8 @@ import static org.junit.jupiter.api.TestInstance.Lifecycle;
 @TestInstance(Lifecycle.PER_CLASS)
 public class ActiveMQDynamicProducerResourceWithoutAddressTest {
 
-   static final SimpleString TEST_QUEUE_ONE = new SimpleString("test.queue.one");
-   static final SimpleString TEST_QUEUE_TWO = new SimpleString("test.queue.two");
+   static final SimpleString TEST_QUEUE_ONE = SimpleString.of("test.queue.one");
+   static final SimpleString TEST_QUEUE_TWO = SimpleString.of("test.queue.two");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQProducerResourceTest.java b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQProducerResourceTest.java
index eac5fb17df..e8eddc2e6e 100644
--- a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQProducerResourceTest.java
+++ b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/ActiveMQProducerResourceTest.java
@@ -36,8 +36,8 @@ import static org.junit.jupiter.api.TestInstance.Lifecycle;
 @TestInstance(Lifecycle.PER_CLASS)
 public class ActiveMQProducerResourceTest {
 
-   static final SimpleString TEST_QUEUE = new SimpleString("test.queue");
-   static final SimpleString TEST_ADDRESS = new SimpleString("test.queue");
+   static final SimpleString TEST_QUEUE = SimpleString.of("test.queue");
+   static final SimpleString TEST_ADDRESS = SimpleString.of("test.queue");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQResourceTest.java b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQResourceTest.java
index 3aa81e15e3..f51b35568d 100644
--- a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQResourceTest.java
+++ b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQResourceTest.java
@@ -36,8 +36,8 @@ import static org.junit.jupiter.api.TestInstance.Lifecycle;
 @TestInstance(Lifecycle.PER_CLASS)
 public class EmbeddedActiveMQResourceTest {
 
-   static final SimpleString TEST_QUEUE = new SimpleString("test.queue");
-   static final SimpleString TEST_ADDRESS = new SimpleString("test.queueName");
+   static final SimpleString TEST_QUEUE = SimpleString.of("test.queue");
+   static final SimpleString TEST_ADDRESS = SimpleString.of("test.queueName");
    static final String TEST_BODY = "Test Message";
    static final Map<String, Object> TEST_PROPERTIES;
 
diff --git a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedActiveMQResourcesTest.java b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedActiveMQResourcesTest.java
index 29a6f3731a..e001b0cdee 100644
--- a/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedActiveMQResourcesTest.java
+++ b/artemis-junit/artemis-junit-5/src/test/java/org/apache/activemq/artemis/junit/MultipleEmbeddedActiveMQResourcesTest.java
@@ -31,10 +31,10 @@ import static org.junit.jupiter.api.TestInstance.Lifecycle;
 @TestInstance(Lifecycle.PER_CLASS)
 public class MultipleEmbeddedActiveMQResourcesTest {
 
-   static final SimpleString TEST_QUEUE_ONE = new SimpleString("test.queue.one");
-   static final SimpleString TEST_QUEUE_TWO = new SimpleString("test.queue.two");
-   static final SimpleString TEST_ADDRESS_ONE = new SimpleString("test.address.one");
-   static final SimpleString TEST_ADDRESS_TWO = new SimpleString("test.address.two");
+   static final SimpleString TEST_QUEUE_ONE = SimpleString.of("test.queue.one");
+   static final SimpleString TEST_QUEUE_TWO = SimpleString.of("test.queue.two");
+   static final SimpleString TEST_ADDRESS_ONE = SimpleString.of("test.address.one");
+   static final SimpleString TEST_ADDRESS_TWO = SimpleString.of("test.address.two");
 
    static final String TEST_BODY = "Test Message";
 
@@ -51,8 +51,8 @@ public class MultipleEmbeddedActiveMQResourcesTest {
 
    @BeforeAll
    public void setUp() throws Exception {
-      serverOne.getServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.toSimpleString("DLA")).setExpiryAddress(SimpleString.toSimpleString("Expiry")));
-      serverTwo.getServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.toSimpleString("DLA")).setExpiryAddress(SimpleString.toSimpleString("Expiry")));
+      serverOne.getServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.of("DLA")).setExpiryAddress(SimpleString.of("Expiry")));
+      serverTwo.getServer().getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.of("DLA")).setExpiryAddress(SimpleString.of("Expiry")));
 
       serverOne.createQueue(TEST_ADDRESS_ONE, TEST_QUEUE_ONE);
       serverTwo.createQueue(TEST_ADDRESS_TWO, TEST_QUEUE_TWO);
diff --git a/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/ActiveMQConsumerDelegate.java b/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/ActiveMQConsumerDelegate.java
index 8e1deed270..e04e41c54c 100644
--- a/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/ActiveMQConsumerDelegate.java
+++ b/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/ActiveMQConsumerDelegate.java
@@ -35,11 +35,11 @@ public class ActiveMQConsumerDelegate extends AbstractActiveMQClientDelegate imp
    ClientConsumer consumer;
 
    public ActiveMQConsumerDelegate(String url, String queueName) {
-      this(url, SimpleString.toSimpleString(queueName), null, null);
+      this(url, SimpleString.of(queueName), null, null);
    }
 
    public ActiveMQConsumerDelegate(String url, String queueName, String username, String password) {
-      this(url, SimpleString.toSimpleString(queueName), username, password);
+      this(url, SimpleString.of(queueName), username, password);
    }
 
    public ActiveMQConsumerDelegate(String url, SimpleString queueName, String username, String password) {
@@ -52,11 +52,11 @@ public class ActiveMQConsumerDelegate extends AbstractActiveMQClientDelegate imp
    }
 
    public ActiveMQConsumerDelegate(ServerLocator serverLocator, String queueName, String username, String password) {
-      this(serverLocator, SimpleString.toSimpleString(queueName), username, password);
+      this(serverLocator, SimpleString.of(queueName), username, password);
    }
 
    public ActiveMQConsumerDelegate(ServerLocator serverLocator, String queueName) {
-      this(serverLocator, SimpleString.toSimpleString(queueName), null, null);
+      this(serverLocator, SimpleString.of(queueName), null, null);
    }
 
    public ActiveMQConsumerDelegate(ServerLocator serverLocator, SimpleString queueName, String username,
diff --git a/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/ActiveMQProducerDelegate.java b/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/ActiveMQProducerDelegate.java
index 84d50888e5..b655438378 100644
--- a/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/ActiveMQProducerDelegate.java
+++ b/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/ActiveMQProducerDelegate.java
@@ -51,7 +51,7 @@ public class ActiveMQProducerDelegate extends AbstractActiveMQClientDelegate imp
    }
 
    protected ActiveMQProducerDelegate(String url, String address, String username, String password) {
-      this(url, SimpleString.toSimpleString(address), username, password);
+      this(url, SimpleString.of(address), username, password);
    }
 
    protected ActiveMQProducerDelegate(String url, String address) {
@@ -72,11 +72,11 @@ public class ActiveMQProducerDelegate extends AbstractActiveMQClientDelegate imp
    }
 
    protected ActiveMQProducerDelegate(ServerLocator serverLocator, String address, String username, String password) {
-      this(serverLocator, SimpleString.toSimpleString(address), username, password);
+      this(serverLocator, SimpleString.of(address), username, password);
    }
 
    protected ActiveMQProducerDelegate(ServerLocator serverLocator, String address) {
-      this(serverLocator, SimpleString.toSimpleString(address));
+      this(serverLocator, SimpleString.of(address));
    }
 
    protected ActiveMQProducerDelegate(ServerLocator serverLocator, SimpleString address, String username,
diff --git a/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQDelegate.java b/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQDelegate.java
index a86d064bec..5cbc047036 100644
--- a/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQDelegate.java
+++ b/artemis-junit/artemis-junit-commons/src/main/java/org/apache/activemq/artemis/junit/EmbeddedActiveMQDelegate.java
@@ -75,8 +75,8 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
                                       .setSecurityEnabled(false)
                                       .addAcceptorConfiguration(new TransportConfiguration(InVMAcceptorFactory.class.getName()))
                                       .addAddressSetting("#",
-                                                         new AddressSettings().setDeadLetterAddress(SimpleString.toSimpleString("dla"))
-                                                                              .setExpiryAddress(SimpleString.toSimpleString("expiry")));
+                                                         new AddressSettings().setDeadLetterAddress(SimpleString.of("dla"))
+                                                                              .setExpiryAddress(SimpleString.of("expiry")));
       init();
    }
 
@@ -237,7 +237,7 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
 
    @Override
    public long getMessageCount(String queueName) {
-      return getMessageCount(SimpleString.toSimpleString(queueName));
+      return getMessageCount(SimpleString.of(queueName));
    }
 
    @Override
@@ -253,7 +253,7 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
 
    @Override
    public Queue locateQueue(String queueName) {
-      return locateQueue(SimpleString.toSimpleString(queueName));
+      return locateQueue(SimpleString.of(queueName));
    }
 
    @Override
@@ -263,7 +263,7 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
 
    @Override
    public List<Queue> getBoundQueues(String address) {
-      return getBoundQueues(SimpleString.toSimpleString(address));
+      return getBoundQueues(SimpleString.of(address));
    }
 
    @Override
@@ -290,12 +290,12 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
 
    @Override
    public Queue createQueue(String name) {
-      return createQueue(SimpleString.toSimpleString(name), SimpleString.toSimpleString(name));
+      return createQueue(SimpleString.of(name), SimpleString.of(name));
    }
 
    @Override
    public Queue createQueue(String address, String name) {
-      return createQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(name));
+      return createQueue(SimpleString.of(address), SimpleString.of(name));
    }
 
    @Override
@@ -315,14 +315,14 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
 
    @Override
    public void createSharedQueue(String name, String user) {
-      createSharedQueue(SimpleString.toSimpleString(name), SimpleString.toSimpleString(name),
-                        SimpleString.toSimpleString(user));
+      createSharedQueue(SimpleString.of(name), SimpleString.of(name),
+                        SimpleString.of(user));
    }
 
    @Override
    public void createSharedQueue(String address, String name, String user) {
-      createSharedQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(name),
-                        SimpleString.toSimpleString(user));
+      createSharedQueue(SimpleString.of(address), SimpleString.of(name),
+                        SimpleString.of(user));
    }
 
    @Override
@@ -401,32 +401,32 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
 
    @Override
    public void sendMessage(String address, ClientMessage message) {
-      sendMessage(SimpleString.toSimpleString(address), message);
+      sendMessage(SimpleString.of(address), message);
    }
 
    @Override
    public ClientMessage sendMessage(String address, byte[] body) {
-      return sendMessage(SimpleString.toSimpleString(address), body);
+      return sendMessage(SimpleString.of(address), body);
    }
 
    @Override
    public ClientMessage sendMessage(String address, String body) {
-      return sendMessage(SimpleString.toSimpleString(address), body);
+      return sendMessage(SimpleString.of(address), body);
    }
 
    @Override
    public ClientMessage sendMessageWithProperties(String address, Map<String, Object> properties) {
-      return sendMessageWithProperties(SimpleString.toSimpleString(address), properties);
+      return sendMessageWithProperties(SimpleString.of(address), properties);
    }
 
    @Override
    public ClientMessage sendMessageWithProperties(String address, byte[] body, Map<String, Object> properties) {
-      return sendMessageWithProperties(SimpleString.toSimpleString(address), body, properties);
+      return sendMessageWithProperties(SimpleString.of(address), body, properties);
    }
 
    @Override
    public ClientMessage sendMessageWithProperties(String address, String body, Map<String, Object> properties) {
-      return sendMessageWithProperties(SimpleString.toSimpleString(address), body, properties);
+      return sendMessageWithProperties(SimpleString.of(address), body, properties);
    }
 
    @Override
@@ -478,12 +478,12 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
 
    @Override
    public ClientMessage receiveMessage(String queueName) {
-      return receiveMessage(SimpleString.toSimpleString(queueName));
+      return receiveMessage(SimpleString.of(queueName));
    }
 
    @Override
    public ClientMessage receiveMessage(String queueName, long timeout) {
-      return receiveMessage(SimpleString.toSimpleString(queueName), timeout);
+      return receiveMessage(SimpleString.of(queueName), timeout);
    }
 
    @Override
@@ -500,12 +500,12 @@ public class EmbeddedActiveMQDelegate implements EmbeddedActiveMQOperations {
 
    @Override
    public ClientMessage browseMessage(String queueName) {
-      return browseMessage(SimpleString.toSimpleString(queueName), defaultReceiveTimeout);
+      return browseMessage(SimpleString.of(queueName), defaultReceiveTimeout);
    }
 
    @Override
    public ClientMessage browseMessage(String queueName, long timeout) {
-      return browseMessage(SimpleString.toSimpleString(queueName), timeout);
+      return browseMessage(SimpleString.of(queueName), timeout);
    }
 
    @Override
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java
index 1d814f5443..7b7846f8d2 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java
@@ -118,11 +118,11 @@ import static org.apache.activemq.artemis.protocol.amqp.converter.AMQPMessageSup
  */
 public abstract class AMQPMessage extends RefCountMessage implements org.apache.activemq.artemis.api.core.Message {
 
-   private static final SimpleString ANNOTATION_AREA_PREFIX = SimpleString.toSimpleString("m.");
+   private static final SimpleString ANNOTATION_AREA_PREFIX = SimpleString.of("m.");
 
    protected static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-   public static final SimpleString ADDRESS_PROPERTY = SimpleString.toSimpleString("_AMQ_AD");
+   public static final SimpleString ADDRESS_PROPERTY = SimpleString.of("_AMQ_AD");
    // used to perform quick search
    private static final Symbol[] SCHEDULED_DELIVERY_SYMBOLS = new Symbol[]{
       AMQPMessageSupport.SCHEDULED_DELIVERY_TIME, AMQPMessageSupport.SCHEDULED_DELIVERY_DELAY};
@@ -1299,7 +1299,7 @@ public abstract class AMQPMessage extends RefCountMessage implements org.apache.
    @Override
    public final SimpleString getReplyTo() {
       if (properties != null) {
-         return SimpleString.toSimpleString(properties.getReplyTo());
+         return SimpleString.of(properties.getReplyTo());
       } else {
          return null;
       }
@@ -1353,8 +1353,8 @@ public abstract class AMQPMessage extends RefCountMessage implements org.apache.
       ensureMessageDataScanned();
 
       if (properties != null && properties.getGroupId() != null) {
-         return SimpleString.toSimpleString(properties.getGroupId(),
-            coreMessageObjectPools == null ? null : coreMessageObjectPools.getGroupIdStringSimpleStringPool());
+         return SimpleString.of(properties.getGroupId(),
+                                coreMessageObjectPools == null ? null : coreMessageObjectPools.getGroupIdStringSimpleStringPool());
       } else {
          return null;
       }
@@ -1612,7 +1612,7 @@ public abstract class AMQPMessage extends RefCountMessage implements org.apache.
    public final Set<SimpleString> getPropertyNames() {
       HashSet<SimpleString> values = new HashSet<>();
       for (Object k : getApplicationPropertiesMap(false).keySet()) {
-         values.add(SimpleString.toSimpleString(k.toString(), getPropertyKeysPool()));
+         values.add(SimpleString.of(k.toString(), getPropertyKeysPool()));
       }
       return values;
    }
@@ -1678,7 +1678,7 @@ public abstract class AMQPMessage extends RefCountMessage implements org.apache.
    }
    @Override
    public final SimpleString getSimpleStringProperty(String key) throws ActiveMQPropertyConversionException {
-      return SimpleString.toSimpleString((String) getApplicationPropertiesMap(false).get(key), getPropertyValuesPool());
+      return SimpleString.of((String) getApplicationPropertiesMap(false).get(key), getPropertyValuesPool());
    }
 
    // Core Message Application Property update methods, calling these puts the message in a dirty
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java
index a274bac726..f6c9167459 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallback.java
@@ -280,7 +280,7 @@ public class AMQPSessionCallback implements SessionCallback {
                                       boolean browserOnly,
                                       Number priority) throws Exception {
       final long consumerID = consumerIDGenerator.generateID();
-      final SimpleString filterString = SimpleString.toSimpleString(SelectorTranslator.convertToActiveMQFilterString(filter));
+      final SimpleString filterString = SimpleString.of(SelectorTranslator.convertToActiveMQFilterString(filter));
       final int consumerPriority = priority != null ? priority.intValue() : ActiveMQDefaultConfiguration.getDefaultConsumerPriority();
       final ServerConsumer consumer = serverSession.createConsumer(
          consumerID, queue, filterString, consumerPriority, browserOnly, false, null);
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/ProtonProtocolManager.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/ProtonProtocolManager.java
index 6f246531e1..f465d83e48 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/ProtonProtocolManager.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/ProtonProtocolManager.java
@@ -335,14 +335,14 @@ public class ProtonProtocolManager extends AbstractProtocolManager<AMQPMessage,
    @Override
    public void setAnycastPrefix(String anycastPrefix) {
       for (String prefix : anycastPrefix.split(",")) {
-         prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.ANYCAST);
+         prefixes.put(SimpleString.of(prefix), RoutingType.ANYCAST);
       }
    }
 
    @Override
    public void setMulticastPrefix(String multicastPrefix) {
       for (String prefix : multicastPrefix.split(",")) {
-         prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.MULTICAST);
+         prefixes.put(SimpleString.of(prefix), RoutingType.MULTICAST);
       }
    }
 
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/AMQPBrokerConnection.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/AMQPBrokerConnection.java
index 5b4c1c9892..6b3c6b45da 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/AMQPBrokerConnection.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/AMQPBrokerConnection.java
@@ -297,7 +297,7 @@ public class AMQPBrokerConnection implements ClientConnectionLifeCycleListener,
    SimpleString getMirrorSNF(AMQPMirrorBrokerConnectionElement mirrorElement) {
       SimpleString snf = mirrorElement.getMirrorSNF();
       if (snf == null) {
-         snf = SimpleString.toSimpleString(ProtonProtocolManager.getMirrorAddress(this.brokerConnectConfiguration.getName()));
+         snf = SimpleString.of(ProtonProtocolManager.getMirrorAddress(this.brokerConnectConfiguration.getName()));
          mirrorElement.setMirrorSNF(snf);
       }
       return snf;
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationAddressConsumer.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationAddressConsumer.java
index 2e8346a63f..3ee196cf8a 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationAddressConsumer.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationAddressConsumer.java
@@ -98,7 +98,7 @@ public class AMQPFederationAddressConsumer implements FederationConsumerInternal
 
    // Redefined because AMQPMessage uses SimpleString in its annotations API for some reason.
    private static final SimpleString MESSAGE_HOPS_ANNOTATION =
-      new SimpleString(AMQPFederationPolicySupport.MESSAGE_HOPS_ANNOTATION.toString());
+      SimpleString.of(AMQPFederationPolicySupport.MESSAGE_HOPS_ANNOTATION.toString());
 
    private static final Symbol[] DEFAULT_OUTCOMES = new Symbol[]{Accepted.DESCRIPTOR_SYMBOL, Rejected.DESCRIPTOR_SYMBOL,
                                                                  Released.DESCRIPTOR_SYMBOL, Modified.DESCRIPTOR_SYMBOL};
@@ -431,7 +431,7 @@ public class AMQPFederationAddressConsumer implements FederationConsumerInternal
       AMQPFederatedAddressDeliveryReceiver(AMQPSessionContext session, FederationConsumerInfo consumerInfo, Receiver receiver) {
          super(session.getSessionSPI(), session.getAMQPConnectionContext(), session, receiver);
 
-         this.cachedAddress = SimpleString.toSimpleString(consumerInfo.getAddress());
+         this.cachedAddress = SimpleString.of(consumerInfo.getAddress());
       }
 
       @Override
@@ -484,7 +484,7 @@ public class AMQPFederationAddressConsumer implements FederationConsumerInternal
             throw new ActiveMQAMQPInternalErrorException("Remote should have sent an valid Target but we got: " + target);
          }
 
-         address = SimpleString.toSimpleString(target.getAddress());
+         address = SimpleString.of(target.getAddress());
          defRoutingType = getRoutingType(target.getCapabilities(), address);
 
          try {
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationAddressSenderController.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationAddressSenderController.java
index 56759303f6..e41d2b0bc7 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationAddressSenderController.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationAddressSenderController.java
@@ -78,7 +78,7 @@ public final class AMQPFederationAddressSenderController extends AMQPFederationB
       final Sender sender = senderContext.getSender();
       final Source source = (Source) sender.getRemoteSource();
       final String selector;
-      final SimpleString queueName = SimpleString.toSimpleString(sender.getName());
+      final SimpleString queueName = SimpleString.of(sender.getName());
       final Connection protonConnection = sender.getSession().getConnection();
       final org.apache.qpid.proton.engine.Record attachments = protonConnection.attachments();
 
@@ -136,7 +136,7 @@ public final class AMQPFederationAddressSenderController extends AMQPFederationB
          selector = jmsSelector;
       }
 
-      final SimpleString address = SimpleString.toSimpleString(source.getAddress());
+      final SimpleString address = SimpleString.of(source.getAddress());
       final AddressQueryResult addressQueryResult;
 
       try {
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationCommandDispatcher.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationCommandDispatcher.java
index 5e08346db5..c44c75d4c8 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationCommandDispatcher.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationCommandDispatcher.java
@@ -125,12 +125,12 @@ public class AMQPFederationCommandDispatcher implements SenderController {
       controlAddress = federation.prefixControlLinkQueueName(sender.getRemoteTarget().getAddress());
 
       try {
-         session.createTemporaryQueue(SimpleString.toSimpleString(getControlLinkAddress()), RoutingType.ANYCAST, 1);
+         session.createTemporaryQueue(SimpleString.of(getControlLinkAddress()), RoutingType.ANYCAST, 1);
       } catch (Exception e) {
          throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.errorCreatingTemporaryQueue(e.getMessage());
       }
 
-      return (Consumer) session.createSender(senderContext, SimpleString.toSimpleString(getControlLinkAddress()), null, false);
+      return (Consumer) session.createSender(senderContext, SimpleString.of(getControlLinkAddress()), null, false);
    }
 
    @Override
@@ -138,7 +138,7 @@ public class AMQPFederationCommandDispatcher implements SenderController {
       // Make a best effort to remove the temporary queue used for control commands on close.
 
       try {
-         session.removeTemporaryQueue(SimpleString.toSimpleString(getControlLinkAddress()));
+         session.removeTemporaryQueue(SimpleString.of(getControlLinkAddress()));
       } catch (Exception e) {
          // Ignored as the temporary queue should be removed on connection termination.
       }
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationEventDispatcher.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationEventDispatcher.java
index b3e69b1eeb..d7e92a72c7 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationEventDispatcher.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationEventDispatcher.java
@@ -136,7 +136,7 @@ public class AMQPFederationEventDispatcher implements SenderController, ActiveMQ
       }
 
       try {
-         session.createTemporaryQueue(SimpleString.toSimpleString(getEventsLinkAddress()), RoutingType.ANYCAST, 1);
+         session.createTemporaryQueue(SimpleString.of(getEventsLinkAddress()), RoutingType.ANYCAST, 1);
       } catch (Exception e) {
          throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.errorCreatingTemporaryQueue(e.getMessage());
       }
@@ -146,7 +146,7 @@ public class AMQPFederationEventDispatcher implements SenderController, ActiveMQ
 
       server.registerBrokerPlugin(this); // Start listening for bindings and consumer events.
 
-      return (Consumer) session.createSender(senderContext, SimpleString.toSimpleString(getEventsLinkAddress()), null, false);
+      return (Consumer) session.createSender(senderContext, SimpleString.of(getEventsLinkAddress()), null, false);
    }
 
    @Override
@@ -155,7 +155,7 @@ public class AMQPFederationEventDispatcher implements SenderController, ActiveMQ
       server.unRegisterBrokerPlugin(this);
 
       try {
-         session.removeTemporaryQueue(SimpleString.toSimpleString(getEventsLinkAddress()));
+         session.removeTemporaryQueue(SimpleString.of(getEventsLinkAddress()));
       } catch (Exception e) {
          // Ignored as the temporary queue should be removed on connection termination.
       }
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationQueueConsumer.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationQueueConsumer.java
index 03fec69e54..f1a15bc5bf 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationQueueConsumer.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationQueueConsumer.java
@@ -413,7 +413,7 @@ public class AMQPFederationQueueConsumer implements FederationConsumerInternal {
          super(session.getSessionSPI(), session.getAMQPConnectionContext(), session, receiver);
 
          this.localQueue = localQueue;
-         this.cachedFqqn = SimpleString.toSimpleString(consumerInfo.getFqqn());
+         this.cachedFqqn = SimpleString.of(consumerInfo.getFqqn());
       }
 
       @Override
@@ -449,7 +449,7 @@ public class AMQPFederationQueueConsumer implements FederationConsumerInternal {
             throw new ActiveMQAMQPInternalErrorException("Remote should have sent an valid Target but we got: " + target);
          }
 
-         address = SimpleString.toSimpleString(target.getAddress());
+         address = SimpleString.of(target.getAddress());
          defRoutingType = getRoutingType(target.getCapabilities(), address);
 
          try {
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationQueueSenderController.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationQueueSenderController.java
index 416a1a5678..7c61f32126 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationQueueSenderController.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationQueueSenderController.java
@@ -97,11 +97,11 @@ public final class AMQPFederationQueueSenderController extends AMQPFederationBas
       final SimpleString targetQueue;
 
       if (CompositeAddress.isFullyQualified(source.getAddress())) {
-         targetAddress = SimpleString.toSimpleString(CompositeAddress.extractAddressName(source.getAddress()));
-         targetQueue = SimpleString.toSimpleString(CompositeAddress.extractQueueName(source.getAddress()));
+         targetAddress = SimpleString.of(CompositeAddress.extractAddressName(source.getAddress()));
+         targetQueue = SimpleString.of(CompositeAddress.extractQueueName(source.getAddress()));
       } else {
          targetAddress = null;
-         targetQueue = SimpleString.toSimpleString(source.getAddress());
+         targetQueue = SimpleString.of(source.getAddress());
       }
 
       final QueueQueryResult result = sessionSPI.queueQuery(targetQueue, routingType, false, null);
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerSource.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerSource.java
index abee8a6220..5081f08c0d 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerSource.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerSource.java
@@ -69,7 +69,7 @@ public class AMQPMirrorControllerSource extends BasicMirrorController<Sender> im
    public static final Symbol ADDRESS = Symbol.getSymbol("x-opt-amq-mr-adr");
    public static final Symbol QUEUE = Symbol.getSymbol("x-opt-amq-mr-qu");
    public static final Symbol BROKER_ID = Symbol.getSymbol("x-opt-amq-bkr-id");
-   public static final SimpleString BROKER_ID_SIMPLE_STRING = SimpleString.toSimpleString(BROKER_ID.toString());
+   public static final SimpleString BROKER_ID_SIMPLE_STRING = SimpleString.of(BROKER_ID.toString());
 
    // Events:
    public static final Symbol ADD_ADDRESS = Symbol.getSymbol("addAddress");
@@ -90,8 +90,8 @@ public class AMQPMirrorControllerSource extends BasicMirrorController<Sender> im
    public static final Symbol MIRROR_CAPABILITY = Symbol.getSymbol("amq.mirror");
    public static final Symbol QPID_DISPATCH_WAYPOINT_CAPABILITY = Symbol.valueOf("qd.waypoint");
 
-   public static final SimpleString INTERNAL_ID_EXTRA_PROPERTY = SimpleString.toSimpleString(INTERNAL_ID.toString());
-   public static final SimpleString INTERNAL_BROKER_ID_EXTRA_PROPERTY = SimpleString.toSimpleString(BROKER_ID.toString());
+   public static final SimpleString INTERNAL_ID_EXTRA_PROPERTY = SimpleString.of(INTERNAL_ID.toString());
+   public static final SimpleString INTERNAL_BROKER_ID_EXTRA_PROPERTY = SimpleString.of(BROKER_ID.toString());
 
    private static final ThreadLocal<RoutingContext> mirrorControlRouting = ThreadLocal.withInitial(() -> new RoutingContextImpl(null));
 
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerTarget.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerTarget.java
index 4028f77262..a5c549483f 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerTarget.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerTarget.java
@@ -241,7 +241,7 @@ public class AMQPMirrorControllerTarget extends ProtonAbstractReceiver implement
                   String address = (String) AMQPMessageBrokerAccessor.getMessageAnnotationProperty(amqpMessage, ADDRESS);
                   String queueName = (String) AMQPMessageBrokerAccessor.getMessageAnnotationProperty(amqpMessage, QUEUE);
 
-                  deleteQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName));
+                  deleteQueue(SimpleString.of(address), SimpleString.of(queueName));
                } else if (eventType.equals(POST_ACK)) {
                   String nodeID = (String) AMQPMessageBrokerAccessor.getMessageAnnotationProperty(amqpMessage, BROKER_ID);
 
@@ -458,7 +458,7 @@ public class AMQPMirrorControllerTarget extends ProtonAbstractReceiver implement
          logger.trace("Setting up duplicate detection cache on {}, ServerID={} with {} elements, being the number of credits", ProtonProtocolManager.MIRROR_ADDRESS, internalMirrorID, connection.getAmqpCredits());
 
          lruDuplicateIDKey = internalMirrorID;
-         lruduplicateIDCache = server.getPostOffice().getDuplicateIDCache(SimpleString.toSimpleString(ProtonProtocolManager.MIRROR_ADDRESS + "_" + internalMirrorID), connection.getAmqpCredits());
+         lruduplicateIDCache = server.getPostOffice().getDuplicateIDCache(SimpleString.of(ProtonProtocolManager.MIRROR_ADDRESS + "_" + internalMirrorID), connection.getAmqpCredits());
          duplicateIDCache = lruduplicateIDCache;
       }
 
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/MirrorAddressFilter.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/MirrorAddressFilter.java
index ec4e710edc..ea6e47de8a 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/MirrorAddressFilter.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/MirrorAddressFilter.java
@@ -36,9 +36,9 @@ public class MirrorAddressFilter {
          for (String part : parts) {
             if (!"".equals(part) && !"!".equals(part)) {
                if (part.startsWith("!")) {
-                  denyList.add(new SimpleString(part.substring(1)));
+                  denyList.add(SimpleString.of(part.substring(1)));
                } else {
-                  allowList.add(new SimpleString(part));
+                  allowList.add(SimpleString.of(part));
                }
             }
          }
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/AMQPMessageSupport.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/AMQPMessageSupport.java
index 1b47944269..71eaf610fe 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/AMQPMessageSupport.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/AMQPMessageSupport.java
@@ -63,7 +63,7 @@ public final class AMQPMessageSupport {
 
    public static final int MESSAGE_DEFAULT_PRIORITY = 4;
 
-   public static SimpleString HDR_ORIGINAL_ADDRESS_ANNOTATION = SimpleString.toSimpleString("x-opt-ORIG-ADDRESS");
+   public static SimpleString HDR_ORIGINAL_ADDRESS_ANNOTATION = SimpleString.of("x-opt-ORIG-ADDRESS");
 
    public static final String JMS_REPLY_TO_TYPE_MSG_ANNOTATION_SYMBOL_NAME = "x-opt-jms-reply-to";
    public static final String X_OPT_DELIVERY_TIME = "x-opt-delivery-time";
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreMapMessageWrapper.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreMapMessageWrapper.java
index bb72eb35bc..aa0d19c349 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreMapMessageWrapper.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreMapMessageWrapper.java
@@ -80,49 +80,49 @@ public final class CoreMapMessageWrapper extends CoreMessageWrapper {
    }
 
    public void setBoolean(final String name, final boolean value) {
-      map.putBooleanProperty(new SimpleString(name), value);
+      map.putBooleanProperty(SimpleString.of(name), value);
    }
 
    public void setByte(final String name, final byte value) {
-      map.putByteProperty(new SimpleString(name), value);
+      map.putByteProperty(SimpleString.of(name), value);
    }
 
    public void setShort(final String name, final short value) {
-      map.putShortProperty(new SimpleString(name), value);
+      map.putShortProperty(SimpleString.of(name), value);
    }
 
    public void setChar(final String name, final char value) {
-      map.putCharProperty(new SimpleString(name), value);
+      map.putCharProperty(SimpleString.of(name), value);
    }
 
    public void setInt(final String name, final int value) {
-      map.putIntProperty(new SimpleString(name), value);
+      map.putIntProperty(SimpleString.of(name), value);
    }
 
    public void setLong(final String name, final long value) {
-      map.putLongProperty(new SimpleString(name), value);
+      map.putLongProperty(SimpleString.of(name), value);
    }
 
    public void setFloat(final String name, final float value) {
-      map.putFloatProperty(new SimpleString(name), value);
+      map.putFloatProperty(SimpleString.of(name), value);
    }
 
    public void setDouble(final String name, final double value) {
-      map.putDoubleProperty(new SimpleString(name), value);
+      map.putDoubleProperty(SimpleString.of(name), value);
    }
 
    public void setString(final String name, final String value) {
-      map.putSimpleStringProperty(new SimpleString(name), SimpleString.toSimpleString(value));
+      map.putSimpleStringProperty(SimpleString.of(name), SimpleString.of(value));
    }
 
    public void setBytes(final String name, final byte[] value) {
-      map.putBytesProperty(new SimpleString(name), value);
+      map.putBytesProperty(SimpleString.of(name), value);
    }
 
    public void setBytes(final String name, final byte[] value, final int offset, final int length) {
       byte[] newBytes = new byte[length];
       System.arraycopy(value, offset, newBytes, 0, length);
-      map.putBytesProperty(new SimpleString(name), newBytes);
+      map.putBytesProperty(SimpleString.of(name), newBytes);
    }
 
    public void setObject(final String name, final Object value) throws ActiveMQPropertyConversionException {
@@ -137,43 +137,43 @@ public final class CoreMapMessageWrapper extends CoreMessageWrapper {
       } else if (value instanceof UnsignedLong) {
          val = ((UnsignedLong) value).longValue();
       }
-      TypedProperties.setObjectProperty(new SimpleString(name), val, map);
+      TypedProperties.setObjectProperty(SimpleString.of(name), val, map);
    }
 
    public boolean getBoolean(final String name) throws ActiveMQPropertyConversionException {
-      return map.getBooleanProperty(new SimpleString(name));
+      return map.getBooleanProperty(SimpleString.of(name));
    }
 
    public byte getByte(final String name) throws ActiveMQPropertyConversionException {
-      return map.getByteProperty(new SimpleString(name));
+      return map.getByteProperty(SimpleString.of(name));
    }
 
    public short getShort(final String name) throws ActiveMQPropertyConversionException {
-      return map.getShortProperty(new SimpleString(name));
+      return map.getShortProperty(SimpleString.of(name));
    }
 
    public char getChar(final String name) throws ActiveMQPropertyConversionException {
-      return map.getCharProperty(new SimpleString(name));
+      return map.getCharProperty(SimpleString.of(name));
    }
 
    public int getInt(final String name) throws ActiveMQPropertyConversionException {
-      return map.getIntProperty(new SimpleString(name));
+      return map.getIntProperty(SimpleString.of(name));
    }
 
    public long getLong(final String name) throws ActiveMQPropertyConversionException {
-      return map.getLongProperty(new SimpleString(name));
+      return map.getLongProperty(SimpleString.of(name));
    }
 
    public float getFloat(final String name) throws ActiveMQPropertyConversionException {
-      return map.getFloatProperty(new SimpleString(name));
+      return map.getFloatProperty(SimpleString.of(name));
    }
 
    public double getDouble(final String name) throws ActiveMQPropertyConversionException {
-      return map.getDoubleProperty(new SimpleString(name));
+      return map.getDoubleProperty(SimpleString.of(name));
    }
 
    public String getString(final String name) throws ActiveMQPropertyConversionException {
-      SimpleString str = map.getSimpleStringProperty(new SimpleString(name));
+      SimpleString str = map.getSimpleStringProperty(SimpleString.of(name));
       if (str == null) {
          return null;
       } else {
@@ -182,11 +182,11 @@ public final class CoreMapMessageWrapper extends CoreMessageWrapper {
    }
 
    public byte[] getBytes(final String name) throws ActiveMQPropertyConversionException {
-      return map.getBytesProperty(new SimpleString(name));
+      return map.getBytesProperty(SimpleString.of(name));
    }
 
    public Object getObject(final String name) {
-      Object val = map.getProperty(new SimpleString(name));
+      Object val = map.getProperty(SimpleString.of(name));
 
       if (val instanceof SimpleString) {
          val = ((SimpleString) val).toString();
@@ -200,7 +200,7 @@ public final class CoreMapMessageWrapper extends CoreMessageWrapper {
    }
 
    public boolean itemExists(final String name) {
-      return map.containsProperty(new SimpleString(name));
+      return map.containsProperty(SimpleString.of(name));
    }
 
    @Override
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreMessageWrapper.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreMessageWrapper.java
index cf1917a72b..929e1db397 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreMessageWrapper.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreMessageWrapper.java
@@ -187,14 +187,14 @@ public class CoreMessageWrapper {
    }
 
    public final void setJMSReplyTo(String replyTo)  {
-      MessageUtil.setJMSReplyTo(message, SimpleString.toSimpleString(replyTo));
+      MessageUtil.setJMSReplyTo(message, SimpleString.of(replyTo));
    }
 
    public SimpleString getDestination()  {
       if (message.getAddress() == null || message.getAddress().isEmpty()) {
          return null;
       }
-      return SimpleString.toSimpleString(AMQPMessageSupport.destination(message.getRoutingType(), message.getAddress()));
+      return SimpleString.of(AMQPMessageSupport.destination(message.getRoutingType(), message.getAddress()));
    }
 
    public final void setDestination(String destination)  {
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreTextMessageWrapper.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreTextMessageWrapper.java
index dd9c42cc0b..43e30eede2 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreTextMessageWrapper.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/converter/coreWrapper/CoreTextMessageWrapper.java
@@ -88,7 +88,7 @@ public class CoreTextMessageWrapper extends CoreMessageWrapper {
 
    public void setText(final String text)  {
       if (text != null) {
-         this.text = new SimpleString(text);
+         this.text = SimpleString.of(text);
       } else {
          this.text = null;
       }
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AMQPConnectionContext.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AMQPConnectionContext.java
index 5e8c76f14a..b31d463433 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AMQPConnectionContext.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AMQPConnectionContext.java
@@ -439,7 +439,7 @@ public class AMQPConnectionContext extends ProtonInitializable implements EventH
    private void handleReplicaTargetLinkOpened(AMQPSessionContext protonSession, Receiver receiver) throws Exception {
       try {
          try {
-            protonSession.getSessionSPI().check(SimpleString.toSimpleString(receiver.getTarget().getAddress()), CheckType.SEND, getSecurityAuth());
+            protonSession.getSessionSPI().check(SimpleString.of(receiver.getTarget().getAddress()), CheckType.SEND, getSecurityAuth());
          } catch (ActiveMQSecurityException e) {
             throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.securityErrorCreatingProducer(e.getMessage());
          }
@@ -472,7 +472,7 @@ public class AMQPConnectionContext extends ProtonInitializable implements EventH
    private void handleFederationControlLinkOpened(AMQPSessionContext protonSession, Receiver receiver) throws Exception {
       try {
          try {
-            protonSession.getSessionSPI().check(SimpleString.toSimpleString(FEDERATION_BASE_VALIDATION_ADDRESS), CheckType.SEND, getSecurityAuth());
+            protonSession.getSessionSPI().check(SimpleString.of(FEDERATION_BASE_VALIDATION_ADDRESS), CheckType.SEND, getSecurityAuth());
          } catch (ActiveMQSecurityException e) {
             throw new ActiveMQAMQPSecurityException(
                "User does not have permission to attach to the federation control address");
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AmqpSupport.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AmqpSupport.java
index c75bf0d71b..d030f7ed36 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AmqpSupport.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AmqpSupport.java
@@ -381,7 +381,7 @@ public class AmqpSupport {
             }
          }
 
-         return SimpleString.toSimpleString(queue);
+         return SimpleString.of(queue);
       }
    }
 }
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/DefaultSenderController.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/DefaultSenderController.java
index 21708b4e1c..e9d730f852 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/DefaultSenderController.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/DefaultSenderController.java
@@ -202,7 +202,7 @@ public class DefaultSenderController implements SenderController {
       } else if (source.getDynamic()) {
          // if dynamic we have to create the node (queue) and set the address on the target, the
          // node is temporary and  will be deleted on closing of the session
-         queue = SimpleString.toSimpleString(java.util.UUID.randomUUID().toString());
+         queue = SimpleString.of(java.util.UUID.randomUUID().toString());
          tempQueueName = queue;
          try {
             sessionSPI.createTemporaryQueue(queue, RoutingType.ANYCAST);
@@ -226,11 +226,11 @@ public class DefaultSenderController implements SenderController {
          //find out if we have an address made up of the address and queue name, if yes then set queue name
          if (CompositeAddress.isFullyQualified(sourceAddress)) {
             isFQQN = true;
-            addressToUse = SimpleString.toSimpleString(CompositeAddress.extractAddressName(sourceAddress));
-            queueNameToUse = SimpleString.toSimpleString(CompositeAddress.extractQueueName(sourceAddress));
+            addressToUse = SimpleString.of(CompositeAddress.extractAddressName(sourceAddress));
+            queueNameToUse = SimpleString.of(CompositeAddress.extractQueueName(sourceAddress));
          } else {
             isFQQN = false;
-            addressToUse = SimpleString.toSimpleString(sourceAddress);
+            addressToUse = SimpleString.of(sourceAddress);
          }
 
          //check to see if the client has defined how we act
@@ -312,7 +312,7 @@ public class DefaultSenderController implements SenderController {
                supportedFilters.put(filter.getKey(), filter.getValue());
             }
 
-            SimpleString simpleStringSelector = SimpleString.toSimpleString(selector);
+            SimpleString simpleStringSelector = SimpleString.of(selector);
             queue = getMatchingQueue(queueNameToUse, addressToUse, RoutingType.MULTICAST, simpleStringSelector, isFQQN);
 
             //if the address specifies a broker configured queue then we always use this, treat it as a queue
@@ -365,7 +365,7 @@ public class DefaultSenderController implements SenderController {
                      sessionSPI.createSharedVolatileQueue(addressToUse, RoutingType.MULTICAST, queue, simpleStringSelector);
                   }
                } else {
-                  queue = SimpleString.toSimpleString(java.util.UUID.randomUUID().toString());
+                  queue = SimpleString.of(java.util.UUID.randomUUID().toString());
                   tempQueueName = queue;
                   try {
                      sessionSPI.createTemporaryQueue(addressToUse, queue, RoutingType.MULTICAST, simpleStringSelector);
@@ -452,7 +452,7 @@ public class DefaultSenderController implements SenderController {
       String sourceAddress = getSourceAddress(source);
 
       if (source != null && sourceAddress != null && multicast) {
-         SimpleString queueName = SimpleString.toSimpleString(sourceAddress);
+         SimpleString queueName = SimpleString.of(sourceAddress);
          QueueQueryResult result = sessionSPI.queueQuery(queueName, routingTypeToUse, false);
          if (result.isExists() && source.getDynamic()) {
             sessionSPI.deleteQueue(queueName);
@@ -474,7 +474,7 @@ public class DefaultSenderController implements SenderController {
          }
       } else if (source != null && source.getDynamic() && (source.getExpiryPolicy() == TerminusExpiryPolicy.LINK_DETACH || source.getExpiryPolicy() == TerminusExpiryPolicy.SESSION_END)) {
          try {
-            sessionSPI.removeTemporaryQueue(SimpleString.toSimpleString(sourceAddress));
+            sessionSPI.removeTemporaryQueue(SimpleString.of(sourceAddress));
          } catch (Exception e) {
             // Ignore on close, its temporary anyway and will be removed later
          }
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java
index f8edea304f..77eff0bff6 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java
@@ -93,7 +93,7 @@ public class ProtonServerReceiverContext extends ProtonAbstractReceiver {
          if (target.getDynamic()) {
             // if dynamic we have to create the node (queue) and set the address on the target, the node is temporary and
             // will be deleted on closing of the session
-            address = SimpleString.toSimpleString(sessionSPI.tempQueueName());
+            address = SimpleString.of(sessionSPI.tempQueueName());
             defRoutingType = getRoutingType(target.getCapabilities(), address);
 
             try {
@@ -112,7 +112,7 @@ public class ProtonServerReceiverContext extends ProtonAbstractReceiver {
             // matched on receive of the message.
             String targetAddress = target.getAddress();
             if (targetAddress != null && !targetAddress.isEmpty()) {
-               address = SimpleString.toSimpleString(targetAddress);
+               address = SimpleString.of(targetAddress);
             }
 
             if (address != null) {
@@ -289,7 +289,7 @@ public class ProtonServerReceiverContext extends ProtonAbstractReceiver {
       org.apache.qpid.proton.amqp.messaging.Target target = (org.apache.qpid.proton.amqp.messaging.Target) receiver.getRemoteTarget();
       if (target != null && target.getDynamic() && (target.getExpiryPolicy() == TerminusExpiryPolicy.LINK_DETACH || target.getExpiryPolicy() == TerminusExpiryPolicy.SESSION_END)) {
          try {
-            sessionSPI.removeTemporaryQueue(SimpleString.toSimpleString(target.getAddress()));
+            sessionSPI.removeTemporaryQueue(SimpleString.of(target.getAddress()));
          } catch (Exception e) {
             //ignore on close, its temp anyway and will be removed later
          }
diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessageTest.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessageTest.java
index aceae67b25..8ed39125c2 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessageTest.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessageTest.java
@@ -298,7 +298,7 @@ public class AMQPMessageTest {
       assertTrue(encodedProtonMessage.length < decoded.getMemoryEstimate());
       assertEquals(estimate, decoded.getMemoryEstimate());
 
-      decoded.putStringProperty(new SimpleString("newProperty"), "newValue");
+      decoded.putStringProperty(SimpleString.of("newProperty"), "newValue");
       decoded.reencode();
 
       assertNotEquals(estimate, decoded.getMemoryEstimate());
@@ -424,7 +424,7 @@ public class AMQPMessageTest {
 
    @Test
    public void testSetLastValueFromMessageWithNone() {
-      SimpleString lastValue = new SimpleString("last-address");
+      SimpleString lastValue = SimpleString.of("last-address");
 
       MessageImpl protonMessage = (MessageImpl) Message.Factory.create();
       AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage);
@@ -556,7 +556,7 @@ public class AMQPMessageTest {
    @Test
    public void testSetAddressFromMessage() {
       final String ADDRESS = "myQueue";
-      final SimpleString NEW_ADDRESS = new SimpleString("myQueue-1");
+      final SimpleString NEW_ADDRESS = SimpleString.of("myQueue-1");
 
       MessageImpl protonMessage = (MessageImpl) Message.Factory.create();
       protonMessage.setAddress(ADDRESS);
@@ -571,7 +571,7 @@ public class AMQPMessageTest {
    @Test
    public void testSetAddressFromMessageUpdatesPropertiesOnReencode() {
       final String ADDRESS = "myQueue";
-      final SimpleString NEW_ADDRESS = new SimpleString("myQueue-1");
+      final SimpleString NEW_ADDRESS = SimpleString.of("myQueue-1");
 
       MessageImpl protonMessage = (MessageImpl) Message.Factory.create();
       protonMessage.setAddress(ADDRESS);
@@ -857,7 +857,7 @@ public class AMQPMessageTest {
       AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage);
       assertNull(decoded.getReplyTo());
 
-      decoded.setReplyTo(new SimpleString(REPLY_TO));
+      decoded.setReplyTo(SimpleString.of(REPLY_TO));
       decoded.reencode();
 
       assertEquals(REPLY_TO, decoded.getReplyTo().toString());
@@ -872,7 +872,7 @@ public class AMQPMessageTest {
       AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage);
       assertNull(decoded.getReplyTo());
 
-      decoded.setReplyTo(new SimpleString(REPLY_TO));
+      decoded.setReplyTo(SimpleString.of(REPLY_TO));
       decoded.reencode();
 
       assertEquals(REPLY_TO, decoded.getReplyTo().toString());
@@ -1374,8 +1374,8 @@ public class AMQPMessageTest {
    public void testGetAnnotation() {
       AMQPStandardMessage message = new AMQPStandardMessage(0, encodedProtonMessage, null);
 
-      Object result = message.getAnnotation(new SimpleString(TEST_MESSAGE_ANNOTATION_KEY));
-      String stringResult = message.getAnnotationString(new SimpleString(TEST_MESSAGE_ANNOTATION_KEY));
+      Object result = message.getAnnotation(SimpleString.of(TEST_MESSAGE_ANNOTATION_KEY));
+      String stringResult = message.getAnnotationString(SimpleString.of(TEST_MESSAGE_ANNOTATION_KEY));
 
       assertEquals(result, stringResult);
    }
@@ -1384,9 +1384,9 @@ public class AMQPMessageTest {
    public void testRemoveAnnotation() {
       AMQPStandardMessage message = new AMQPStandardMessage(0, encodedProtonMessage, null);
 
-      assertNotNull(message.getAnnotation(new SimpleString(TEST_MESSAGE_ANNOTATION_KEY)));
-      message.removeAnnotation(new SimpleString(TEST_MESSAGE_ANNOTATION_KEY));
-      assertNull(message.getAnnotation(new SimpleString(TEST_MESSAGE_ANNOTATION_KEY)));
+      assertNotNull(message.getAnnotation(SimpleString.of(TEST_MESSAGE_ANNOTATION_KEY)));
+      message.removeAnnotation(SimpleString.of(TEST_MESSAGE_ANNOTATION_KEY));
+      assertNull(message.getAnnotation(SimpleString.of(TEST_MESSAGE_ANNOTATION_KEY)));
 
       message.reencode();
 
@@ -1397,7 +1397,7 @@ public class AMQPMessageTest {
    public void testSetAnnotation() {
       AMQPStandardMessage message = new AMQPStandardMessage(0, encodedProtonMessage, null);
 
-      final SimpleString newAnnotation = new SimpleString("testSetAnnotation");
+      final SimpleString newAnnotation = SimpleString.of("testSetAnnotation");
       final String newValue = "newValue";
 
       message.setAnnotation(newAnnotation, newValue);
@@ -1417,7 +1417,7 @@ public class AMQPMessageTest {
 
       assertProtonMessageEquals(protonMessage, message.getProtonMessage());
 
-      message.setAnnotation(new SimpleString("testGetProtonMessage"), "1");
+      message.setAnnotation(SimpleString.of("testGetProtonMessage"), "1");
       message.messageChanged();
 
       assertProtonMessageNotEquals(protonMessage, message.getProtonMessage());
@@ -1566,7 +1566,7 @@ public class AMQPMessageTest {
 
    @Test
    public void testMessageAnnotationsReencodeAfterUpdate() {
-      final SimpleString TEST_ANNOTATION = new SimpleString("testMessageAnnotationsReencodeAfterUpdate");
+      final SimpleString TEST_ANNOTATION = SimpleString.of("testMessageAnnotationsReencodeAfterUpdate");
 
       MessageImpl protonMessage = createProtonMessage();
       AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage);
@@ -1588,7 +1588,7 @@ public class AMQPMessageTest {
       MessageImpl protonMessage = (MessageImpl) Message.Factory.create();
 
       byte[] value = RandomUtil.randomBytes();
-      SimpleString name = SimpleString.toSimpleString("myProperty");
+      SimpleString name = SimpleString.of("myProperty");
 
       AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage);
 
@@ -1608,7 +1608,7 @@ public class AMQPMessageTest {
       MessageImpl protonMessage = (MessageImpl) Message.Factory.create();
 
       byte[] original = RandomUtil.randomBytes();
-      SimpleString name = SimpleString.toSimpleString("myProperty");
+      SimpleString name = SimpleString.of("myProperty");
       AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage);
       decoded.setAddress("someAddress");
       decoded.setMessageID(33);
@@ -1780,9 +1780,9 @@ public class AMQPMessageTest {
       assertEquals(TEST_STRING_BODY, ((AmqpValue) message.getBody()).getValue());
 
       // Update the message
-      message.setAnnotation(new SimpleString("x-opt-extra-1"), "test-1");
-      message.setAnnotation(new SimpleString("x-opt-extra-2"), "test-2");
-      message.setAnnotation(new SimpleString("x-opt-extra-3"), "test-3");
+      message.setAnnotation(SimpleString.of("x-opt-extra-1"), "test-1");
+      message.setAnnotation(SimpleString.of("x-opt-extra-2"), "test-2");
+      message.setAnnotation(SimpleString.of("x-opt-extra-3"), "test-3");
 
       // Reencode and then decode the message again
       message.reencode();
@@ -2413,8 +2413,8 @@ public class AMQPMessageTest {
       MessageImpl protonMessage = (MessageImpl) Message.Factory.create();
 
       TypedProperties extraProperties = new TypedProperties();
-      extraProperties.putProperty(new SimpleString(TEST_EXTRA_PROPERTY_KEY1), TEST_EXTRA_PROPERTY_VALUE1);
-      extraProperties.putProperty(new SimpleString(TEST_EXTRA_PROPERTY_KEY2), TEST_EXTRA_PROPERTY_VALUE2);
+      extraProperties.putProperty(SimpleString.of(TEST_EXTRA_PROPERTY_KEY1), TEST_EXTRA_PROPERTY_VALUE1);
+      extraProperties.putProperty(SimpleString.of(TEST_EXTRA_PROPERTY_KEY2), TEST_EXTRA_PROPERTY_VALUE2);
 
       AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage, extraProperties);
 
@@ -2543,8 +2543,8 @@ public class AMQPMessageTest {
       Message protonMessage = Message.Factory.create();
       AMQPStandardMessage decoded = encodeAndDecodeMessage(protonMessage);
       TypedProperties props = decoded.createExtraProperties();
-      props.putSimpleStringProperty(new SimpleString("firstString"), new SimpleString("firstValue"));
-      props.putLongProperty(new SimpleString("secondLong"), 1234567);
+      props.putSimpleStringProperty(SimpleString.of("firstString"), SimpleString.of("firstValue"));
+      props.putLongProperty(SimpleString.of("secondLong"), 1234567);
 
       // same as toPropertyMap(false,5)
       Map<String, Object> map = decoded.toPropertyMap(-1);
diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPPersisterTest.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPPersisterTest.java
index c2af7859ef..4563e6bf4e 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPPersisterTest.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPPersisterTest.java
@@ -92,7 +92,7 @@ public class AMQPPersisterTest {
    @Test
    public void testEncodeSize() throws Exception {
 
-      Message message = createMessage(SimpleString.toSimpleString("Test"), 1, new byte[10]);
+      Message message = createMessage(SimpleString.of("Test"), 1, new byte[10]);
 
       MessagePersister persister = AMQPMessagePersisterV3.getInstance();
 
diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallbackTest.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallbackTest.java
index 439fe488da..53e351d7ae 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallbackTest.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallbackTest.java
@@ -151,7 +151,7 @@ public class AMQPSessionCallbackTest {
       // Credit is above threshold
       Mockito.when(receiver.getCredit()).thenReturn(AMQP_LOW_CREDITS_DEFAULT + 1);
 
-      session.flow(new SimpleString("test"), ProtonServerReceiverContext.createCreditRunnable(AMQP_CREDITS_DEFAULT, AMQP_LOW_CREDITS_DEFAULT, receiver, connection));
+      session.flow(SimpleString.of("test"), ProtonServerReceiverContext.createCreditRunnable(AMQP_CREDITS_DEFAULT, AMQP_LOW_CREDITS_DEFAULT, receiver, connection));
 
       // Run the credit refill code.
       Mockito.verify(pagingStore).checkMemory(argument.capture(), Mockito.isA(Consumer.class));
@@ -182,7 +182,7 @@ public class AMQPSessionCallbackTest {
       // Credit is at threshold
       Mockito.when(receiver.getCredit()).thenReturn(AMQP_LOW_CREDITS_DEFAULT);
 
-      session.flow(new SimpleString("test"), ProtonServerReceiverContext.createCreditRunnable(AMQP_CREDITS_DEFAULT, AMQP_LOW_CREDITS_DEFAULT, receiver, connection));
+      session.flow(SimpleString.of("test"), ProtonServerReceiverContext.createCreditRunnable(AMQP_CREDITS_DEFAULT, AMQP_LOW_CREDITS_DEFAULT, receiver, connection));
 
       // Run the credit refill code.
       Mockito.verify(pagingStore).checkMemory(argument.capture(), Mockito.isA(Consumer.class));
@@ -243,7 +243,7 @@ public class AMQPSessionCallbackTest {
       // Credit is at threshold
       Mockito.when(receiver.getCredit()).thenReturn(AMQP_LOW_CREDITS_DEFAULT);
 
-      session.flow(new SimpleString("test"), ProtonServerReceiverContext.createCreditRunnable(1, AMQP_LOW_CREDITS_DEFAULT, receiver, connection));
+      session.flow(SimpleString.of("test"), ProtonServerReceiverContext.createCreditRunnable(1, AMQP_LOW_CREDITS_DEFAULT, receiver, connection));
 
       // Run the credit refill code.
       Mockito.verify(pagingStore).checkMemory(argument.capture(), Mockito.isA(Consumer.class));
diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationPolicySupportTest.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationPolicySupportTest.java
index e4a09e6b02..2215305823 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationPolicySupportTest.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationPolicySupportTest.java
@@ -147,7 +147,7 @@ public class AMQPFederationPolicySupportTest {
 
       final AMQPMessage message = AMQPFederationPolicySupport.encodeQueuePolicyControlMessage(policy);
 
-      assertEquals(ADD_QUEUE_POLICY, message.getAnnotation(SimpleString.toSimpleString(OPERATION_TYPE.toString())));
+      assertEquals(ADD_QUEUE_POLICY, message.getAnnotation(SimpleString.of(OPERATION_TYPE.toString())));
 
       assertNotNull(message.getBody());
       assertTrue(message.getBody() instanceof AmqpValue);
@@ -251,7 +251,7 @@ public class AMQPFederationPolicySupportTest {
 
       final AMQPMessage message = AMQPFederationPolicySupport.encodeAddressPolicyControlMessage(policy);
 
-      assertEquals(ADD_ADDRESS_POLICY, message.getAnnotation(SimpleString.toSimpleString(OPERATION_TYPE.toString())));
+      assertEquals(ADD_ADDRESS_POLICY, message.getAnnotation(SimpleString.of(OPERATION_TYPE.toString())));
 
       assertNotNull(message.getBody());
       assertTrue(message.getBody() instanceof AmqpValue);
diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/MirrorAddressFilterTest.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/MirrorAddressFilterTest.java
index cfb2560207..04464c4d8c 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/MirrorAddressFilterTest.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/MirrorAddressFilterTest.java
@@ -26,13 +26,13 @@ public class MirrorAddressFilterTest {
 
    @Test
    public void testAddressFilter() {
-      assertTrue(new MirrorAddressFilter("").match(new SimpleString("any")));
-      assertTrue(new MirrorAddressFilter("test").match(new SimpleString("test123")));
-      assertTrue(new MirrorAddressFilter("a,b").match(new SimpleString("b")));
-      assertTrue(new MirrorAddressFilter("!c").match(new SimpleString("a")));
-      assertTrue(new MirrorAddressFilter("!a,!").match(new SimpleString("b123")));
-      assertFalse(new MirrorAddressFilter("a,b,!ab").match(new SimpleString("ab")));
-      assertFalse(new MirrorAddressFilter("!a,!b").match(new SimpleString("b123")));
-      assertFalse(new MirrorAddressFilter("a,").match(new SimpleString("b")));
+      assertTrue(new MirrorAddressFilter("").match(SimpleString.of("any")));
+      assertTrue(new MirrorAddressFilter("test").match(SimpleString.of("test123")));
+      assertTrue(new MirrorAddressFilter("a,b").match(SimpleString.of("b")));
+      assertTrue(new MirrorAddressFilter("!c").match(SimpleString.of("a")));
+      assertTrue(new MirrorAddressFilter("!a,!").match(SimpleString.of("b123")));
+      assertFalse(new MirrorAddressFilter("a,b,!ab").match(SimpleString.of("ab")));
+      assertFalse(new MirrorAddressFilter("!a,!b").match(SimpleString.of("b123")));
+      assertFalse(new MirrorAddressFilter("a,").match(SimpleString.of("b")));
    }
 }
diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/converter/TestConversions.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/converter/TestConversions.java
index a081b3e69b..d5edada504 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/converter/TestConversions.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/converter/TestConversions.java
@@ -144,9 +144,9 @@ public class TestConversions {
 
    private TypedProperties createTypedPropertiesMap() {
       TypedProperties typedProperties = new TypedProperties();
-      typedProperties.putBooleanProperty(new SimpleString("true"), Boolean.TRUE);
-      typedProperties.putBooleanProperty(new SimpleString("false"), Boolean.FALSE);
-      typedProperties.putSimpleStringProperty(new SimpleString("foo"), new SimpleString("bar"));
+      typedProperties.putBooleanProperty(SimpleString.of("true"), Boolean.TRUE);
+      typedProperties.putBooleanProperty(SimpleString.of("false"), Boolean.FALSE);
+      typedProperties.putSimpleStringProperty(SimpleString.of("foo"), SimpleString.of("bar"));
       return typedProperties;
    }
 
@@ -238,7 +238,7 @@ public class TestConversions {
 
       AMQPMessage encodedMessage = encodeAndCreateAMQPMessage(message);
       TypedProperties extraProperties = createTypedPropertiesMap();
-      extraProperties.putBytesProperty(new SimpleString("bytesProp"), "value".getBytes());
+      extraProperties.putBytesProperty(SimpleString.of("bytesProp"), "value".getBytes());
       encodedMessage.setExtraProperties(extraProperties);
 
       ICoreMessage serverMessage = encodedMessage.toCore();
@@ -419,7 +419,7 @@ public class TestConversions {
 
       AMQPMessage encodedMessage = encodeAndCreateAMQPMessage(message);
       TypedProperties extraProperties = new TypedProperties();
-      encodedMessage.setAddress(SimpleString.toSimpleString("xxxx.v1.queue"));
+      encodedMessage.setAddress(SimpleString.of("xxxx.v1.queue"));
 
       for (int i = 0; i < 10; i++) {
          if (logger.isDebugEnabled()) {
@@ -453,7 +453,7 @@ public class TestConversions {
 
       AMQPMessage encodedMessage = encodeAndCreateAMQPMessage(message);
       TypedProperties extraProperties = new TypedProperties();
-      encodedMessage.setAddress(SimpleString.toSimpleString("xxxx.v1.queue"));
+      encodedMessage.setAddress(SimpleString.of("xxxx.v1.queue"));
 
       for (int i = 0; i < 100; i++) {
          encodedMessage.putStringProperty("another" + i, "value" + i);
@@ -497,14 +497,14 @@ public class TestConversions {
 
       AMQPMessage encodedMessage = encodeAndCreateAMQPMessage(message);
       TypedProperties extraProperties = new TypedProperties();
-      encodedMessage.setAddress(SimpleString.toSimpleString("xxxx.v1.queue"));
+      encodedMessage.setAddress(SimpleString.of("xxxx.v1.queue"));
 
       for (int i = 0; i < 100; i++) {
          encodedMessage.setMessageID(333L);
          if (i % 3 == 0) {
-            encodedMessage.referenceOriginalMessage(encodedMessage, SimpleString.toSimpleString("SOME-OTHER-QUEUE-DOES-NOT-MATTER-WHAT"));
+            encodedMessage.referenceOriginalMessage(encodedMessage, SimpleString.of("SOME-OTHER-QUEUE-DOES-NOT-MATTER-WHAT"));
          } else {
-            encodedMessage.referenceOriginalMessage(encodedMessage, SimpleString.toSimpleString("XXX"));
+            encodedMessage.referenceOriginalMessage(encodedMessage, SimpleString.of("XXX"));
          }
          encodedMessage.putStringProperty("another " + i, "value " + i);
          encodedMessage.messageChanged();
diff --git a/artemis-protocols/artemis-hornetq-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/hornetq/PropertiesConversionTest.java b/artemis-protocols/artemis-hornetq-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/hornetq/PropertiesConversionTest.java
index 949ecb6401..6f1ca384bc 100644
--- a/artemis-protocols/artemis-hornetq-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/hornetq/PropertiesConversionTest.java
+++ b/artemis-protocols/artemis-hornetq-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/hornetq/PropertiesConversionTest.java
@@ -58,11 +58,11 @@ public class PropertiesConversionTest {
    public void testParallelHornetQConversions() throws Throwable {
       CoreMessage coreMessage = new CoreMessage(1, 1024);
       for (int i = 0; i < 10; i++) {
-         coreMessage.putBooleanProperty(SimpleString.toSimpleString("key1"), true);
+         coreMessage.putBooleanProperty(SimpleString.of("key1"), true);
       }
-      coreMessage.putStringProperty(new SimpleString("_HQ_ORIG_ADDRESS"), SimpleString.toSimpleString("hqOne"));
-      coreMessage.putStringProperty(new SimpleString("_AMQ_ORIG_QUEUE"), SimpleString.toSimpleString("amqOne"));
-      coreMessage.putStringProperty(new SimpleString("_AMQ_ORIG_MESSAGE_ID"), SimpleString.toSimpleString("asdfkhaksdjfhaskfdjhas"));
+      coreMessage.putStringProperty(SimpleString.of("_HQ_ORIG_ADDRESS"), SimpleString.of("hqOne"));
+      coreMessage.putStringProperty(SimpleString.of("_AMQ_ORIG_QUEUE"), SimpleString.of("amqOne"));
+      coreMessage.putStringProperty(SimpleString.of("_AMQ_ORIG_MESSAGE_ID"), SimpleString.of("asdfkhaksdjfhaskfdjhas"));
 
       int threads = 100;
       int conversions = 100;
@@ -134,11 +134,11 @@ public class PropertiesConversionTest {
    public void testMultiThreadChanges() throws Throwable {
       CoreMessage coreMessage = new CoreMessage(1, 1024);
       for (int i = 0; i < 10; i++) {
-         coreMessage.putBooleanProperty(SimpleString.toSimpleString("key1"), true);
+         coreMessage.putBooleanProperty(SimpleString.of("key1"), true);
       }
-      coreMessage.putStringProperty(new SimpleString("_HQ_ORIG_ADDRESS"), SimpleString.toSimpleString("hqOne"));
-      coreMessage.putStringProperty(new SimpleString("_AMQ_ORIG_QUEUE"), SimpleString.toSimpleString("amqOne"));
-      coreMessage.putStringProperty(new SimpleString("_AMQ_ORIG_MESSAGE_ID"), SimpleString.toSimpleString("asdfkhaksdjfhaskfdjhas"));
+      coreMessage.putStringProperty(SimpleString.of("_HQ_ORIG_ADDRESS"), SimpleString.of("hqOne"));
+      coreMessage.putStringProperty(SimpleString.of("_AMQ_ORIG_QUEUE"), SimpleString.of("amqOne"));
+      coreMessage.putStringProperty(SimpleString.of("_AMQ_ORIG_MESSAGE_ID"), SimpleString.of("asdfkhaksdjfhaskfdjhas"));
 
       int threads = 100;
       int conversions = 100;
diff --git a/artemis-protocols/artemis-hqclient-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/hornetq/HQFilterConversionInterceptor.java b/artemis-protocols/artemis-hqclient-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/hornetq/HQFilterConversionInterceptor.java
index 761aca678f..2654465769 100644
--- a/artemis-protocols/artemis-hqclient-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/hornetq/HQFilterConversionInterceptor.java
+++ b/artemis-protocols/artemis-hqclient-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/hornetq/HQFilterConversionInterceptor.java
@@ -56,7 +56,7 @@ public class HQFilterConversionInterceptor implements Interceptor {
       if (filterString == null) {
          return null;
       }
-      return SimpleString.toSimpleString(convertHQToActiveMQFilterString(filterString.toString()));
+      return SimpleString.of(convertHQToActiveMQFilterString(filterString.toString()));
    }
 
 
diff --git a/artemis-protocols/artemis-hqclient-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/hornetq/util/HQPropertiesConverter.java b/artemis-protocols/artemis-hqclient-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/hornetq/util/HQPropertiesConverter.java
index cfb8d2f888..14dd751577 100644
--- a/artemis-protocols/artemis-hqclient-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/hornetq/util/HQPropertiesConverter.java
+++ b/artemis-protocols/artemis-hqclient-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/hornetq/util/HQPropertiesConverter.java
@@ -36,16 +36,16 @@ public class HQPropertiesConverter {
       Map<SimpleString, SimpleString> d = new HashMap<>();
 
       // Add entries for outgoing messages
-      d.put(new SimpleString("_HQ_ACTUAL_EXPIRY"), new SimpleString("_AMQ_ACTUAL_EXPIRY"));
-      d.put(new SimpleString("_HQ_ORIG_ADDRESS"), new SimpleString("_AMQ_ORIG_ADDRESS"));
-      d.put(new SimpleString("_HQ_ORIG_QUEUE"), new SimpleString("_AMQ_ORIG_QUEUE"));
-      d.put(new SimpleString("_HQ_ORIG_MESSAGE_ID"), new SimpleString("_AMQ_ORIG_MESSAGE_ID"));
-      d.put(new SimpleString("_HQ_GROUP_ID"), new SimpleString("_AMQ_GROUP_ID"));
-      d.put(new SimpleString("_HQ_LARGE_COMPRESSED"), new SimpleString("_AMQ_LARGE_COMPRESSED"));
-      d.put(new SimpleString("_HQ_LARGE_SIZE"), new SimpleString("_AMQ_LARGE_SIZE"));
-      d.put(new SimpleString("_HQ_SCHED_DELIVERY"), new SimpleString("_AMQ_SCHED_DELIVERY"));
-      d.put(new SimpleString("_HQ_DUPL_ID"), new SimpleString("_AMQ_DUPL_ID"));
-      d.put(new SimpleString("_HQ_LVQ_NAME"), new SimpleString("_AMQ_LVQ_NAME"));
+      d.put(SimpleString.of("_HQ_ACTUAL_EXPIRY"), SimpleString.of("_AMQ_ACTUAL_EXPIRY"));
+      d.put(SimpleString.of("_HQ_ORIG_ADDRESS"), SimpleString.of("_AMQ_ORIG_ADDRESS"));
+      d.put(SimpleString.of("_HQ_ORIG_QUEUE"), SimpleString.of("_AMQ_ORIG_QUEUE"));
+      d.put(SimpleString.of("_HQ_ORIG_MESSAGE_ID"), SimpleString.of("_AMQ_ORIG_MESSAGE_ID"));
+      d.put(SimpleString.of("_HQ_GROUP_ID"), SimpleString.of("_AMQ_GROUP_ID"));
+      d.put(SimpleString.of("_HQ_LARGE_COMPRESSED"), SimpleString.of("_AMQ_LARGE_COMPRESSED"));
+      d.put(SimpleString.of("_HQ_LARGE_SIZE"), SimpleString.of("_AMQ_LARGE_SIZE"));
+      d.put(SimpleString.of("_HQ_SCHED_DELIVERY"), SimpleString.of("_AMQ_SCHED_DELIVERY"));
+      d.put(SimpleString.of("_HQ_DUPL_ID"), SimpleString.of("_AMQ_DUPL_ID"));
+      d.put(SimpleString.of("_HQ_LVQ_NAME"), SimpleString.of("_AMQ_LVQ_NAME"));
 
       hqAmqDictionary = Collections.unmodifiableMap(d);
 
diff --git a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java
index 386235928a..5a06b4dd4d 100644
--- a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java
+++ b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java
@@ -130,7 +130,7 @@ public class MQTTPublishManager {
    }
 
    private SimpleString createManagementAddress() {
-      return new SimpleString(MQTTUtil.MANAGEMENT_QUEUE_PREFIX + session.getState().getClientId());
+      return SimpleString.of(MQTTUtil.MANAGEMENT_QUEUE_PREFIX + session.getState().getClientId());
    }
 
    private void createManagementQueue() throws Exception {
@@ -217,7 +217,7 @@ public class MQTTPublishManager {
             }
          }
          String coreAddress = MQTTUtil.getCoreAddressFromMqttTopic(topic, session.getWildcardConfiguration());
-         SimpleString address = SimpleString.toSimpleString(coreAddress, session.getCoreMessageObjectPools().getAddressStringSimpleStringPool());
+         SimpleString address = SimpleString.of(coreAddress, session.getCoreMessageObjectPools().getAddressStringSimpleStringPool());
          Message serverMessage = MQTTUtil.createServerMessageFromByteBuf(session, address, message);
          int qos = message.fixedHeader().qosLevel().value();
          if (qos > 0) {
diff --git a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTRetainMessageManager.java b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTRetainMessageManager.java
index b04f09f784..4a073eec7c 100644
--- a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTRetainMessageManager.java
+++ b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTRetainMessageManager.java
@@ -66,7 +66,7 @@ public class MQTTRetainMessageManager {
    void addRetainedMessagesToQueue(Queue queue, String address) throws Exception {
       // The address filter that matches all retained message queues.
       String retainAddress = MQTTUtil.getCoreRetainAddressFromMqttTopic(address, session.getWildcardConfiguration());
-      BindingQueryResult bindingQueryResult = session.getServerSession().executeBindingQuery(new SimpleString(retainAddress));
+      BindingQueryResult bindingQueryResult = session.getServerSession().executeBindingQuery(SimpleString.of(retainAddress));
 
       // Iterate over all matching retain queues and add the queue
       Transaction tx = session.getServerSession().newTransaction();
diff --git a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTSubscriptionManager.java b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTSubscriptionManager.java
index 377d19c9d1..6217b14480 100644
--- a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTSubscriptionManager.java
+++ b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTSubscriptionManager.java
@@ -85,14 +85,14 @@ public class MQTTSubscriptionManager {
 
       StringBuilder messageFilter = new StringBuilder(baseFilter);
       messageFilter.append(")");
-      this.messageFilter = new SimpleString(messageFilter.toString());
+      this.messageFilter = SimpleString.of(messageFilter.toString());
 
       // [MQTT-4.7.2-1]
       StringBuilder messageFilterNoDollar = new StringBuilder(baseFilter);
       messageFilterNoDollar.append(" OR ");
       messageFilterNoDollar.append("(").append(FilterConstants.ACTIVEMQ_ADDRESS).append(" LIKE '").append(DOLLAR).append("%')");
       messageFilterNoDollar.append(")");
-      this.messageFilterNoDollar = new SimpleString(messageFilterNoDollar.toString());
+      this.messageFilterNoDollar = SimpleString.of(messageFilterNoDollar.toString());
    }
 
    synchronized void start() throws Exception {
@@ -156,7 +156,7 @@ public class MQTTSubscriptionManager {
 
       // the subscription queue does not exist so we need to create it
       if (q == null) {
-         SimpleString sAddress = SimpleString.toSimpleString(coreAddress);
+         SimpleString sAddress = SimpleString.of(coreAddress);
 
          // only check if we can auto create queues if it's FQQN
          BindingQueryResult bindingQueryResult = session.getServerSession().executeBindingQuery(sAddress);
@@ -227,7 +227,7 @@ public class MQTTSubscriptionManager {
       long cid = existingConsumerId != null ? existingConsumerId : session.getServer().getStorageManager().generateID();
 
       // for noLocal support we use the MQTT *client id* rather than the connection ID, but we still use the existing property name
-      ServerConsumer consumer = session.getServerSession().createConsumer(cid, queue.getName(), noLocal ? SimpleString.toSimpleString(CONNECTION_ID_PROPERTY_NAME_STRING + " <> '" + session.getState().getClientId() + "'") : null, false, false, -1);
+      ServerConsumer consumer = session.getServerSession().createConsumer(cid, queue.getName(), noLocal ? SimpleString.of(CONNECTION_ID_PROPERTY_NAME_STRING + " <> '" + session.getState().getClientId() + "'") : null, false, false, -1);
 
       ServerConsumer existingConsumer = consumers.put(topicFilter, consumer);
       if (existingConsumer != null) {
@@ -262,7 +262,7 @@ public class MQTTSubscriptionManager {
                   consumerQoSLevels.remove(removed.getID());
                }
 
-               SimpleString internalQueueName = SimpleString.toSimpleString(MQTTUtil.getCoreQueueFromMqttTopic(topics.get(i), state.getClientId(), session.getServer().getConfiguration().getWildcardConfiguration()));
+               SimpleString internalQueueName = SimpleString.of(MQTTUtil.getCoreQueueFromMqttTopic(topics.get(i), state.getClientId(), session.getServer().getConfiguration().getWildcardConfiguration()));
                Queue queue = session.getServer().locateQueue(internalQueueName);
                if (queue != null) {
                   if (queue.isConfigurationManaged()) {
diff --git a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTUtil.java b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTUtil.java
index 73bdd8d06a..8ca7f69672 100644
--- a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTUtil.java
+++ b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTUtil.java
@@ -92,29 +92,29 @@ public class MQTTUtil {
 
    public static final String MQTT_RETAIN_ADDRESS_PREFIX = DOLLAR + "sys.mqtt.retain.";
 
-   public static final SimpleString MQTT_QOS_LEVEL_KEY = SimpleString.toSimpleString("mqtt.qos.level");
+   public static final SimpleString MQTT_QOS_LEVEL_KEY = SimpleString.of("mqtt.qos.level");
 
-   public static final SimpleString MQTT_MESSAGE_ID_KEY = SimpleString.toSimpleString("mqtt.message.id");
+   public static final SimpleString MQTT_MESSAGE_ID_KEY = SimpleString.of("mqtt.message.id");
 
-   public static final SimpleString MQTT_MESSAGE_TYPE_KEY = SimpleString.toSimpleString("mqtt.message.type");
+   public static final SimpleString MQTT_MESSAGE_TYPE_KEY = SimpleString.of("mqtt.message.type");
 
-   public static final SimpleString MQTT_MESSAGE_RETAIN_KEY = SimpleString.toSimpleString("mqtt.message.retain");
+   public static final SimpleString MQTT_MESSAGE_RETAIN_KEY = SimpleString.of("mqtt.message.retain");
 
-   public static final SimpleString MQTT_MESSAGE_RETAIN_INITIAL_DISTRIBUTION_KEY = SimpleString.toSimpleString("mqtt.message.retain.initial.distribution");
+   public static final SimpleString MQTT_MESSAGE_RETAIN_INITIAL_DISTRIBUTION_KEY = SimpleString.of("mqtt.message.retain.initial.distribution");
 
-   public static final SimpleString MQTT_PAYLOAD_FORMAT_INDICATOR_KEY = SimpleString.toSimpleString("mqtt.payload.format.indicator");
+   public static final SimpleString MQTT_PAYLOAD_FORMAT_INDICATOR_KEY = SimpleString.of("mqtt.payload.format.indicator");
 
-   public static final SimpleString MQTT_RESPONSE_TOPIC_KEY = SimpleString.toSimpleString("mqtt.response.topic");
+   public static final SimpleString MQTT_RESPONSE_TOPIC_KEY = SimpleString.of("mqtt.response.topic");
 
-   public static final SimpleString MQTT_CORRELATION_DATA_KEY = SimpleString.toSimpleString("mqtt.correlation.data");
+   public static final SimpleString MQTT_CORRELATION_DATA_KEY = SimpleString.of("mqtt.correlation.data");
 
    public static final String MQTT_USER_PROPERTY_EXISTS_KEY = "mqtt.user.property.exists";
 
    public static final String MQTT_USER_PROPERTY_KEY_PREFIX = "mqtt.ordered.user.property.";
 
-   public static final SimpleString MQTT_USER_PROPERTY_KEY_PREFIX_SIMPLE = SimpleString.toSimpleString(MQTT_USER_PROPERTY_KEY_PREFIX);
+   public static final SimpleString MQTT_USER_PROPERTY_KEY_PREFIX_SIMPLE = SimpleString.of(MQTT_USER_PROPERTY_KEY_PREFIX);
 
-   public static final SimpleString MQTT_CONTENT_TYPE_KEY = SimpleString.toSimpleString("mqtt.content.type");
+   public static final SimpleString MQTT_CONTENT_TYPE_KEY = SimpleString.of("mqtt.content.type");
 
    public static final String MANAGEMENT_QUEUE_PREFIX = DOLLAR + "sys.mqtt.queue.qos2.";
 
diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java
index 4352b8f2ba..518b72f7df 100644
--- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java
+++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java
@@ -917,7 +917,7 @@ public class OpenWireConnection extends AbstractRemotingConnection implements Se
          return;
       }
 
-      SimpleString qName = SimpleString.toSimpleString(dest.getPhysicalName());
+      SimpleString qName = SimpleString.of(dest.getPhysicalName());
 
       AutoCreateResult autoCreateResult = internalSession.checkAutoCreate(new QueueConfiguration(qName)
                                                                              .setRoutingType(dest.isQueue() ? RoutingType.ANYCAST : RoutingType.MULTICAST)
@@ -1158,7 +1158,7 @@ public class OpenWireConnection extends AbstractRemotingConnection implements Se
             logger.warn("OpenWire client sending a queue remove towards {}", dest.getPhysicalName());
          }
          try {
-            server.destroyQueue(new SimpleString(dest.getPhysicalName()), getRemotingConnection());
+            server.destroyQueue(SimpleString.of(dest.getPhysicalName()), getRemotingConnection());
          } catch (ActiveMQNonExistentQueueException neq) {
             //this is ok, ActiveMQ 5 allows this and will actually do it quite often
             logger.debug("queue never existed");
diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConstants.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConstants.java
index e4e04017b2..ee995415b9 100644
--- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConstants.java
+++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConstants.java
@@ -19,22 +19,22 @@ package org.apache.activemq.artemis.core.protocol.openwire;
 import org.apache.activemq.artemis.api.core.SimpleString;
 
 public class OpenWireConstants {
-   private static final SimpleString AMQ_PREFIX = new SimpleString("__HDR_");
-   public static final SimpleString AMQ_MSG_DLQ_DELIVERY_FAILURE_CAUSE_PROPERTY = new SimpleString(AMQ_PREFIX + "dlqDeliveryFailureCause");
-   public static final SimpleString AMQ_MSG_ARRIVAL = new SimpleString(AMQ_PREFIX + "ARRIVAL");
-   public static final SimpleString AMQ_MSG_BROKER_IN_TIME = new SimpleString(AMQ_PREFIX + "BROKER_IN_TIME");
-   public static final SimpleString AMQ_MSG_BROKER_PATH = new SimpleString(AMQ_PREFIX + "BROKER_PATH");
-   public static final SimpleString AMQ_MSG_CLUSTER = new SimpleString(AMQ_PREFIX + "CLUSTER");
-   public static final SimpleString AMQ_MSG_COMMAND_ID = new SimpleString(AMQ_PREFIX + "COMMAND_ID");
-   public static final SimpleString AMQ_MSG_DATASTRUCTURE = new SimpleString(AMQ_PREFIX + "DATASTRUCTURE");
-   public static final SimpleString AMQ_MSG_MESSAGE_ID = new SimpleString(AMQ_PREFIX + "MESSAGE_ID");
-   public static final SimpleString AMQ_MSG_ORIG_DESTINATION =  new SimpleString(AMQ_PREFIX + "ORIG_DESTINATION");
-   public static final SimpleString AMQ_MSG_PRODUCER_ID =  new SimpleString(AMQ_PREFIX + "PRODUCER_ID");
-   public static final SimpleString AMQ_MSG_REPLY_TO = new SimpleString(AMQ_PREFIX + "REPLY_TO");
-   public static final SimpleString AMQ_MSG_USER_ID = new SimpleString(AMQ_PREFIX + "USER_ID");
-   public static final SimpleString AMQ_MSG_DROPPABLE =  new SimpleString(AMQ_PREFIX + "DROPPABLE");
-   public static final SimpleString AMQ_MSG_COMPRESSED = new SimpleString(AMQ_PREFIX + "COMPRESSED");
+   private static final SimpleString AMQ_PREFIX = SimpleString.of("__HDR_");
+   public static final SimpleString AMQ_MSG_DLQ_DELIVERY_FAILURE_CAUSE_PROPERTY = SimpleString.of(AMQ_PREFIX + "dlqDeliveryFailureCause");
+   public static final SimpleString AMQ_MSG_ARRIVAL = SimpleString.of(AMQ_PREFIX + "ARRIVAL");
+   public static final SimpleString AMQ_MSG_BROKER_IN_TIME = SimpleString.of(AMQ_PREFIX + "BROKER_IN_TIME");
+   public static final SimpleString AMQ_MSG_BROKER_PATH = SimpleString.of(AMQ_PREFIX + "BROKER_PATH");
+   public static final SimpleString AMQ_MSG_CLUSTER = SimpleString.of(AMQ_PREFIX + "CLUSTER");
+   public static final SimpleString AMQ_MSG_COMMAND_ID = SimpleString.of(AMQ_PREFIX + "COMMAND_ID");
+   public static final SimpleString AMQ_MSG_DATASTRUCTURE = SimpleString.of(AMQ_PREFIX + "DATASTRUCTURE");
+   public static final SimpleString AMQ_MSG_MESSAGE_ID = SimpleString.of(AMQ_PREFIX + "MESSAGE_ID");
+   public static final SimpleString AMQ_MSG_ORIG_DESTINATION =  SimpleString.of(AMQ_PREFIX + "ORIG_DESTINATION");
+   public static final SimpleString AMQ_MSG_PRODUCER_ID =  SimpleString.of(AMQ_PREFIX + "PRODUCER_ID");
+   public static final SimpleString AMQ_MSG_REPLY_TO = SimpleString.of(AMQ_PREFIX + "REPLY_TO");
+   public static final SimpleString AMQ_MSG_USER_ID = SimpleString.of(AMQ_PREFIX + "USER_ID");
+   public static final SimpleString AMQ_MSG_DROPPABLE =  SimpleString.of(AMQ_PREFIX + "DROPPABLE");
+   public static final SimpleString AMQ_MSG_COMPRESSED = SimpleString.of(AMQ_PREFIX + "COMPRESSED");
 
-   public static final SimpleString JMS_TYPE_PROPERTY = new SimpleString("JMSType");
-   public static final SimpleString JMS_CORRELATION_ID_PROPERTY = new SimpleString("JMSCorrelationID");
+   public static final SimpleString JMS_TYPE_PROPERTY = SimpleString.of("JMSType");
+   public static final SimpleString JMS_CORRELATION_ID_PROPERTY = SimpleString.of("JMSCorrelationID");
 }
diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessageConverter.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessageConverter.java
index 617f076af9..8dab2cdf7a 100644
--- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessageConverter.java
+++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessageConverter.java
@@ -101,7 +101,7 @@ public final class OpenWireMessageConverter {
 
       final String type = messageSend.getType();
       if (type != null) {
-         coreMessage.putStringProperty(OpenWireConstants.JMS_TYPE_PROPERTY, new SimpleString(type));
+         coreMessage.putStringProperty(OpenWireConstants.JMS_TYPE_PROPERTY, SimpleString.of(type));
       }
       coreMessage.setDurable(messageSend.isPersistent());
       coreMessage.setExpiration(messageSend.getExpiration());
@@ -176,14 +176,14 @@ public final class OpenWireMessageConverter {
 
       final MessageId messageId = messageSend.getMessageId();
       if (messageId != null) {
-         coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_MESSAGE_ID, SimpleString.toSimpleString(messageId.toString()));
+         coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_MESSAGE_ID, SimpleString.of(messageId.toString()));
       }
 
       coreMessage.setUserID(UUIDGenerator.getInstance().generateUUID());
 
       final ProducerId producerId = messageSend.getProducerId();
       if (producerId != null) {
-         coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_PRODUCER_ID, SimpleString.toSimpleString(producerId.toString()));
+         coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_PRODUCER_ID, SimpleString.of(producerId.toString()));
       }
 
       putMsgProperties(messageSend, coreMessage);
@@ -206,7 +206,7 @@ public final class OpenWireMessageConverter {
 
       final String userId = messageSend.getUserID();
       if (userId != null) {
-         coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_USER_ID, new SimpleString(userId));
+         coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_USER_ID, SimpleString.of(userId));
       }
       coreMessage.putBooleanProperty(OpenWireConstants.AMQ_MSG_DROPPABLE, messageSend.isDroppable());
 
@@ -235,7 +235,7 @@ public final class OpenWireMessageConverter {
       DataInputStream tdataIn = new DataInputStream(tis);
       String text = MarshallingSupport.readUTF8(tdataIn);
       tdataIn.close();
-      body.writeNullableSimpleString(new SimpleString(text));
+      body.writeNullableSimpleString(SimpleString.of(text));
    }
 
    private static void writeMapType(final ByteSequence contents,
@@ -409,7 +409,7 @@ public final class OpenWireMessageConverter {
             builder.append(','); //is this separator safe?
          }
       }
-      coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_BROKER_PATH, new SimpleString(builder.toString()));
+      coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_BROKER_PATH, SimpleString.of(builder.toString()));
    }
 
    private static void putMsgCluster(final BrokerId[] cluster, final CoreMessage coreMessage) {
@@ -420,7 +420,7 @@ public final class OpenWireMessageConverter {
             builder.append(','); //is this separator safe?
          }
       }
-      coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_CLUSTER, new SimpleString(builder.toString()));
+      coreMessage.putStringProperty(OpenWireConstants.AMQ_MSG_CLUSTER, SimpleString.of(builder.toString()));
    }
 
    private static void putMsgDataStructure(final DataStructure ds,
@@ -451,7 +451,7 @@ public final class OpenWireMessageConverter {
 
    private static void loadMapIntoProperties(TypedProperties props, Map<String, Object> map) {
       for (Entry<String, Object> entry : map.entrySet()) {
-         SimpleString key = new SimpleString(entry.getKey());
+         SimpleString key = SimpleString.of(entry.getKey());
          Object value = entry.getValue();
          if (value instanceof UTF8Buffer) {
             value = value.toString();
diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireProtocolManager.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireProtocolManager.java
index 1d0c541631..60fc05820c 100644
--- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireProtocolManager.java
+++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireProtocolManager.java
@@ -489,7 +489,7 @@ public class OpenWireProtocolManager  extends AbstractProtocolManager<Command, O
       final CoreMessageObjectPools objectPools = context.getConnection().getCoreMessageObjectPools();
       final org.apache.activemq.artemis.api.core.Message coreMessage = OpenWireMessageConverter.inbound(advisoryMessage, wireFormat, objectPools);
 
-      final SimpleString address = SimpleString.toSimpleString(topic.getPhysicalName(), objectPools.getAddressStringSimpleStringPool());
+      final SimpleString address = SimpleString.of(topic.getPhysicalName(), objectPools.getAddressStringSimpleStringPool());
       coreMessage.setAddress(address);
       coreMessage.setRoutingType(RoutingType.MULTICAST);
       // follow pattern from management notification to route directly
@@ -666,14 +666,14 @@ public class OpenWireProtocolManager  extends AbstractProtocolManager<Command, O
    @Override
    public void setAnycastPrefix(String anycastPrefix) {
       for (String prefix : anycastPrefix.split(",")) {
-         prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.ANYCAST);
+         prefixes.put(SimpleString.of(prefix), RoutingType.ANYCAST);
       }
    }
 
    @Override
    public void setMulticastPrefix(String multicastPrefix) {
       for (String prefix : multicastPrefix.split(",")) {
-         prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.MULTICAST);
+         prefixes.put(SimpleString.of(prefix), RoutingType.MULTICAST);
       }
    }
 
diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQConsumer.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQConsumer.java
index 03c99b74ff..5fea499bdd 100644
--- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQConsumer.java
+++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQConsumer.java
@@ -147,7 +147,7 @@ public class AMQConsumer {
 
    public void init(SlowConsumerDetectionListener slowConsumerDetectionListener, long nativeId) throws Exception {
 
-      SimpleString selector = info.getSelector() == null ? null : new SimpleString(convertOpenWireToActiveMQFilterString(info.getSelector()));
+      SimpleString selector = info.getSelector() == null ? null : SimpleString.of(convertOpenWireToActiveMQFilterString(info.getSelector()));
       boolean preAck = false;
       if (info.isNoLocal()) {
          if (!AdvisorySupport.isAdvisoryTopic(openwireDestination)) {
@@ -159,13 +159,13 @@ public class AMQConsumer {
          String id = info.getClientId() != null ? info.getClientId() : this.getId().getConnectionId();
          String noLocalSelector = MessageUtil.CONNECTION_ID_PROPERTY_NAME + "<>'" + id + "'";
          if (selector == null) {
-            selector = new SimpleString(noLocalSelector);
+            selector = SimpleString.of(noLocalSelector);
          } else {
-            selector = new SimpleString(info.getSelector() + " AND " + noLocalSelector);
+            selector = SimpleString.of(info.getSelector() + " AND " + noLocalSelector);
          }
       }
 
-      SimpleString destinationName = new SimpleString(session.convertWildcard(openwireDestination));
+      SimpleString destinationName = SimpleString.of(session.convertWildcard(openwireDestination));
 
       if (openwireDestination.isTopic()) {
          SimpleString queueName = createTopicSubscription(info.isDurable(), info.getClientId(), destinationName.toString(), info.getSubscriptionName(), selector, destinationName);
@@ -245,12 +245,12 @@ public class AMQConsumer {
           * The consumer may be using FQQN in which case the queue might already exist.
           */
          if (CompositeAddress.isFullyQualified(physicalName)) {
-            queueName = CompositeAddress.extractQueueName(SimpleString.toSimpleString(physicalName));
+            queueName = CompositeAddress.extractQueueName(SimpleString.of(physicalName));
             if (session.getCoreServer().locateQueue(queueName) != null) {
                return queueName;
             }
          } else {
-            queueName = new SimpleString(UUID.randomUUID().toString());
+            queueName = SimpleString.of(UUID.randomUUID().toString());
          }
 
          session.getCoreSession().createQueue(new QueueConfiguration(queueName).setAddress(address).setFilterString(selector).setDurable(false).setTemporary(true).setInternal(internalAddress));
@@ -379,7 +379,7 @@ public class AMQConsumer {
                   Throwable poisonCause = ack.getPoisonCause();
                   if (poisonCause != null) {
                      ((QueueImpl) ref.getQueue()).decDelivering(ref);
-                     ref.getMessage().putStringProperty(OpenWireConstants.AMQ_MSG_DLQ_DELIVERY_FAILURE_CAUSE_PROPERTY, new SimpleString(poisonCause.toString()));
+                     ref.getMessage().putStringProperty(OpenWireConstants.AMQ_MSG_DLQ_DELIVERY_FAILURE_CAUSE_PROPERTY, SimpleString.of(poisonCause.toString()));
                      ((QueueImpl) ref.getQueue()).incDelivering(ref);
                   }
                   ref.getQueue().sendToDeadLetterAddress(transaction, ref);
diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java
index f1f7c749e1..0a9a209ae1 100644
--- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java
+++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java
@@ -106,7 +106,7 @@ public class AMQSession implements SessionCallback {
                      OpenWireProtocolManager protocolManager, CoreMessageObjectPools coreMessageObjectPools) {
       this.connInfo = connInfo;
       this.sessInfo = sessInfo;
-      this.clientId = SimpleString.toSimpleString(connInfo.getClientId());
+      this.clientId = SimpleString.of(connInfo.getClientId());
       this.server = server;
       this.connection = connection;
       this.protocolManager = protocolManager;
@@ -181,7 +181,7 @@ public class AMQSession implements SessionCallback {
          }
          if (openWireDest.isQueue()) {
             openWireDest = protocolManager.virtualTopicConsumerToFQQN(openWireDest);
-            SimpleString queueName = new SimpleString(convertWildcard(openWireDest));
+            SimpleString queueName = SimpleString.of(convertWildcard(openWireDest));
 
             if (!checkAutoCreateQueue(queueName, openWireDest.isTemporary(), OpenWireUtil.extractFilterStringOrNull(info, openWireDest))) {
                throw new InvalidDestinationException("Destination doesn't exist: " + queueName);
@@ -385,7 +385,7 @@ public class AMQSession implements SessionCallback {
       * message comes from failover connection.  If so we add a DUPLICATE_ID to handle duplicates after a resend. */
 
       if (connection.getContext().isFaultTolerant() && protocolManager.isOpenwireUseDuplicateDetectionOnFailover() && !messageSend.getProperties().containsKey(org.apache.activemq.artemis.api.core.Message.HDR_DUPLICATE_DETECTION_ID.toString()) && !isTemporary(producerInfo)) {
-         originalCoreMsg.putStringProperty(org.apache.activemq.artemis.api.core.Message.HDR_DUPLICATE_DETECTION_ID, SimpleString.toSimpleString(messageSend.getMessageId().toString()));
+         originalCoreMsg.putStringProperty(org.apache.activemq.artemis.api.core.Message.HDR_DUPLICATE_DETECTION_ID, SimpleString.of(messageSend.getMessageId().toString()));
       }
 
       final boolean shouldBlockProducer = producerInfo.getWindowSize() > 0 || messageSend.isResponseRequired();
@@ -399,7 +399,7 @@ public class AMQSession implements SessionCallback {
       for (int i = 0; i < actualDestinationsCount; i++) {
          final ActiveMQDestination dest = actualDestinations != null ? actualDestinations[i] : destination;
          final String physicalName = dest.getPhysicalName();
-         final SimpleString address = SimpleString.toSimpleString(physicalName, coreMessageObjectPools.getAddressStringSimpleStringPool());
+         final SimpleString address = SimpleString.of(physicalName, coreMessageObjectPools.getAddressStringSimpleStringPool());
          //the last coreMsg could be directly the original one -> it avoid 1 copy if actualDestinations > 1 and ANY copy if actualDestinations == 1
          final org.apache.activemq.artemis.api.core.Message coreMsg = (i == actualDestinationsCount - 1) ? originalCoreMsg : originalCoreMsg.copy();
          coreMsg.setAddress(address);
diff --git a/artemis-protocols/artemis-openwire-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessageConverterTest.java b/artemis-protocols/artemis-openwire-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessageConverterTest.java
index d3d7f8a894..4cb96a104d 100644
--- a/artemis-protocols/artemis-openwire-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessageConverterTest.java
+++ b/artemis-protocols/artemis-openwire-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessageConverterTest.java
@@ -229,7 +229,7 @@ public class OpenWireMessageConverterTest {
       final String CORRELATION_ID = RandomUtil.randomString();
 
       ICoreMessage coreMessage = new CoreMessage().initBuffer(8);
-      coreMessage.putStringProperty(OpenWireConstants.JMS_CORRELATION_ID_PROPERTY, new SimpleString(CORRELATION_ID));
+      coreMessage.putStringProperty(OpenWireConstants.JMS_CORRELATION_ID_PROPERTY, SimpleString.of(CORRELATION_ID));
       MessageReference messageReference = new MessageReferenceImpl(coreMessage, Mockito.mock(Queue.class));
       AMQConsumer amqConsumer = Mockito.mock(AMQConsumer.class);
       Mockito.when(amqConsumer.getOpenwireDestination()).thenReturn(destination);
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
index b7835548a9..d3c2263bb3 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
@@ -171,7 +171,7 @@ public final class StompConnection extends AbstractRemotingConnection {
 
    public void autoCreateDestinationIfPossible(String destination, RoutingType routingType) throws ActiveMQStompException {
       try {
-         SimpleString simpleDestination = SimpleString.toSimpleString(destination);
+         SimpleString simpleDestination = SimpleString.of(destination);
          AddressInfo addressInfo = manager.getServer().getAddressInfo(simpleDestination);
          AddressSettings addressSettings = manager.getServer().getAddressSettingsRepository().getMatch(destination);
          RoutingType effectiveAddressRoutingType = routingType == null ? addressSettings.getDefaultAddressRoutingType() : routingType;
@@ -208,7 +208,7 @@ public final class StompConnection extends AbstractRemotingConnection {
    }
 
    public void checkRoutingSemantics(String destination, RoutingType routingType) throws ActiveMQStompException {
-      AddressInfo addressInfo = manager.getServer().getAddressInfo(SimpleString.toSimpleString(destination));
+      AddressInfo addressInfo = manager.getServer().getAddressInfo(SimpleString.of(destination));
 
       // may be null here if, for example, the management address is being checked
       if (addressInfo != null) {
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompProtocolManager.java b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompProtocolManager.java
index 291b595399..610254247b 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompProtocolManager.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompProtocolManager.java
@@ -404,7 +404,7 @@ public class StompProtocolManager extends AbstractProtocolManager<StompFrame, St
       if (server.getManagementService().getManagementAddress().toString().equals(destination)) {
          return true;
       }
-      return server.getPostOffice().getAddressInfo(SimpleString.toSimpleString(destination)) != null;
+      return server.getPostOffice().getAddressInfo(SimpleString.of(destination)) != null;
    }
 
    public ActiveMQServer getServer() {
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompSession.java b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompSession.java
index 1a366223c3..6c3acc5dda 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompSession.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompSession.java
@@ -297,9 +297,9 @@ public class StompSession implements SessionCallback {
                                                    String selector,
                                                    String ack,
                                                    Integer consumerWindowSize) throws Exception {
-      SimpleString address = SimpleString.toSimpleString(destination);
-      SimpleString queueName = SimpleString.toSimpleString(destination);
-      SimpleString selectorSimple = SimpleString.toSimpleString(selector);
+      SimpleString address = SimpleString.of(destination);
+      SimpleString queueName = SimpleString.of(destination);
+      SimpleString selectorSimple = SimpleString.of(selector);
       final int finalConsumerWindowSize;
 
       if (consumerWindowSize != null) {
@@ -319,7 +319,7 @@ public class StompSession implements SessionCallback {
             if (clientID == null) {
                throw BUNDLE.missingClientID();
             }
-            queueName = SimpleString.toSimpleString(clientID + "." + durableSubscriptionName);
+            queueName = SimpleString.of(clientID + "." + durableSubscriptionName);
             if (manager.getServer().locateQueue(queueName) == null) {
                try {
                   session.createQueue(new QueueConfiguration(queueName).setAddress(address).setFilterString(selectorSimple));
@@ -364,7 +364,7 @@ public class StompSession implements SessionCallback {
       }
 
       if (durableSubscriptionName != null && clientID != null) {
-         SimpleString queueName = SimpleString.toSimpleString(clientID + "." + durableSubscriptionName);
+         SimpleString queueName = SimpleString.of(clientID + "." + durableSubscriptionName);
          if (manager.getServer().locateQueue(queueName) != null) {
             session.deleteQueue(queueName);
          }
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java
index 4402acea86..5678d63877 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java
@@ -57,15 +57,15 @@ public class StompUtils {
       }
       String groupID = headers.remove(MessageUtil.JMSXGROUPID);
       if (groupID != null) {
-         msg.putStringProperty(Message.HDR_GROUP_ID, SimpleString.toSimpleString(groupID));
+         msg.putStringProperty(Message.HDR_GROUP_ID, SimpleString.of(groupID));
       }
       String contentType = headers.remove(Stomp.Headers.CONTENT_TYPE);
       if (contentType != null) {
-         msg.putStringProperty(Message.HDR_CONTENT_TYPE, SimpleString.toSimpleString(contentType));
+         msg.putStringProperty(Message.HDR_CONTENT_TYPE, SimpleString.of(contentType));
       }
       Object replyTo = headers.remove(Stomp.Headers.Send.REPLY_TO);
       if (replyTo != null) {
-         msg.putStringProperty(ClientMessageImpl.REPLYTO_HEADER_NAME, SimpleString.toSimpleString((String) replyTo));
+         msg.putStringProperty(ClientMessageImpl.REPLYTO_HEADER_NAME, SimpleString.of((String) replyTo));
       }
       String expiration = headers.remove(Stomp.Headers.Send.EXPIRATION_TIME);
       if (expiration != null) {
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java
index ac94d233ed..77b6c78110 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java
@@ -198,7 +198,7 @@ public abstract class VersionedStompFrameHandler {
             message.setRoutingType(routingType);
          }
          message.setTimestamp(timestamp);
-         message.setAddress(SimpleString.toSimpleString(destination));
+         message.setAddress(SimpleString.of(destination));
          StompUtils.copyStandardHeadersFromFrameToMessage(frame, message, getPrefix(frame));
          if (frame.hasHeader(Stomp.Headers.CONTENT_LENGTH)) {
             message.setType(Message.BYTES_TYPE);
@@ -206,7 +206,7 @@ public abstract class VersionedStompFrameHandler {
          } else {
             message.setType(Message.TEXT_TYPE);
             String text = frame.getBody();
-            message.getBodyBuffer().writeNullableSimpleString(SimpleString.toSimpleString(text));
+            message.getBodyBuffer().writeNullableSimpleString(SimpleString.of(text));
          }
 
          connection.sendServerMessage(message, txID);
@@ -293,7 +293,7 @@ public abstract class VersionedStompFrameHandler {
       if (destination == null) {
          return null;
       }
-      return connection.getSession().getCoreSession().removePrefix(SimpleString.toSimpleString(destination)).toString();
+      return connection.getSession().getCoreSession().removePrefix(SimpleString.of(destination)).toString();
    }
 
    public String getPrefix(StompFrame request) throws Exception {
@@ -301,7 +301,7 @@ public abstract class VersionedStompFrameHandler {
       if (destination == null) {
          return null;
       }
-      SimpleString prefix = connection.getSession().getCoreSession().getPrefix(SimpleString.toSimpleString(destination));
+      SimpleString prefix = connection.getSession().getCoreSession().getPrefix(SimpleString.of(destination));
       return prefix == null ? null : prefix.toString();
    }
 
@@ -377,7 +377,7 @@ public abstract class VersionedStompFrameHandler {
       if (typeHeader != null) {
          routingType = RoutingType.valueOf(typeHeader);
       } else {
-         routingType = connection.getSession().getCoreSession().getRoutingTypeFromPrefix(new SimpleString(destination), null);
+         routingType = connection.getSession().getCoreSession().getRoutingTypeFromPrefix(SimpleString.of(destination), null);
       }
       return routingType;
    }
diff --git a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQMessageHandler.java b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQMessageHandler.java
index 954cb5c0e1..53703fbe1d 100644
--- a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQMessageHandler.java
+++ b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQMessageHandler.java
@@ -121,7 +121,7 @@ public class ActiveMQMessageHandler implements MessageHandler, FailoverEventList
       String selector = spec.getMessageSelector();
 
       // Create the message consumer
-      SimpleString selectorString = selector == null || selector.trim().equals("") ? null : new SimpleString(selector);
+      SimpleString selectorString = selector == null || selector.trim().equals("") ? null : SimpleString.of(selector);
       if (activation.isTopic() && spec.isSubscriptionDurable()) {
          SimpleString queueName = ActiveMQDestination.createQueueNameForSubscription(true, spec.getClientID(), spec.getSubscriptionName());
 
@@ -145,7 +145,7 @@ public class ActiveMQMessageHandler implements MessageHandler, FailoverEventList
 
             boolean selectorChanged = selector == null && oldFilterString != null || oldFilterString == null && selector != null || (oldFilterString != null && selector != null && !oldFilterString.toString().equals(selector));
 
-            SimpleString oldTopicName = (enable1XPrefix && !subResponse.getAddress().startsWith(PacketImpl.OLD_TOPIC_PREFIX) ? PacketImpl.OLD_TOPIC_PREFIX : SimpleString.toSimpleString("")).concat(subResponse.getAddress());
+            SimpleString oldTopicName = (enable1XPrefix && !subResponse.getAddress().startsWith(PacketImpl.OLD_TOPIC_PREFIX) ? PacketImpl.OLD_TOPIC_PREFIX : SimpleString.of("")).concat(subResponse.getAddress());
 
             boolean topicChanged = !oldTopicName.equals(activation.getAddress());
 
@@ -162,7 +162,7 @@ public class ActiveMQMessageHandler implements MessageHandler, FailoverEventList
          SimpleString tempQueueName;
          if (activation.isTopic()) {
             if (activation.getTopicTemporaryQueue() == null) {
-               tempQueueName = new SimpleString(UUID.randomUUID().toString());
+               tempQueueName = SimpleString.of(UUID.randomUUID().toString());
                session.createQueue(new QueueConfiguration(tempQueueName).setAddress(activation.getAddress()).setFilterString(selectorString).setDurable(false).setTemporary(true));
                activation.setTopicTemporaryQueue(tempQueueName);
             } else {
diff --git a/artemis-selector/src/main/java/org/apache/activemq/artemis/selector/filter/PropertyExpression.java b/artemis-selector/src/main/java/org/apache/activemq/artemis/selector/filter/PropertyExpression.java
index 9fa62672bb..cb49be4254 100755
--- a/artemis-selector/src/main/java/org/apache/activemq/artemis/selector/filter/PropertyExpression.java
+++ b/artemis-selector/src/main/java/org/apache/activemq/artemis/selector/filter/PropertyExpression.java
@@ -28,7 +28,7 @@ public class PropertyExpression implements Expression {
    private final SimpleString name;
 
    public PropertyExpression(String name) {
-      this(SimpleString.toSimpleString(name));
+      this(SimpleString.of(name));
    }
 
    public PropertyExpression(SimpleString name) {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBrokerConnectionElement.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBrokerConnectionElement.java
index 99b8a1af62..b237f074a4 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBrokerConnectionElement.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPBrokerConnectionElement.java
@@ -50,7 +50,7 @@ public class AMQPBrokerConnectionElement implements Serializable {
    }
 
    public AMQPBrokerConnectionElement setQueueName(String queueName) {
-      return setQueueName(SimpleString.toSimpleString(queueName));
+      return setQueueName(SimpleString.of(queueName));
    }
 
    public AMQPBrokerConnectionElement setQueueName(SimpleString queueName) {
@@ -73,7 +73,7 @@ public class AMQPBrokerConnectionElement implements Serializable {
    }
 
    public AMQPBrokerConnectionElement setMatchAddress(String matchAddress) {
-      return this.setMatchAddress(SimpleString.toSimpleString(matchAddress));
+      return this.setMatchAddress(SimpleString.of(matchAddress));
    }
 
    public AMQPBrokerConnectionElement setMatchAddress(SimpleString matchAddress) {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
index 0b78fab0c4..82fc5ce4be 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
@@ -830,7 +830,7 @@ public class ConfigurationImpl implements Configuration, Serializable {
       beanUtils.getConvertUtils().register(new Converter() {
          @Override
          public <T> T convert(Class<T> type, Object value) {
-            return (T) SimpleString.toSimpleString(value.toString());
+            return (T) SimpleString.of(value.toString());
          }
       }, SimpleString.class);
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
index 9f6ab681e6..1315175cc6 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
@@ -483,9 +483,9 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
 
       config.setPersistIDCache(getBoolean(e, "persist-id-cache", config.isPersistIDCache()));
 
-      config.setManagementAddress(new SimpleString(getString(e, "management-address", config.getManagementAddress().toString(), NOT_NULL_OR_EMPTY)));
+      config.setManagementAddress(SimpleString.of(getString(e, "management-address", config.getManagementAddress().toString(), NOT_NULL_OR_EMPTY)));
 
-      config.setManagementNotificationAddress(new SimpleString(getString(e, "management-notification-address", config.getManagementNotificationAddress().toString(), NOT_NULL_OR_EMPTY)));
+      config.setManagementNotificationAddress(SimpleString.of(getString(e, "management-notification-address", config.getManagementNotificationAddress().toString(), NOT_NULL_OR_EMPTY)));
 
       config.setMaskPassword(getBoolean(e, "mask-password", null));
 
@@ -1331,9 +1331,9 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
          final Node child = children.item(i);
          final String name = child.getNodeName();
          if (DEAD_LETTER_ADDRESS_NODE_NAME.equalsIgnoreCase(name)) {
-            addressSettings.setDeadLetterAddress(new SimpleString(getTrimmedTextContent(child)));
+            addressSettings.setDeadLetterAddress(SimpleString.of(getTrimmedTextContent(child)));
          } else if (EXPIRY_ADDRESS_NODE_NAME.equalsIgnoreCase(name)) {
-            addressSettings.setExpiryAddress(new SimpleString(getTrimmedTextContent(child)));
+            addressSettings.setExpiryAddress(SimpleString.of(getTrimmedTextContent(child)));
          } else if (EXPIRY_DELAY_NODE_NAME.equalsIgnoreCase(name)) {
             addressSettings.setExpiryDelay(XMLUtil.parseLong(child));
          } else if (MIN_EXPIRY_DELAY_NODE_NAME.equalsIgnoreCase(name)) {
@@ -1386,7 +1386,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
          } else if (LVQ_NODE_NAME.equalsIgnoreCase(name) || DEFAULT_LVQ_NODE_NAME.equalsIgnoreCase(name)) {
             addressSettings.setDefaultLastValueQueue(XMLUtil.parseBoolean(child));
          } else if (DEFAULT_LVQ_KEY_NODE_NAME.equalsIgnoreCase(name)) {
-            addressSettings.setDefaultLastValueKey(SimpleString.toSimpleString(getTrimmedTextContent(child)));
+            addressSettings.setDefaultLastValueKey(SimpleString.of(getTrimmedTextContent(child)));
          } else if (DEFAULT_NON_DESTRUCTIVE_NODE_NAME.equalsIgnoreCase(name)) {
             addressSettings.setDefaultNonDestructive(XMLUtil.parseBoolean(child));
          } else if (DEFAULT_EXCLUSIVE_NODE_NAME.equalsIgnoreCase(name)) {
@@ -1398,7 +1398,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
          } else if (DEFAULT_GROUP_BUCKETS.equalsIgnoreCase(name)) {
             addressSettings.setDefaultGroupBuckets(XMLUtil.parseInt(child));
          } else if (DEFAULT_GROUP_FIRST_KEY.equalsIgnoreCase(name)) {
-            addressSettings.setDefaultGroupFirstKey(SimpleString.toSimpleString(getTrimmedTextContent(child)));
+            addressSettings.setDefaultGroupFirstKey(SimpleString.of(getTrimmedTextContent(child)));
          } else if (MAX_DELIVERY_ATTEMPTS.equalsIgnoreCase(name)) {
             addressSettings.setMaxDeliveryAttempts(XMLUtil.parseInt(child));
          } else if (REDISTRIBUTION_DELAY_NODE_NAME.equalsIgnoreCase(name)) {
@@ -1472,15 +1472,15 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
          } else if (AUTO_CREATE_DEAD_LETTER_RESOURCES_NODE_NAME.equalsIgnoreCase(name)) {
             addressSettings.setAutoCreateDeadLetterResources(XMLUtil.parseBoolean(child));
          } else if (DEAD_LETTER_QUEUE_PREFIX_NODE_NAME.equalsIgnoreCase(name)) {
-            addressSettings.setDeadLetterQueuePrefix(new SimpleString(getTrimmedTextContent(child)));
+            addressSettings.setDeadLetterQueuePrefix(SimpleString.of(getTrimmedTextContent(child)));
          } else if (DEAD_LETTER_QUEUE_SUFFIX_NODE_NAME.equalsIgnoreCase(name)) {
-            addressSettings.setDeadLetterQueueSuffix(new SimpleString(getTrimmedTextContent(child)));
+            addressSettings.setDeadLetterQueueSuffix(SimpleString.of(getTrimmedTextContent(child)));
          } else if (AUTO_CREATE_EXPIRY_RESOURCES_NODE_NAME.equalsIgnoreCase(name)) {
             addressSettings.setAutoCreateExpiryResources(XMLUtil.parseBoolean(child));
          } else if (EXPIRY_QUEUE_PREFIX_NODE_NAME.equalsIgnoreCase(name)) {
-            addressSettings.setExpiryQueuePrefix(new SimpleString(getTrimmedTextContent(child)));
+            addressSettings.setExpiryQueuePrefix(SimpleString.of(getTrimmedTextContent(child)));
          } else if (EXPIRY_QUEUE_SUFFIX_NODE_NAME.equalsIgnoreCase(name)) {
-            addressSettings.setExpiryQueueSuffix(new SimpleString(getTrimmedTextContent(child)));
+            addressSettings.setExpiryQueueSuffix(SimpleString.of(getTrimmedTextContent(child)));
          } else if (ENABLE_METRICS.equalsIgnoreCase(name)) {
             addressSettings.setEnableMetrics(XMLUtil.parseBoolean(child));
          } else if (ENABLE_INGRESS_TIMESTAMP.equalsIgnoreCase(name)) {
@@ -1499,7 +1499,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
    protected ResourceLimitSettings parseResourceLimitSettings(final Node node) {
       ResourceLimitSettings resourceLimitSettings = new ResourceLimitSettings();
 
-      resourceLimitSettings.setMatch(SimpleString.toSimpleString(getAttributeValue(node, "match")));
+      resourceLimitSettings.setMatch(SimpleString.of(getAttributeValue(node, "match")));
 
       NodeList children = node.getChildNodes();
 
@@ -2244,8 +2244,8 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
                String match = getAttributeValue(e2, "address-match");
                String queue = getAttributeValue(e2, "queue-name");
                connectionElement = new AMQPBrokerConnectionElement();
-               connectionElement.setMatchAddress(SimpleString.toSimpleString(match)).setType(nodeType);
-               connectionElement.setQueueName(SimpleString.toSimpleString(queue));
+               connectionElement.setMatchAddress(SimpleString.of(match)).setType(nodeType);
+               connectionElement.setQueueName(SimpleString.of(queue));
             }
 
             config.addElement(connectionElement);
@@ -2437,7 +2437,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
       Integer timeout = getInteger(node, "timeout", ActiveMQDefaultConfiguration.getDefaultGroupingHandlerTimeout(), GT_ZERO);
       Long groupTimeout = getLong(node, "group-timeout", ActiveMQDefaultConfiguration.getDefaultGroupingHandlerGroupTimeout(), MINUS_ONE_OR_GT_ZERO);
       Long reaperPeriod = getLong(node, "reaper-period", ActiveMQDefaultConfiguration.getDefaultGroupingHandlerReaperPeriod(), GT_ZERO);
-      mainConfiguration.setGroupingHandlerConfiguration(new GroupingHandlerConfiguration().setName(new SimpleString(name)).setType(type.equals(GroupingHandlerConfiguration.TYPE.LOCAL.getType()) ? GroupingHandlerConfiguration.TYPE.LOCAL : GroupingHandlerConfiguration.TYPE.REMOTE).setAddress(new SimpleString(address)).setTimeout(timeout).setGroupTimeout(groupTimeout).setReaperPeriod(reaperPeriod));
+      mainConfiguration.setGroupingHandlerConfiguration(new GroupingHandlerConfiguration().setName(SimpleString.of(name)).setType(type.equals(GroupingHandlerConfiguration.TYPE.LOCAL.getType()) ? GroupingHandlerConfiguration.TYPE.LOCAL : GroupingHandlerConfiguration.TYPE.REMOTE).setAddress(SimpleString.of(address)).setTimeout(timeout).setGroupTimeout(groupTimeout).setReaperPeriod(reaperPeriod));
    }
 
    private TransformerConfiguration getTransformerConfiguration(final Node node) {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/filter/impl/FilterImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/filter/impl/FilterImpl.java
index ce34fcef42..e46545c5c6 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/filter/impl/FilterImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/filter/impl/FilterImpl.java
@@ -69,7 +69,7 @@ public class FilterImpl implements Filter {
     * @throws ActiveMQException if the string does not correspond to a valid filter
     */
    public static Filter createFilter(final String filterStr) throws ActiveMQException {
-      return FilterImpl.createFilter(SimpleString.toSimpleString(filterStr == null ? null : filterStr.trim()));
+      return FilterImpl.createFilter(SimpleString.of(filterStr == null ? null : filterStr.trim()));
    }
 
    /**
@@ -162,15 +162,15 @@ public class FilterImpl implements Filter {
             // Proton stores JMSMessageID as NATIVE_MESSAGE_ID that is an arbitrary string
             String amqpNativeID = msg.getStringProperty(NATIVE_MESSAGE_ID);
             if (amqpNativeID != null) {
-               return SimpleString.toSimpleString(amqpNativeID);
+               return SimpleString.of(amqpNativeID);
             }
          }
          // It's the stringified (hex) representation of a user id that can be used in a selector expression
          String userID = msg.getUserID().toString();
          if (userID.startsWith("ID:")) {
-            return SimpleString.toSimpleString(userID);
+            return SimpleString.of(userID);
          } else {
-            return SimpleString.toSimpleString("ID:" + msg.getUserID());
+            return SimpleString.of("ID:" + msg.getUserID());
          }
       } else if (FilterConstants.ACTIVEMQ_PRIORITY.equals(fieldName)) {
          return (int) msg.getPriority();
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AbstractControl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AbstractControl.java
index 205956394e..810a79aced 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AbstractControl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AbstractControl.java
@@ -135,7 +135,7 @@ public abstract class AbstractControl extends StandardMBean {
          message.setTimestamp(System.currentTimeMillis());
          if (body != null) {
             if (type == Message.TEXT_TYPE) {
-               message.getBodyBuffer().writeNullableSimpleString(new SimpleString(body));
+               message.getBodyBuffer().writeNullableSimpleString(SimpleString.of(body));
             } else {
                message.getBodyBuffer().writeBytes(Base64.decode(body));
             }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index df33a69f7c..c424101000 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -938,7 +938,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
          for (String routingType : ListUtil.toList(routingTypes)) {
             set.add(RoutingType.valueOf(routingType));
          }
-         final AddressInfo addressInfo = new AddressInfo(new SimpleString(name), set);
+         final AddressInfo addressInfo = new AddressInfo(SimpleString.of(name), set);
          if (server.addAddressInfo(addressInfo)) {
             String result = AddressInfoTextFormatter.Long.format(addressInfo, new StringBuilder()).toString();
             if (AuditLogger.isResourceLoggingEnabled()) {
@@ -973,16 +973,16 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
                routingTypeSet.add(RoutingType.valueOf(routingTypeName));
             }
          }
-         if (!server.updateAddressInfo(SimpleString.toSimpleString(name), routingTypeSet)) {
+         if (!server.updateAddressInfo(SimpleString.of(name), routingTypeSet)) {
             if (AuditLogger.isResourceLoggingEnabled()) {
                AuditLogger.updateAddressFailure(name, routingTypes);
             }
-            throw ActiveMQMessageBundle.BUNDLE.addressDoesNotExist(SimpleString.toSimpleString(name));
+            throw ActiveMQMessageBundle.BUNDLE.addressDoesNotExist(SimpleString.of(name));
          }
          if (AuditLogger.isResourceLoggingEnabled()) {
             AuditLogger.updateAddressSuccess(name, routingTypes);
          }
-         return AddressInfoTextFormatter.Long.format(server.getAddressInfo(SimpleString.toSimpleString(name)), new StringBuilder()).toString();
+         return AddressInfoTextFormatter.Long.format(server.getAddressInfo(SimpleString.of(name)), new StringBuilder()).toString();
       } finally {
          blockOnIO();
       }
@@ -1003,7 +1003,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
          clearIO();
          try {
-            server.removeAddressInfo(new SimpleString(name), null, force);
+            server.removeAddressInfo(SimpleString.of(name), null, force);
             if (AuditLogger.isResourceLoggingEnabled()) {
                AuditLogger.deleteAddressSuccess(name);
             }
@@ -1269,10 +1269,10 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
       clearIO();
 
-      SimpleString filter = filterStr == null ? null : new SimpleString(filterStr);
+      SimpleString filter = filterStr == null ? null : SimpleString.of(filterStr);
       try {
          if (filterStr != null && !filterStr.trim().equals("")) {
-            filter = new SimpleString(filterStr);
+            filter = SimpleString.of(filterStr);
          }
 
          final Queue queue = server.createQueue(new QueueConfiguration(name).setAddress(address).setRoutingType(RoutingType.valueOf(routingType.toUpperCase())).setFilterString(filter).setDurable(durable).setMaxConsumers(maxConsumers).setPurgeOnNoConsumers(purgeOnNoConsumers).setExclusive(exclusive).setGroupRebalance(groupRebalance).setGroupBuckets(groupBuckets).setGroupFirstKey(groupFirstKey).setLastValue(lastValue).setLastValueKey(lastValueKey).setNonDestructive(nonDestructive).setConsu [...]
@@ -1433,7 +1433,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
             if (AuditLogger.isResourceLoggingEnabled()) {
                AuditLogger.updateQueueFailure(name, routingType);
             }
-            throw ActiveMQMessageBundle.BUNDLE.noSuchQueue(new SimpleString(name));
+            throw ActiveMQMessageBundle.BUNDLE.noSuchQueue(SimpleString.of(name));
          }
          if (AuditLogger.isResourceLoggingEnabled()) {
             AuditLogger.updateQueueSuccess(name, routingType);
@@ -1607,7 +1607,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
          clearIO();
          try {
-            SimpleString queueName = new SimpleString(name);
+            SimpleString queueName = SimpleString.of(name);
             try {
                server.destroyQueue(queueName, null, !removeConsumers, removeConsumers, forceAutoDeleteAddress);
             } catch (Exception e) {
@@ -1644,9 +1644,9 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
       clearIO();
       try {
-         final AddressInfo addressInfo = server.getAddressInfo(SimpleString.toSimpleString(address));
+         final AddressInfo addressInfo = server.getAddressInfo(SimpleString.of(address));
          if (addressInfo == null) {
-            throw ActiveMQMessageBundle.BUNDLE.addressDoesNotExist(SimpleString.toSimpleString(address));
+            throw ActiveMQMessageBundle.BUNDLE.addressDoesNotExist(SimpleString.of(address));
          } else {
             return AddressInfoTextFormatter.Long.format(addressInfo, new StringBuilder()).toString();
          }
@@ -1664,7 +1664,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
       clearIO();
       try {
-         final Bindings bindings = server.getPostOffice().lookupBindingsForAddress(new SimpleString(address));
+         final Bindings bindings = server.getPostOffice().lookupBindingsForAddress(SimpleString.of(address));
          return bindings == null ? "" : bindings.getBindings().stream().map(Binding::toManagementString).collect(Collectors.joining(","));
       } finally {
          blockOnIO();
@@ -2305,7 +2305,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
          clearIO();
          try {
-            for (Binding binding : postOffice.getMatchingBindings(SimpleString.toSimpleString(address))) {
+            for (Binding binding : postOffice.getMatchingBindings(SimpleString.of(address))) {
                if (binding instanceof LocalQueueBinding) {
                   Queue queue = ((LocalQueueBinding) binding).getQueue();
                   for (Consumer consumer : queue.getConsumers()) {
@@ -2986,7 +2986,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
       clearIO();
       try {
          server.getSecurityRepository().removeMatch(addressMatch);
-         storageManager.deleteSecuritySetting(new SimpleString(addressMatch));
+         storageManager.deleteSecuritySetting(SimpleString.of(addressMatch));
       } finally {
          blockOnIO();
       }
@@ -3491,8 +3491,8 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
       }
 
       AddressSettings addressSettings = new AddressSettings();
-      addressSettings.setDeadLetterAddress(DLA == null ? null : new SimpleString(DLA));
-      addressSettings.setExpiryAddress(expiryAddress == null ? null : new SimpleString(expiryAddress));
+      addressSettings.setDeadLetterAddress(DLA == null ? null : SimpleString.of(DLA));
+      addressSettings.setExpiryAddress(expiryAddress == null ? null : SimpleString.of(expiryAddress));
       addressSettings.setExpiryDelay(expiryDelay);
       addressSettings.setMinExpiryDelay(minExpiryDelay);
       addressSettings.setMaxExpiryDelay(maxExpiryDelay);
@@ -3521,12 +3521,12 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
       addressSettings.setConfigDeleteQueues(configDeleteQueues == null || configDeleteQueues.isEmpty() ? AddressSettings.DEFAULT_CONFIG_DELETE_QUEUES : DeletionPolicy.valueOf(configDeleteQueues.toUpperCase()));
       addressSettings.setConfigDeleteAddresses(configDeleteAddresses == null || configDeleteAddresses.isEmpty() ? AddressSettings.DEFAULT_CONFIG_DELETE_ADDRESSES : DeletionPolicy.valueOf(configDeleteAddresses.toUpperCase()));
       addressSettings.setMaxSizeBytesRejectThreshold(maxSizeBytesRejectThreshold);
-      addressSettings.setDefaultLastValueKey(defaultLastValueKey == null || defaultLastValueKey.isEmpty() ? ActiveMQDefaultConfiguration.getDefaultLastValueKey() : new SimpleString(defaultLastValueKey));
+      addressSettings.setDefaultLastValueKey(defaultLastValueKey == null || defaultLastValueKey.isEmpty() ? ActiveMQDefaultConfiguration.getDefaultLastValueKey() : SimpleString.of(defaultLastValueKey));
       addressSettings.setDefaultNonDestructive(defaultNonDestructive);
       addressSettings.setDefaultExclusiveQueue(defaultExclusiveQueue);
       addressSettings.setDefaultGroupRebalance(defaultGroupRebalance);
       addressSettings.setDefaultGroupBuckets(defaultGroupBuckets);
-      addressSettings.setDefaultGroupFirstKey(defaultGroupFirstKey == null || defaultGroupFirstKey.isEmpty() ? ActiveMQDefaultConfiguration.getDefaultGroupFirstKey() : new SimpleString(defaultGroupFirstKey));
+      addressSettings.setDefaultGroupFirstKey(defaultGroupFirstKey == null || defaultGroupFirstKey.isEmpty() ? ActiveMQDefaultConfiguration.getDefaultGroupFirstKey() : SimpleString.of(defaultGroupFirstKey));
       addressSettings.setDefaultMaxConsumers(defaultMaxConsumers);
       addressSettings.setDefaultPurgeOnNoConsumers(defaultPurgeOnNoConsumers);
       addressSettings.setDefaultConsumersBeforeDispatch(defaultConsumersBeforeDispatch);
@@ -3542,16 +3542,16 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
       addressSettings.setRedeliveryCollisionAvoidanceFactor(redeliveryCollisionAvoidanceFactor);
       addressSettings.setRetroactiveMessageCount(retroactiveMessageCount);
       addressSettings.setAutoCreateDeadLetterResources(autoCreateDeadLetterResources);
-      addressSettings.setDeadLetterQueuePrefix(deadLetterQueuePrefix == null || deadLetterQueuePrefix.isEmpty() ? null : new SimpleString(deadLetterQueuePrefix));
-      addressSettings.setDeadLetterQueueSuffix(deadLetterQueueSuffix == null || deadLetterQueueSuffix.isEmpty() ? null : new SimpleString(deadLetterQueueSuffix));
+      addressSettings.setDeadLetterQueuePrefix(deadLetterQueuePrefix == null || deadLetterQueuePrefix.isEmpty() ? null : SimpleString.of(deadLetterQueuePrefix));
+      addressSettings.setDeadLetterQueueSuffix(deadLetterQueueSuffix == null || deadLetterQueueSuffix.isEmpty() ? null : SimpleString.of(deadLetterQueueSuffix));
       addressSettings.setAutoCreateExpiryResources(autoCreateExpiryResources);
-      addressSettings.setExpiryQueuePrefix(expiryQueuePrefix == null || expiryQueuePrefix.isEmpty() ? null : new SimpleString(expiryQueuePrefix));
-      addressSettings.setExpiryQueueSuffix(expiryQueueSuffix == null || expiryQueueSuffix.isEmpty() ? null : new SimpleString(expiryQueueSuffix));
+      addressSettings.setExpiryQueuePrefix(expiryQueuePrefix == null || expiryQueuePrefix.isEmpty() ? null : SimpleString.of(expiryQueuePrefix));
+      addressSettings.setExpiryQueueSuffix(expiryQueueSuffix == null || expiryQueueSuffix.isEmpty() ? null : SimpleString.of(expiryQueueSuffix));
       addressSettings.setEnableMetrics(enableMetrics);
 
       server.getAddressSettingsRepository().addMatch(address, addressSettings);
 
-      storageManager.storeAddressSetting(new PersistedAddressSettingJSON(new SimpleString(address), addressSettings, addressSettings.toJSON()));
+      storageManager.storeAddressSetting(new PersistedAddressSettingJSON(SimpleString.of(address), addressSettings, addressSettings.toJSON()));
 
    }
 
@@ -3580,7 +3580,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
          }
          server.getAddressSettingsRepository().addMatch(address, addressSettingsConfiguration);
 
-         storageManager.storeAddressSetting(new PersistedAddressSettingJSON(new SimpleString(address), addressSettingsConfiguration, SimpleString.toSimpleString(addressSettingsConfigurationAsJson)));
+         storageManager.storeAddressSetting(new PersistedAddressSettingJSON(SimpleString.of(address), addressSettingsConfiguration, SimpleString.of(addressSettingsConfigurationAsJson)));
          return addressSettingsConfiguration.toJSON();
       } catch (ActiveMQException e) {
          throw new IllegalStateException(e.getMessage());
@@ -3597,7 +3597,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
       checkStarted();
 
       server.getAddressSettingsRepository().removeMatch(addressMatch);
-      storageManager.deleteAddressSetting(new SimpleString(addressMatch));
+      storageManager.deleteAddressSetting(SimpleString.of(addressMatch));
    }
 
    public void sendQueueInfoToQueue(final String queueName, final String address) throws Exception {
@@ -3605,7 +3605,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
       clearIO();
       try {
-         postOffice.sendQueueInfoToQueue(new SimpleString(queueName), new SimpleString(address == null ? "" : address));
+         postOffice.sendQueueInfoToQueue(SimpleString.of(queueName), SimpleString.of(address == null ? "" : address));
 
          GroupingHandler handler = server.getGroupingHandler();
          if (handler != null) {
@@ -3743,7 +3743,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
       clearIO();
       try {
-         server.destroyDivert(SimpleString.toSimpleString(name), true);
+         server.destroyDivert(SimpleString.of(name), true);
       } finally {
          blockOnIO();
       }
@@ -4145,7 +4145,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
    public void updateDuplicateIdCache(String address, Object[] ids) throws Exception {
       clearIO();
       try {
-         DuplicateIDCache duplicateIDCache = server.getPostOffice().getDuplicateIDCache(new SimpleString(address));
+         DuplicateIDCache duplicateIDCache = server.getPostOffice().getDuplicateIDCache(SimpleString.of(address));
          for (Object id : ids) {
             duplicateIDCache.addToCache(((String) id).getBytes(), null);
          }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
index 460d3119fa..d99b0a8526 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
@@ -1088,7 +1088,7 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
          Map<String, Long> result = new HashMap<>();
          try {
             Filter filter = FilterImpl.createFilter(filterStr);
-            SimpleString groupByProperty = SimpleString.toSimpleString(groupByPropertyStr);
+            SimpleString groupByProperty = SimpleString.of(groupByPropertyStr);
             if (filter == null && groupByProperty == null) {
                result.put(null, getMessageCount());
             } else {
@@ -1141,7 +1141,7 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
          Map<String, Long> result = new HashMap<>();
          try {
             Filter filter = FilterImpl.createFilter(filterStr);
-            SimpleString groupByProperty = SimpleString.toSimpleString(groupByPropertyStr);
+            SimpleString groupByProperty = SimpleString.of(groupByPropertyStr);
             if (filter == null && groupByProperty == null) {
                result.put(null, (long) getDeliveringCount());
             } else {
@@ -1299,7 +1299,7 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
 
                @Override
                public SimpleString getFilterString() {
-                  return new SimpleString("custom filter for MESSAGEID= messageID");
+                  return SimpleString.of("custom filter for MESSAGEID= messageID");
                }
             };
 
@@ -1346,7 +1346,7 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
 
          clearIO();
          try {
-            Binding binding = server.getPostOffice().getBinding(new SimpleString(otherQueueName));
+            Binding binding = server.getPostOffice().getBinding(SimpleString.of(otherQueueName));
 
             if (binding == null) {
                throw ActiveMQMessageBundle.BUNDLE.noQueueFound(otherQueueName);
@@ -1390,7 +1390,7 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
          try {
             Filter filter = FilterImpl.createFilter(filterStr);
 
-            Binding binding = server.getPostOffice().getBinding(new SimpleString(otherQueueName));
+            Binding binding = server.getPostOffice().getBinding(SimpleString.of(otherQueueName));
 
             if (binding == null) {
                throw ActiveMQMessageBundle.BUNDLE.noQueueFound(otherQueueName);
@@ -1846,7 +1846,7 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
 
       clearIO();
       try {
-         queue.resetGroup(SimpleString.toSimpleString(groupID));
+         queue.resetGroup(SimpleString.of(groupID));
       } finally {
          blockOnIO();
       }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
index f825e1744c..bc502742f1 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
@@ -43,7 +43,7 @@ public class QueueView extends ActiveMQAbstractView<QueueControl> {
 
    @Override
    public JsonObjectBuilder toJson(QueueControl queue) {
-      Queue q = server.locateQueue(new SimpleString(queue.getName()));
+      Queue q = server.locateQueue(SimpleString.of(queue.getName()));
       JsonObjectBuilder obj = JsonLoader.createObjectBuilder()
          .add(QueueField.ID.getName(), toString(queue.getID()))
          .add(QueueField.NAME.getName(), toString(queue.getName()))
@@ -84,7 +84,7 @@ public class QueueView extends ActiveMQAbstractView<QueueControl> {
 
    @Override
    public Object getField(QueueControl queue, String fieldName) {
-      Queue q = server.locateQueue(new SimpleString(queue.getName()));
+      Queue q = server.locateQueue(SimpleString.of(queue.getName()));
 
       QueueField field = QueueField.valueOfName(fieldName);
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueueFilterPredicate.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueueFilterPredicate.java
index 9066441a77..923627f197 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueueFilterPredicate.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueueFilterPredicate.java
@@ -46,7 +46,7 @@ public class QueueFilterPredicate extends ActiveMQFilterPredicate<QueueControl>
             case NAME:
                return matches(queue.getName());
             case CONSUMER_ID:
-               Queue q = server.locateQueue(new SimpleString(queue.getName()));
+               Queue q = server.locateQueue(SimpleString.of(queue.getName()));
                for (Consumer consumer : q.getConsumers()) {
                   if (matches(consumer.sequentialID()))
                      return true;
@@ -73,7 +73,7 @@ public class QueueFilterPredicate extends ActiveMQFilterPredicate<QueueControl>
             case ROUTING_TYPE:
                return matches(queue.getRoutingType());
             case AUTO_CREATED:
-               return matches(server.locateQueue(new SimpleString(queue.getName())).isAutoCreated());
+               return matches(server.locateQueue(SimpleString.of(queue.getName())).isAutoCreated());
             case DURABLE:
                return matches(queue.isDurable());
             case PAUSED:
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java
index 2300a132f1..c85fb44a01 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java
@@ -177,7 +177,7 @@ public class PagingStoreFactoryDatabase implements PagingStoreFactory {
       ((JDBCSequentialFileFactory)fileFactory).destroy();
       String tableName = factoryToTableName.remove(fileFactory);
       if (tableName != null) {
-         SimpleString removeTableName = SimpleString.toSimpleString(tableName);
+         SimpleString removeTableName = SimpleString.of(tableName);
          JDBCSequentialFile directoryList = (JDBCSequentialFile) pagingFactoryFileFactory.createSequentialFile(DIRECTORY_NAME);
          directoryList.open();
 
@@ -244,7 +244,7 @@ public class PagingStoreFactoryDatabase implements PagingStoreFactory {
    private synchronized SequentialFileFactory newFileFactory(final String directoryName, boolean writeToDirectory) throws Exception {
       JDBCSequentialFile directoryList = (JDBCSequentialFile) pagingFactoryFileFactory.createSequentialFile(DIRECTORY_NAME);
       directoryList.open();
-      SimpleString simpleString = SimpleString.toSimpleString(directoryName);
+      SimpleString simpleString = SimpleString.of(directoryName);
       ActiveMQBuffer buffer = ActiveMQBuffers.fixedBuffer(simpleString.sizeof());
       buffer.writeSimpleString(simpleString);
       if (writeToDirectory) directoryList.write(buffer, true);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryNIO.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryNIO.java
index cdb7f76c8e..9e8d5cf748 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryNIO.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryNIO.java
@@ -224,7 +224,7 @@ public class PagingStoreFactoryNIO implements PagingStoreFactory {
                continue;
             }
 
-            SimpleString address = new SimpleString(addressString);
+            SimpleString address = SimpleString.of(addressString);
 
             SequentialFileFactory factory = newFileFactory(guid);
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/config/PersistedAddressSettingJSON.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/config/PersistedAddressSettingJSON.java
index 40aec90159..3f47c97767 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/config/PersistedAddressSettingJSON.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/config/PersistedAddressSettingJSON.java
@@ -47,7 +47,7 @@ public class PersistedAddressSettingJSON extends AbstractPersistedAddressSetting
    }
 
    public PersistedAddressSettingJSON(SimpleString addressMatch, AddressSettings setting, String jsonSetting) {
-      this(addressMatch, setting, SimpleString.toSimpleString(jsonSetting));
+      this(addressMatch, setting, SimpleString.of(jsonSetting));
    }
 
    @Override
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/config/PersistedSecuritySetting.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/config/PersistedSecuritySetting.java
index b858573f84..4b4c0b2f90 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/config/PersistedSecuritySetting.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/config/PersistedSecuritySetting.java
@@ -87,19 +87,19 @@ public class PersistedSecuritySetting implements EncodingSupport {
                                    final String viewRoles,
                                    final String editRoles) {
       super();
-      this.addressMatch = SimpleString.toSimpleString(addressMatch);
-      this.sendRoles = SimpleString.toSimpleString(sendRoles);
-      this.consumeRoles = SimpleString.toSimpleString(consumeRoles);
-      this.createDurableQueueRoles = SimpleString.toSimpleString(createDurableQueueRoles);
-      this.deleteDurableQueueRoles = SimpleString.toSimpleString(deleteDurableQueueRoles);
-      this.createNonDurableQueueRoles = SimpleString.toSimpleString(createNonDurableQueueRoles);
-      this.deleteNonDurableQueueRoles = SimpleString.toSimpleString(deleteNonDurableQueueRoles);
-      this.manageRoles = SimpleString.toSimpleString(manageRoles);
-      this.browseRoles = SimpleString.toSimpleString(browseRoles);
-      this.createAddressRoles = SimpleString.toSimpleString(createAddressRoles);
-      this.deleteAddressRoles = SimpleString.toSimpleString(deleteAddressRoles);
-      this.viewRoles = SimpleString.toSimpleString(viewRoles);
-      this.editRoles = SimpleString.toSimpleString(editRoles);
+      this.addressMatch = SimpleString.of(addressMatch);
+      this.sendRoles = SimpleString.of(sendRoles);
+      this.consumeRoles = SimpleString.of(consumeRoles);
+      this.createDurableQueueRoles = SimpleString.of(createDurableQueueRoles);
+      this.deleteDurableQueueRoles = SimpleString.of(deleteDurableQueueRoles);
+      this.createNonDurableQueueRoles = SimpleString.of(createNonDurableQueueRoles);
+      this.deleteNonDurableQueueRoles = SimpleString.of(deleteNonDurableQueueRoles);
+      this.manageRoles = SimpleString.of(manageRoles);
+      this.browseRoles = SimpleString.of(browseRoles);
+      this.createAddressRoles = SimpleString.of(createAddressRoles);
+      this.deleteAddressRoles = SimpleString.of(deleteAddressRoles);
+      this.viewRoles = SimpleString.of(viewRoles);
+      this.editRoles = SimpleString.of(editRoles);
    }
 
 
@@ -204,7 +204,7 @@ public class PersistedSecuritySetting implements EncodingSupport {
    @Override
    public void encode(final ActiveMQBuffer buffer) {
       if (addressMatch == null) {
-         addressMatch = new SimpleString("");
+         addressMatch = SimpleString.of("");
       }
       buffer.writeSimpleString(addressMatch);
       buffer.writeNullableSimpleString(sendRoles);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/codec/DuplicateIDEncoding.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/codec/DuplicateIDEncoding.java
index 11b4eeace9..ab2cda98e7 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/codec/DuplicateIDEncoding.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/codec/DuplicateIDEncoding.java
@@ -76,7 +76,7 @@ public class DuplicateIDEncoding implements EncodingSupport {
       // and this may be useful to validate the journal on those tests
       // You may uncomment these two lines on that case and replcate the toString for the PrintData
 
-      // SimpleString simpleStr = new SimpleString(duplID);
+      // SimpleString simpleStr = SimpleString.of(duplID);
       // return "DuplicateIDEncoding [address=" + address + ", duplID=" + simpleStr + "]";
 
       String bridgeRepresentation = null;
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/codec/PersistentQueueBindingEncoding.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/codec/PersistentQueueBindingEncoding.java
index c9f55dcc99..71464a5141 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/codec/PersistentQueueBindingEncoding.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/codec/PersistentQueueBindingEncoding.java
@@ -387,7 +387,7 @@ public class PersistentQueueBindingEncoding implements EncodingSupport, QueueBin
             String[] keyValuePair = element.split("=");
             if (keyValuePair.length == 2) {
                if (keyValuePair[0].equals("user")) {
-                  user = SimpleString.toSimpleString(keyValuePair[1]);
+                  user = SimpleString.of(keyValuePair[1]);
                }
             }
          }
@@ -555,6 +555,6 @@ public class PersistentQueueBindingEncoding implements EncodingSupport, QueueBin
       if (user != null) {
          metadata.append("user=").append(user).append(";");
       }
-      return SimpleString.toSimpleString(metadata.toString());
+      return SimpleString.of(metadata.toString());
    }
 }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
index 74374ce819..b1e8cda52c 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
@@ -118,11 +118,11 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
 
    private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-   public static final SimpleString HDR_RESET_QUEUE_DATA = new SimpleString("_AMQ_RESET_QUEUE_DATA");
+   public static final SimpleString HDR_RESET_QUEUE_DATA = SimpleString.of("_AMQ_RESET_QUEUE_DATA");
 
-   public static final SimpleString HDR_RESET_QUEUE_DATA_COMPLETE = new SimpleString("_AMQ_RESET_QUEUE_DATA_COMPLETE");
+   public static final SimpleString HDR_RESET_QUEUE_DATA_COMPLETE = SimpleString.of("_AMQ_RESET_QUEUE_DATA_COMPLETE");
 
-   public static final SimpleString BRIDGE_CACHE_STR = new SimpleString("BRIDGE.");
+   public static final SimpleString BRIDGE_CACHE_STR = SimpleString.of("BRIDGE.");
 
    private final AddressManager addressManager;
 
@@ -579,11 +579,11 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
          String delimiter = server.getConfiguration().getWildcardConfiguration().getDelimiterString();
          String address = ResourceNames.decomposeRetroactiveResourceAddressName(prefix, delimiter, name.toString());
          AddressSettings settings = addressSettingsRepository.getMatch(address);
-         Queue internalAnycastQueue = server.locateQueue(ResourceNames.getRetroactiveResourceQueueName(prefix, delimiter, SimpleString.toSimpleString(address), RoutingType.ANYCAST));
+         Queue internalAnycastQueue = server.locateQueue(ResourceNames.getRetroactiveResourceQueueName(prefix, delimiter, SimpleString.of(address), RoutingType.ANYCAST));
          if (internalAnycastQueue != null && internalAnycastQueue.getRingSize() != settings.getRetroactiveMessageCount()) {
             internalAnycastQueue.setRingSize(settings.getRetroactiveMessageCount());
          }
-         Queue internalMulticastQueue = server.locateQueue(ResourceNames.getRetroactiveResourceQueueName(prefix, delimiter, SimpleString.toSimpleString(address), RoutingType.MULTICAST));
+         Queue internalMulticastQueue = server.locateQueue(ResourceNames.getRetroactiveResourceQueueName(prefix, delimiter, SimpleString.of(address), RoutingType.MULTICAST));
          if (internalMulticastQueue != null && internalMulticastQueue.getRingSize() != settings.getRetroactiveMessageCount()) {
             internalMulticastQueue.setRingSize(settings.getRetroactiveMessageCount());
          }
@@ -792,7 +792,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
                changed = true;
                queue.setDelayBeforeDispatch(queueConfiguration.getDelayBeforeDispatch());
             }
-            final SimpleString empty = new SimpleString("");
+            final SimpleString empty = SimpleString.of("");
             Filter oldFilter = FilterImpl.createFilter(queue.getFilter() == null ? empty : queue.getFilter().getFilterString());
             Filter newFilter = FilterImpl.createFilter(queueConfiguration.getFilterString() == null ? empty : queueConfiguration.getFilterString());
             if ((forceUpdate || newFilter != oldFilter) && !Objects.equals(oldFilter, newFilter)) {
@@ -1930,7 +1930,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
 
       message.setAddress(queueName);
 
-      message.putStringProperty(ManagementHelper.HDR_NOTIFICATION_TYPE, new SimpleString(type.toString()));
+      message.putStringProperty(ManagementHelper.HDR_NOTIFICATION_TYPE, SimpleString.of(type.toString()));
 
       long timestamp = System.currentTimeMillis();
       message.putLongProperty(ManagementHelper.HDR_NOTIFICATION_TIMESTAMP, timestamp);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQPacketHandler.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQPacketHandler.java
index b3077f8cd7..0417b43fb2 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQPacketHandler.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQPacketHandler.java
@@ -138,7 +138,7 @@ public class ActiveMQPacketHandler implements ChannelHandler {
 
    private void handleCheckForFailover(CheckFailoverMessage failoverMessage) {
       String nodeID = failoverMessage.getNodeID();
-      boolean okToFailover = nodeID == null || server.getNodeID().toString().equals(nodeID) || !(server.getHAPolicy().canScaleDown() && !server.hasScaledDown(new SimpleString(nodeID)));
+      boolean okToFailover = nodeID == null || server.getNodeID().toString().equals(nodeID) || !(server.getHAPolicy().canScaleDown() && !server.hasScaledDown(SimpleString.of(nodeID)));
       channel1.send(new CheckFailoverReplyMessage(okToFailover));
    }
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/CoreProtocolManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/CoreProtocolManager.java
index a9f86c588a..8c5c9a9a99 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/CoreProtocolManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/CoreProtocolManager.java
@@ -215,14 +215,14 @@ public class CoreProtocolManager implements ProtocolManager<Interceptor, ActiveM
    @Override
    public void setAnycastPrefix(String anycastPrefix) {
       for (String prefix : anycastPrefix.split(",")) {
-         prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.ANYCAST);
+         prefixes.put(SimpleString.of(prefix), RoutingType.ANYCAST);
       }
    }
 
    @Override
    public void setMulticastPrefix(String multicastPrefix) {
       for (String prefix : multicastPrefix.split(",")) {
-         prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.MULTICAST);
+         prefixes.put(SimpleString.of(prefix), RoutingType.MULTICAST);
       }
    }
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java
index f97c98fe3e..7842c294cd 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java
@@ -138,8 +138,8 @@ public final class InVMAcceptor extends AbstractAcceptor {
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("factory"), new SimpleString(InVMAcceptorFactory.class.getName()));
-         props.putIntProperty(new SimpleString("id"), id);
+         props.putSimpleStringProperty(SimpleString.of("factory"), SimpleString.of(InVMAcceptorFactory.class.getName()));
+         props.putIntProperty(SimpleString.of("id"), id);
          Notification notification = new Notification(null, CoreNotificationType.ACCEPTOR_STARTED, props);
          notificationService.sendNotification(notification);
       }
@@ -167,8 +167,8 @@ public final class InVMAcceptor extends AbstractAcceptor {
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("factory"), new SimpleString(InVMAcceptorFactory.class.getName()));
-         props.putIntProperty(new SimpleString("id"), id);
+         props.putSimpleStringProperty(SimpleString.of("factory"), SimpleString.of(InVMAcceptorFactory.class.getName()));
+         props.putIntProperty(SimpleString.of("id"), id);
          Notification notification = new Notification(null, CoreNotificationType.ACCEPTOR_STOPPED, props);
          try {
             notificationService.sendNotification(notification);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
index 1b5fe8adcd..8153ec574f 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
@@ -534,9 +534,9 @@ public class NettyAcceptor extends AbstractAcceptor {
 
          if (notificationService != null) {
             TypedProperties props = new TypedProperties();
-            props.putSimpleStringProperty(new SimpleString("factory"), new SimpleString(NettyAcceptorFactory.class.getName()));
-            props.putSimpleStringProperty(new SimpleString("host"), new SimpleString(host));
-            props.putIntProperty(new SimpleString("port"), actualPort);
+            props.putSimpleStringProperty(SimpleString.of("factory"), SimpleString.of(NettyAcceptorFactory.class.getName()));
+            props.putSimpleStringProperty(SimpleString.of("host"), SimpleString.of(host));
+            props.putIntProperty(SimpleString.of("port"), actualPort);
             Notification notification = new Notification(null, CoreNotificationType.ACCEPTOR_STARTED, props);
             notificationService.sendNotification(notification);
          }
@@ -801,9 +801,9 @@ public class NettyAcceptor extends AbstractAcceptor {
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("factory"), new SimpleString(NettyAcceptorFactory.class.getName()));
-         props.putSimpleStringProperty(new SimpleString("host"), new SimpleString(host));
-         props.putIntProperty(new SimpleString("port"), port);
+         props.putSimpleStringProperty(SimpleString.of("factory"), SimpleString.of(NettyAcceptorFactory.class.getName()));
+         props.putSimpleStringProperty(SimpleString.of("host"), SimpleString.of(host));
+         props.putIntProperty(SimpleString.of("port"), port);
          Notification notification = new Notification(null, CoreNotificationType.ACCEPTOR_STOPPED, props);
          try {
             notificationService.sendNotification(notification);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/security/impl/SecurityStoreImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/security/impl/SecurityStoreImpl.java
index 68c47b62c1..2b7da0919f 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/security/impl/SecurityStoreImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/security/impl/SecurityStoreImpl.java
@@ -325,8 +325,8 @@ public class SecurityStoreImpl implements SecurityStore, HierarchicalRepositoryC
                TypedProperties props = new TypedProperties();
 
                props.putSimpleStringProperty(ManagementHelper.HDR_ADDRESS, bareAddress);
-               props.putSimpleStringProperty(ManagementHelper.HDR_CHECK_TYPE, new SimpleString(checkType.toString()));
-               props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.toSimpleString(getCaller(user, session.getRemotingConnection().getSubject())));
+               props.putSimpleStringProperty(ManagementHelper.HDR_CHECK_TYPE, SimpleString.of(checkType.toString()));
+               props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.of(getCaller(user, session.getRemotingConnection().getSubject())));
 
                Notification notification = new Notification(null, CoreNotificationType.SECURITY_PERMISSION_VIOLATION, props);
 
@@ -406,9 +406,9 @@ public class SecurityStoreImpl implements SecurityStore, HierarchicalRepositoryC
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.toSimpleString(user));
-         props.putSimpleStringProperty(ManagementHelper.HDR_CERT_SUBJECT_DN, SimpleString.toSimpleString(certSubjectDN));
-         props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.toSimpleString(connection == null ? "null" : connection.getRemoteAddress()));
+         props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.of(user));
+         props.putSimpleStringProperty(ManagementHelper.HDR_CERT_SUBJECT_DN, SimpleString.of(certSubjectDN));
+         props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.of(connection == null ? "null" : connection.getRemoteAddress()));
 
          Notification notification = new Notification(null, CoreNotificationType.SECURITY_AUTHENTICATION_VIOLATION, props);
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java
index e46e3fdafa..e491706d80 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java
@@ -679,7 +679,7 @@ public interface ActiveMQServer extends ServiceComponent {
    Queue locateQueue(SimpleString queueName);
 
    default Queue locateQueue(String queueName) {
-      return locateQueue(SimpleString.toSimpleString(queueName));
+      return locateQueue(SimpleString.of(queueName));
    }
 
    default BindingQueryResult bindingQuery(SimpleString address) throws Exception {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/NodeManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/NodeManager.java
index 28baf1edf8..7ac6ab8069 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/NodeManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/NodeManager.java
@@ -125,7 +125,7 @@ public abstract class NodeManager implements ActiveMQComponent {
     */
    public void setNodeID(String nodeID) {
       synchronized (nodeIDGuard) {
-         this.nodeID = new SimpleString(nodeID);
+         this.nodeID = SimpleString.of(nodeID);
          this.uuid = new UUID(UUID.TYPE_TIME_BASED, UUID.stringToBytes(nodeID));
       }
    }
@@ -136,7 +136,7 @@ public abstract class NodeManager implements ActiveMQComponent {
    protected void setUUID(UUID generateUUID) {
       synchronized (nodeIDGuard) {
          uuid = generateUUID;
-         nodeID = new SimpleString(uuid.toString());
+         nodeID = SimpleString.of(uuid.toString());
       }
    }
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterController.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterController.java
index 8b8269ff09..970ed9865d 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterController.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterController.java
@@ -376,7 +376,7 @@ public class ClusterController implements ActiveMQComponent {
    }
 
    public void setReplicatedClusterName(String replicatedClusterName) {
-      this.replicatedClusterName = new SimpleString(replicatedClusterName);
+      this.replicatedClusterName = SimpleString.of(replicatedClusterName);
    }
 
    public Map<SimpleString, ServerLocatorInternal> getLocators() {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
index e2117758f4..50668350fd 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
@@ -402,7 +402,7 @@ public class ClusterManager implements ActiveMQComponent {
          return false;
       }
 
-      Binding binding = postOffice.getBinding(new SimpleString(config.getQueueName()));
+      Binding binding = postOffice.getBinding(SimpleString.of(config.getQueueName()));
 
       if (binding == null) {
          ActiveMQServerLogger.LOGGER.bridgeQueueNotFound(config.getQueueName(), config.getName());
@@ -627,7 +627,7 @@ public class ClusterManager implements ActiveMQComponent {
             logger.debug("{} Starting a Discovery Group Cluster Connection, name={}, dg={}", this, config.getDiscoveryGroupName(), dg);
          }
 
-         clusterConnection = new ClusterConnectionImpl(this, dg, connector, new SimpleString(config.getName()), new SimpleString(config.getAddress() != null ? config.getAddress() : ""), config.getMinLargeMessageSize(), config.getClientFailureCheckPeriod(), config.getConnectionTTL(), config.getRetryInterval(), config.getRetryIntervalMultiplier(), config.getMaxRetryInterval(), config.getInitialConnectAttempts(), config.getReconnectAttempts(), config.getCallTimeout(), config.getCallFailover [...]
+         clusterConnection = new ClusterConnectionImpl(this, dg, connector, SimpleString.of(config.getName()), SimpleString.of(config.getAddress() != null ? config.getAddress() : ""), config.getMinLargeMessageSize(), config.getClientFailureCheckPeriod(), config.getConnectionTTL(), config.getRetryInterval(), config.getRetryIntervalMultiplier(), config.getMaxRetryInterval(), config.getInitialConnectAttempts(), config.getReconnectAttempts(), config.getCallTimeout(), config.getCallFailoverTi [...]
 
          clusterController.addClusterConnection(clusterConnection.getName(), dg, config, connector);
       } else {
@@ -637,7 +637,7 @@ public class ClusterManager implements ActiveMQComponent {
             logger.debug("{} defining cluster connection towards {}", this, Arrays.toString(tcConfigs));
          }
 
-         clusterConnection = new ClusterConnectionImpl(this, tcConfigs, connector, new SimpleString(config.getName()), new SimpleString(config.getAddress()), config.getMinLargeMessageSize(), config.getClientFailureCheckPeriod(), config.getConnectionTTL(), config.getRetryInterval(), config.getRetryIntervalMultiplier(), config.getMaxRetryInterval(), config.getInitialConnectAttempts(), config.getReconnectAttempts(), config.getCallTimeout(), config.getCallFailoverTimeout(), config.isDuplicat [...]
+         clusterConnection = new ClusterConnectionImpl(this, tcConfigs, connector, SimpleString.of(config.getName()), SimpleString.of(config.getAddress()), config.getMinLargeMessageSize(), config.getClientFailureCheckPeriod(), config.getConnectionTTL(), config.getRetryInterval(), config.getRetryIntervalMultiplier(), config.getMaxRetryInterval(), config.getInitialConnectAttempts(), config.getReconnectAttempts(), config.getCallTimeout(), config.getCallFailoverTimeout(), config.isDuplicateD [...]
 
          clusterController.addClusterConnection(clusterConnection.getName(), tcConfigs, config, connector);
       }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
index 61df64d845..7e24c96353 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
@@ -263,7 +263,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("name"), SimpleString.toSimpleString(configuration.getName()));
+         props.putSimpleStringProperty(SimpleString.of("name"), SimpleString.of(configuration.getName()));
          Notification notification = new Notification(nodeUUID.toString(), CoreNotificationType.BRIDGE_STARTED, props);
          notificationService.sendNotification(notification);
       }
@@ -383,7 +383,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("name"), SimpleString.toSimpleString(configuration.getName()));
+         props.putSimpleStringProperty(SimpleString.of("name"), SimpleString.of(configuration.getName()));
          Notification notification = new Notification(nodeUUID.toString(), CoreNotificationType.BRIDGE_STOPPED, props);
          try {
             notificationService.sendNotification(notification);
@@ -401,7 +401,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("name"), SimpleString.toSimpleString(configuration.getName()));
+         props.putSimpleStringProperty(SimpleString.of("name"), SimpleString.of(configuration.getName()));
          Notification notification = new Notification(nodeUUID.toString(), CoreNotificationType.BRIDGE_STOPPED, props);
          try {
             notificationService.sendNotification(notification);
@@ -428,7 +428,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
 
    @Override
    public SimpleString getName() {
-      return SimpleString.toSimpleString(configuration.getName());
+      return SimpleString.of(configuration.getName());
    }
 
    @Override
@@ -445,7 +445,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
 
    @Override
    public SimpleString getForwardingAddress() {
-      return SimpleString.toSimpleString(configuration.getForwardingAddress());
+      return SimpleString.of(configuration.getForwardingAddress());
    }
 
    // For testing only
@@ -605,7 +605,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
          final SimpleString dest;
 
          if (configuration.getForwardingAddress() != null) {
-            dest = SimpleString.toSimpleString(configuration.getForwardingAddress());
+            dest = SimpleString.of(configuration.getForwardingAddress());
          } else {
             // Preserve the original address
             dest = ref.getMessage().getAddressSimpleString();
@@ -708,7 +708,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
             if (logger.isDebugEnabled()) {
                logger.debug("Moving {} messages from {} to {}", queue.getMessageCount(), queue.getName(), scaleDownTargetNodeID);
             }
-            ((QueueImpl) queue).moveReferencesBetweenSnFQueues(SimpleString.toSimpleString(scaleDownTargetNodeID));
+            ((QueueImpl) queue).moveReferencesBetweenSnFQueues(SimpleString.of(scaleDownTargetNodeID));
 
             // stop the bridge from trying to reconnect and clean up all the bindings
             fail(true, true);
@@ -960,7 +960,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
                ClientSession.AddressQuery query = null;
 
                try {
-                  query = session.addressQuery(SimpleString.toSimpleString(configuration.getForwardingAddress()));
+                  query = session.addressQuery(SimpleString.of(configuration.getForwardingAddress()));
                } catch (Throwable e) {
                   ActiveMQServerLogger.LOGGER.errorQueryingBridge(configuration.getName(), e);
                   // This was an issue during startup, we will not count this retry
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BroadcastGroupImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BroadcastGroupImpl.java
index 7d9ab5667c..e41e8780b9 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BroadcastGroupImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BroadcastGroupImpl.java
@@ -110,7 +110,7 @@ public class BroadcastGroupImpl implements BroadcastGroup, Runnable {
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("name"), new SimpleString(name));
+         props.putSimpleStringProperty(SimpleString.of("name"), SimpleString.of(name));
          Notification notification = new Notification(nodeManager.getNodeId().toString(), CoreNotificationType.BROADCAST_GROUP_STARTED, props);
          notificationService.sendNotification(notification);
       }
@@ -138,7 +138,7 @@ public class BroadcastGroupImpl implements BroadcastGroup, Runnable {
 
       if (notificationService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("name"), new SimpleString(name));
+         props.putSimpleStringProperty(SimpleString.of("name"), SimpleString.of(name));
          Notification notification = new Notification(nodeManager.getNodeId().toString(), CoreNotificationType.BROADCAST_GROUP_STOPPED, props);
          try {
             notificationService.sendNotification(notification);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java
index 22a8bdb476..2eebb775e1 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java
@@ -245,9 +245,9 @@ public class ClusterConnectionBridge extends BridgeImpl {
             "." +
             clusterConnection.getServer().toString().replaceAll(CompositeAddress.SEPARATOR, "_");
 
-         SimpleString notifQueueName = new SimpleString(qName);
+         SimpleString notifQueueName = SimpleString.of(qName);
 
-         SimpleString filter = new SimpleString("(" + ManagementHelper.HDR_BINDING_TYPE + " <> " + BindingType.DIVERT.toInt() +
+         SimpleString filter = SimpleString.of("(" + ManagementHelper.HDR_BINDING_TYPE + " <> " + BindingType.DIVERT.toInt() +
                                                    " OR "
                                                    + ManagementHelper.HDR_BINDING_TYPE + " IS NULL)" +
                                                    " AND " +
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
index b377da262e..7eaaafea4a 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
@@ -457,7 +457,7 @@ public final class ClusterConnectionImpl implements ClusterConnection, AfterConn
 
       if (managementService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("name"), name);
+         props.putSimpleStringProperty(SimpleString.of("name"), name);
          //nodeID can be null if there's only a backup
          SimpleString nodeId = nodeManager.getNodeId();
          Notification notification = new Notification(nodeId == null ? null : nodeId.toString(), CoreNotificationType.CLUSTER_CONNECTION_STOPPED, props);
@@ -718,7 +718,7 @@ public final class ClusterConnectionImpl implements ClusterConnection, AfterConn
 
       if (managementService != null) {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("name"), name);
+         props.putSimpleStringProperty(SimpleString.of("name"), name);
          Notification notification = new Notification(nodeManager.getNodeId().toString(), CoreNotificationType.CLUSTER_CONNECTION_STARTED, props);
          logger.debug("sending notification: {}", notification);
          managementService.sendNotification(notification);
@@ -822,7 +822,7 @@ public final class ClusterConnectionImpl implements ClusterConnection, AfterConn
    }
 
    public SimpleString getSfQueueName(String nodeID) {
-      return new SimpleString(storeAndForwardPrefix + name + "." + nodeID);
+      return SimpleString.of(storeAndForwardPrefix + name + "." + nodeID);
    }
 
    @Override
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/quorum/QuorumVoteServerConnect.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/quorum/QuorumVoteServerConnect.java
index 5ba9be143c..7b1aa55c49 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/quorum/QuorumVoteServerConnect.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/quorum/QuorumVoteServerConnect.java
@@ -28,7 +28,7 @@ import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
  */
 public class QuorumVoteServerConnect extends QuorumVote<ServerConnectVote, Boolean> {
 
-   public static final SimpleString PRIMARY_FAILOVER_VOTE = new SimpleString("PrimaryFailoverQuorumVote");
+   public static final SimpleString PRIMARY_FAILOVER_VOTE = SimpleString.of("PrimaryFailoverQuorumVote");
    // this flag mark the end of the vote
    private final CountDownLatch voteCompleted;
    private final String targetNodeId;
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/AbstractFederationStream.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/AbstractFederationStream.java
index 09e3f93f95..609321c17e 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/AbstractFederationStream.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/AbstractFederationStream.java
@@ -48,7 +48,7 @@ public abstract class AbstractFederationStream implements FederationStream {
       this.server = server;
       this.federation = federation;
       Objects.requireNonNull(config.getName());
-      this.name = SimpleString.toSimpleString(config.getName());
+      this.name = SimpleString.of(config.getName());
       this.config = config;
       this.connection = connection != null ? connection : new FederationConnection(server.getConfiguration(), name, config.getConnectionConfiguration());
    }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/Federation.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/Federation.java
index 074b218195..e9b974ccca 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/Federation.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/Federation.java
@@ -59,7 +59,7 @@ public class Federation {
       this.server = server;
       this.config = config;
       Objects.requireNonNull(config.getName());
-      this.name = SimpleString.toSimpleString(config.getName());
+      this.name = SimpleString.of(config.getName());
    }
 
    public synchronized void start() throws ActiveMQException {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/address/FederatedAddress.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/address/FederatedAddress.java
index a2d42e8a0d..95802bd300 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/address/FederatedAddress.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/address/FederatedAddress.java
@@ -72,7 +72,7 @@ public class FederatedAddress extends FederatedAbstract implements ActiveMQServe
 
    public static final String FEDERATED_QUEUE_PREFIX = "federated";
 
-   public static final SimpleString HDR_HOPS = new SimpleString("_AMQ_Hops");
+   public static final SimpleString HDR_HOPS = SimpleString.of("_AMQ_Hops");
    private final SimpleString queueNameFormat;
    private final SimpleString filterString;
    private final Set<Matcher> includes;
@@ -90,7 +90,7 @@ public class FederatedAddress extends FederatedAbstract implements ActiveMQServe
       } else {
          this.filterString = HDR_HOPS.concat(" IS NULL OR ").concat(HDR_HOPS).concat("<").concat(Integer.toString(config.getMaxHops()));
       }
-      this.queueNameFormat = SimpleString.toSimpleString(FEDERATED_QUEUE_PREFIX + ".${federation}.${upstream}.${address}.${routeType}");
+      this.queueNameFormat = SimpleString.of(FEDERATED_QUEUE_PREFIX + ".${federation}.${upstream}.${address}.${routeType}");
       if (config.getIncludes().isEmpty()) {
          includes = Collections.emptySet();
       } else {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/address/FederatedAddressConsumerKey.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/address/FederatedAddressConsumerKey.java
index 8958f7743d..9b896362ce 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/address/FederatedAddressConsumerKey.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/address/FederatedAddressConsumerKey.java
@@ -55,7 +55,7 @@ public class FederatedAddressConsumerKey implements FederatedConsumerKey {
          data.put("routeType", routingType.name().toLowerCase());
          data.put("upstream", upstream.toString());
          data.put("federation", federation.toString());
-         queueName = SimpleString.toSimpleString(StrSubstitutor.replace(queueNameFormat, data));
+         queueName = SimpleString.of(StrSubstitutor.replace(queueNameFormat, data));
       }
       return queueName;
    }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/group/impl/LocalGroupingHandler.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/group/impl/LocalGroupingHandler.java
index 40850d3cbb..4eefd41a53 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/group/impl/LocalGroupingHandler.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/group/impl/LocalGroupingHandler.java
@@ -382,7 +382,7 @@ public final class LocalGroupingHandler extends GroupHandlingAbstract {
                   try {
                      storageManager.commitBindings(txID);
                   } catch (Exception e) {
-                     ActiveMQServerLogger.LOGGER.unableToDeleteGroupBindings(SimpleString.toSimpleString("TX:" + txID), e);
+                     ActiveMQServerLogger.LOGGER.unableToDeleteGroupBindings(SimpleString.of("TX:" + txID), e);
                   }
                }
             }
@@ -446,7 +446,7 @@ public final class LocalGroupingHandler extends GroupHandlingAbstract {
                try {
                   storageManager.commitBindings(txID);
                } catch (Exception e) {
-                  ActiveMQServerLogger.LOGGER.unableToDeleteGroupBindings(SimpleString.toSimpleString("TX:" + txID), e);
+                  ActiveMQServerLogger.LOGGER.unableToDeleteGroupBindings(SimpleString.of("TX:" + txID), e);
                }
             }
          }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index 6877d7bc33..1c3b796c0a 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -1072,7 +1072,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
 
    @Override
    public boolean isAddressBound(String address) throws Exception {
-      return postOffice.isAddressBound(SimpleString.toSimpleString(address));
+      return postOffice.isAddressBound(SimpleString.of(address));
    }
 
    @Override
@@ -1873,7 +1873,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
    }
 
    public int getQueueCountForUser(String username) throws Exception {
-      SimpleString userNameSimpleString = SimpleString.toSimpleString(username);
+      SimpleString userNameSimpleString = SimpleString.of(username);
 
       AtomicInteger bindingsCount = new AtomicInteger(0);
       postOffice.getAllBindings().forEach((b) -> {
@@ -1914,7 +1914,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
                                                                        autoCommitSends, autoCommitAcks, preAcknowledge, xa, defaultAddress, callback, autoCreateQueues, context, prefixes));
       }
 
-      ServerSessionImpl session = new ServerSessionImpl(name, username, password, validatedUser, minLargeMessageSize, autoCommitSends, autoCommitAcks, preAcknowledge, configuration.isPersistDeliveryCountBeforeDelivery(), xa, connection, storageManager, postOffice, resourceManager, securityStore, managementService, this, configuration.getManagementAddress(), defaultAddress == null ? null : new SimpleString(defaultAddress), callback, context, pagingManager, prefixes, securityDomain, isLega [...]
+      ServerSessionImpl session = new ServerSessionImpl(name, username, password, validatedUser, minLargeMessageSize, autoCommitSends, autoCommitAcks, preAcknowledge, configuration.isPersistDeliveryCountBeforeDelivery(), xa, connection, storageManager, postOffice, resourceManager, securityStore, managementService, this, configuration.getManagementAddress(), defaultAddress == null ? null : SimpleString.of(defaultAddress), callback, context, pagingManager, prefixes, securityDomain, isLegac [...]
 
       sessions.put(name, session);
 
@@ -2411,7 +2411,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
                             final String filterString,
                             final boolean durable,
                             final boolean temporary) throws Exception {
-      return deployQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(resourceName), SimpleString.toSimpleString(filterString), durable, temporary);
+      return deployQueue(SimpleString.of(address), SimpleString.of(resourceName), SimpleString.of(filterString), durable, temporary);
    }
 
    @Override
@@ -2918,7 +2918,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
          return null;
       }
 
-      SimpleString sName = new SimpleString(config.getName());
+      SimpleString sName = SimpleString.of(config.getName());
 
       if (postOffice.getBinding(sName) != null) {
          ActiveMQServerLogger.LOGGER.divertBindingAlreadyExists(sName);
@@ -2926,14 +2926,14 @@ public class ActiveMQServerImpl implements ActiveMQServer {
          return null;
       }
 
-      SimpleString sAddress = new SimpleString(config.getAddress());
+      SimpleString sAddress = SimpleString.of(config.getAddress());
 
       Transformer transformer = getServiceRegistry().getDivertTransformer(config.getName(), config.getTransformerConfiguration());
 
       Filter filter = FilterImpl.createFilter(config.getFilterString());
 
-      Divert divert = new DivertImpl(sName, sAddress, new SimpleString(config.getForwardingAddress()),
-                                     new SimpleString(config.getRoutingName()), config.isExclusive(),
+      Divert divert = new DivertImpl(sName, sAddress, SimpleString.of(config.getForwardingAddress()),
+                                     SimpleString.of(config.getRoutingName()), config.isExclusive(),
                                      filter, transformer, postOffice, storageManager, config.getRoutingType());
 
       Binding binding = new DivertBinding(storageManager.generateID(), sAddress, divert);
@@ -2949,7 +2949,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
 
    @Override
    public Divert updateDivert(DivertConfiguration config) throws Exception {
-      final DivertBinding divertBinding = (DivertBinding) postOffice.getBinding(SimpleString.toSimpleString(config.getName()));
+      final DivertBinding divertBinding = (DivertBinding) postOffice.getBinding(SimpleString.of(config.getName()));
       if (divertBinding == null) {
          return null;
       }
@@ -2973,7 +2973,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
       }
 
       if (config.getForwardingAddress() != null) {
-         SimpleString forwardAddress = SimpleString.toSimpleString(config.getForwardingAddress());
+         SimpleString forwardAddress = SimpleString.of(config.getForwardingAddress());
          if (!forwardAddress.equals(divert.getForwardAddress())) {
             divert.setForwardAddress(forwardAddress);
          }
@@ -3783,7 +3783,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
       for (CoreAddressConfiguration config : configuration.getAddressConfigurations()) {
          try {
             ActiveMQServerLogger.LOGGER.deployAddress(config.getName(), config.getRoutingTypes().toString());
-            SimpleString address = SimpleString.toSimpleString(config.getName());
+            SimpleString address = SimpleString.of(config.getName());
 
             AddressInfo tobe = new AddressInfo(address, config.getRoutingTypes());
 
@@ -4713,7 +4713,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
       setDefaultIfUnset(c::isNonDestructive, c::setNonDestructive, ActiveMQDefaultConfiguration.getDefaultNonDestructive());
       setDefaultIfUnset(c::getConsumersBeforeDispatch, c::setConsumersBeforeDispatch, ActiveMQDefaultConfiguration.getDefaultConsumersBeforeDispatch());
       setDefaultIfUnset(c::getDelayBeforeDispatch, c::setDelayBeforeDispatch, ActiveMQDefaultConfiguration.getDefaultDelayBeforeDispatch());
-      setDefaultIfUnset(c::getFilterString, c::setFilterString, new SimpleString(""));
+      setDefaultIfUnset(c::getFilterString, c::setFilterString, SimpleString.of(""));
       // Defaults to false automatically as per isConfigurationManaged() JavaDoc
       setDefaultIfUnset(c::isConfigurationManaged, c::setConfigurationManaged, false);
       // Setting to null might have side effects
@@ -4740,9 +4740,9 @@ public class ActiveMQServerImpl implements ActiveMQServer {
          // Go through the currently configured diverts
          for (DivertConfiguration divertConfig : configuration.getDivertConfigurations()) {
             // Retain diverts still configured to exist
-            divertsToRemove.remove(SimpleString.toSimpleString(divertConfig.getName()));
+            divertsToRemove.remove(SimpleString.of(divertConfig.getName()));
             // Deploy newly added diverts, reconfigure existing
-            final SimpleString divertName = new SimpleString(divertConfig.getName());
+            final SimpleString divertName = SimpleString.of(divertConfig.getName());
             final DivertBinding divertBinding = (DivertBinding) postOffice.getBinding(divertName);
             if (divertBinding == null) {
                deployDivert(divertConfig);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
index 61359cf411..44942f5e9a 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
@@ -102,7 +102,7 @@ public class AddressInfo {
    }
 
    public AddressInfo(String name) {
-      this(SimpleString.toSimpleString(name), createEmptySet());
+      this(SimpleString.of(name), createEmptySet());
    }
 
    public AddressInfo(SimpleString name) {
@@ -410,7 +410,7 @@ public class AddressInfo {
          this.id = jsonLong.longValue();
       } else if (key.equals("name")) {
          JsonString jasonString = (JsonString) value;
-         this.name = SimpleString.toSimpleString(jasonString.getString());
+         this.name = SimpleString.of(jasonString.getString());
       } else if (key.equals("auto-created")) {
          this.autoCreated = Boolean.valueOf(value.toString());
       } else if (key.equals("temporary")) {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/BucketMessageGroups.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/BucketMessageGroups.java
index 066bbf011f..15f7e14e38 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/BucketMessageGroups.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/BucketMessageGroups.java
@@ -37,7 +37,7 @@ public class BucketMessageGroups<C> implements MessageGroups<C> {
    //2) Admin users still need to interact with a specific bucket/group e.g. they may need to reset a bucket.
    //3) Choice of key is we want to avoid risk of clashing with users groups keys.
    //4) Actually makes testing a little easier as we know how the parsed int will hash.
-   private static SimpleString _AMQ_GROUP_BUCKET_INT_KEY = new SimpleString("_AMQ_GROUP_BUCKET_INT_KEY_");
+   private static SimpleString _AMQ_GROUP_BUCKET_INT_KEY = SimpleString.of("_AMQ_GROUP_BUCKET_INT_KEY_");
 
    private final int bucketCount;
    private C[] buckets;
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ColocatedActivation.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ColocatedActivation.java
index 19eb131bcd..b0091cf703 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ColocatedActivation.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ColocatedActivation.java
@@ -46,7 +46,7 @@ import org.apache.activemq.artemis.spi.core.remoting.Acceptor;
 
 public class ColocatedActivation extends PrimaryActivation {
 
-   private static final SimpleString REQUEST_BACKUP_QUORUM_VOTE = new SimpleString("RequestBackupQuorumVote");
+   private static final SimpleString REQUEST_BACKUP_QUORUM_VOTE = SimpleString.of("RequestBackupQuorumVote");
 
    private final ColocatedHAManager colocatedHAManager;
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java
index ff622fd87a..a279e2d123 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java
@@ -210,7 +210,7 @@ public class DivertImpl implements Divert {
       String[] split = forwardAddress.toString().split(",");
       SimpleString[] forwardAddresses = new SimpleString[split.length];
       for (int i = 0; i < split.length; i++) {
-         forwardAddresses[i] = new SimpleString(split[i].trim());
+         forwardAddresses[i] = SimpleString.of(split[i].trim());
       }
 
       this.forwardAddresses = forwardAddresses;
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
index 917b96e85e..55c0e0b69f 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
@@ -2823,7 +2823,7 @@ public class QueueImpl extends CriticalComponentImpl implements Queue {
             Binding binding = null;
 
             if (originalMessageQueue != null) {
-               binding = postOffice.getBinding(SimpleString.toSimpleString(originalMessageQueue));
+               binding = postOffice.getBinding(SimpleString.of(originalMessageQueue));
             }
 
             if (originalMessageAddress != null && binding != null) {
@@ -2841,7 +2841,7 @@ public class QueueImpl extends CriticalComponentImpl implements Queue {
                   }
                }
 
-               move(tx, SimpleString.toSimpleString(originalMessageAddress), null, ref, false, AckReason.NORMAL, null, targetQueue, true);
+               move(tx, SimpleString.of(originalMessageAddress), null, ref, false, AckReason.NORMAL, null, targetQueue, true);
 
                return true;
             }
@@ -3950,7 +3950,7 @@ public class QueueImpl extends CriticalComponentImpl implements Queue {
       if (isAutoCreate && !getAddress().equals(destinationAddress)) {
          if (destinationAddress != null && destinationAddress.length() != 0) {
             SimpleString destinationQueueName = prefix.concat(getAddress()).concat(suffix);
-            SimpleString filter = new SimpleString(String.format("%s = '%s'", Message.HDR_ORIGINAL_ADDRESS, getAddress()));
+            SimpleString filter = SimpleString.of(String.format("%s = '%s'", Message.HDR_ORIGINAL_ADDRESS, getAddress()));
             try {
                server.createQueue(new QueueConfiguration(destinationQueueName).setAddress(destinationAddress).setFilterString(filter).setAutoCreated(true).setAutoCreateAddress(true), true);
             } catch (ActiveMQQueueExistsException e) {
@@ -4851,15 +4851,15 @@ public class QueueImpl extends CriticalComponentImpl implements Queue {
 
                         props.putSimpleStringProperty(ManagementHelper.HDR_ADDRESS, address);
 
-                        props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.toSimpleString(connection.getRemoteAddress()));
+                        props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.of(connection.getRemoteAddress()));
 
                         if (connection.getID() != null) {
-                           props.putSimpleStringProperty(ManagementHelper.HDR_CONNECTION_NAME, SimpleString.toSimpleString(connection.getID().toString()));
+                           props.putSimpleStringProperty(ManagementHelper.HDR_CONNECTION_NAME, SimpleString.of(connection.getID().toString()));
                         }
 
                         props.putLongProperty(ManagementHelper.HDR_CONSUMER_NAME, serverConsumer.getID());
 
-                        props.putSimpleStringProperty(ManagementHelper.HDR_SESSION_NAME, SimpleString.toSimpleString(serverConsumer.getSessionID()));
+                        props.putSimpleStringProperty(ManagementHelper.HDR_SESSION_NAME, SimpleString.of(serverConsumer.getSessionID()));
 
                         Notification notification = new Notification(null, CoreNotificationType.CONSUMER_SLOW, props);
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ScaleDownHandler.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ScaleDownHandler.java
index 4540b51e7c..ff1dee0573 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ScaleDownHandler.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ScaleDownHandler.java
@@ -101,7 +101,7 @@ public class ScaleDownHandler {
       ActiveMQServerLogger.LOGGER.infoScaledDownMessages(num);
       scaleDownTransactions(sessionFactory, resourceManager, clusterControl.getClusterUser(), clusterControl.getClusterPassword());
       scaleDownDuplicateIDs(duplicateIDMap, sessionFactory, managementAddress, clusterControl.getClusterUser(), clusterControl.getClusterPassword());
-      clusterControl.announceScaleDown(new SimpleString(this.targetNodeId), nodeManager.getNodeId());
+      clusterControl.announceScaleDown(SimpleString.of(this.targetNodeId), nodeManager.getNodeId());
       return num;
    }
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java
index 22fa616c0e..f3e744e370 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java
@@ -614,14 +614,14 @@ public class ServerConsumerImpl implements ServerConsumer, ReadyListener {
          props.putIntProperty(ManagementHelper.HDR_CONSUMER_COUNT, messageQueue.getConsumerCount());
 
          // HORNETQ-946
-         props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.toSimpleString(session.getUsername()));
+         props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.of(session.getUsername()));
 
-         props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.toSimpleString(session.getRemotingConnection().getRemoteAddress()));
+         props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.of(session.getRemotingConnection().getRemoteAddress()));
 
-         props.putSimpleStringProperty(ManagementHelper.HDR_SESSION_NAME, SimpleString.toSimpleString(session.getName()));
+         props.putSimpleStringProperty(ManagementHelper.HDR_SESSION_NAME, SimpleString.of(session.getName()));
 
          if (session.getRemotingConnection().getClientID() != null) {
-            props.putSimpleStringProperty(ManagementHelper.HDR_CLIENT_ID, SimpleString.toSimpleString(session.getRemotingConnection().getClientID()));
+            props.putSimpleStringProperty(ManagementHelper.HDR_CLIENT_ID, SimpleString.of(session.getRemotingConnection().getClientID()));
          }
 
          props.putLongProperty(ManagementHelper.HDR_CONSUMER_NAME, getID());
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
index 0c13ffc04f..5d4dd6ace1 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
@@ -495,13 +495,13 @@ public class ServerSessionImpl implements ServerSession, FailureListener {
       }
       final TypedProperties props = new TypedProperties();
       if (this.getConnectionID() != null) {
-         props.putSimpleStringProperty(ManagementHelper.HDR_CONNECTION_NAME, SimpleString.toSimpleString(this.getConnectionID().toString()));
+         props.putSimpleStringProperty(ManagementHelper.HDR_CONNECTION_NAME, SimpleString.of(this.getConnectionID().toString()));
       }
-      props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.toSimpleString(this.getUsername()));
-      props.putSimpleStringProperty(ManagementHelper.HDR_SESSION_NAME, SimpleString.toSimpleString(this.getName()));
+      props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.of(this.getUsername()));
+      props.putSimpleStringProperty(ManagementHelper.HDR_SESSION_NAME, SimpleString.of(this.getName()));
 
-      props.putSimpleStringProperty(ManagementHelper.HDR_CLIENT_ID, SimpleString.toSimpleString(this.remotingConnection.getClientID()));
-      props.putSimpleStringProperty(ManagementHelper.HDR_PROTOCOL_NAME, SimpleString.toSimpleString(this.remotingConnection.getProtocolName()));
+      props.putSimpleStringProperty(ManagementHelper.HDR_CLIENT_ID, SimpleString.of(this.remotingConnection.getClientID()));
+      props.putSimpleStringProperty(ManagementHelper.HDR_PROTOCOL_NAME, SimpleString.of(this.remotingConnection.getProtocolName()));
       props.putSimpleStringProperty(ManagementHelper.HDR_ADDRESS, managementService.getManagementNotificationAddress());
       props.putIntProperty(ManagementHelper.HDR_DISTANCE, 0);
       managementService.sendNotification(new Notification(null, type, props));
@@ -609,9 +609,9 @@ public class ServerSessionImpl implements ServerSession, FailureListener {
          props.putIntProperty(ManagementHelper.HDR_CONSUMER_COUNT, theQueue.getConsumerCount());
 
          // HORNETQ-946
-         props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.toSimpleString(username));
+         props.putSimpleStringProperty(ManagementHelper.HDR_USER, SimpleString.of(username));
 
-         props.putSimpleStringProperty(ManagementHelper.HDR_VALIDATED_USER, SimpleString.toSimpleString(validatedUser));
+         props.putSimpleStringProperty(ManagementHelper.HDR_VALIDATED_USER, SimpleString.of(validatedUser));
 
          String certSubjectDN = "unavailable";
          X509Certificate[] certs = CertificateUtil.getCertsFromConnection(this.remotingConnection);
@@ -619,18 +619,18 @@ public class ServerSessionImpl implements ServerSession, FailureListener {
             certSubjectDN = certs[0].getSubjectDN().getName();
          }
 
-         props.putSimpleStringProperty(ManagementHelper.HDR_CERT_SUBJECT_DN, SimpleString.toSimpleString(certSubjectDN));
+         props.putSimpleStringProperty(ManagementHelper.HDR_CERT_SUBJECT_DN, SimpleString.of(certSubjectDN));
 
-         props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.toSimpleString(this.remotingConnection.getRemoteAddress()));
+         props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.of(this.remotingConnection.getRemoteAddress()));
 
-         props.putSimpleStringProperty(ManagementHelper.HDR_SESSION_NAME, SimpleString.toSimpleString(name));
+         props.putSimpleStringProperty(ManagementHelper.HDR_SESSION_NAME, SimpleString.of(name));
 
          if (filter != null) {
             props.putSimpleStringProperty(ManagementHelper.HDR_FILTERSTRING, filter.getFilterString());
          }
 
          if (remotingConnection.getClientID() != null) {
-            props.putSimpleStringProperty(ManagementHelper.HDR_CLIENT_ID, SimpleString.toSimpleString(remotingConnection.getClientID()));
+            props.putSimpleStringProperty(ManagementHelper.HDR_CLIENT_ID, SimpleString.of(remotingConnection.getClientID()));
          }
 
          props.putLongProperty(ManagementHelper.HDR_CONSUMER_NAME, consumer.getID());
@@ -2225,9 +2225,9 @@ public class ServerSessionImpl implements ServerSession, FailureListener {
       if (replyTo != null) {
          // TODO: move this check somewhere else? this is a JMS-specific bit of logic in the core impl
          if (replyTo.toString().startsWith("queue://") || replyTo.toString().startsWith("topic://")) {
-            replyTo = SimpleString.toSimpleString(replyTo.toString().substring(8));
+            replyTo = SimpleString.of(replyTo.toString().substring(8));
          } else if (replyTo.toString().startsWith("temp-queue://") || replyTo.toString().startsWith("temp-topic://")) {
-            replyTo = SimpleString.toSimpleString(replyTo.toString().substring(13));
+            replyTo = SimpleString.of(replyTo.toString().substring(13));
          }
          reply.setAddress(replyTo);
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/ArtemisRbacInvocationHandler.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/ArtemisRbacInvocationHandler.java
index b400433663..5c2831a0ea 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/ArtemisRbacInvocationHandler.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/ArtemisRbacInvocationHandler.java
@@ -141,7 +141,7 @@ public class ArtemisRbacInvocationHandler implements GuardInvocationHandler {
             brokerDomain = activeMQServer.getConfiguration().getJMXDomain();
 
             viewPermissionMatcher = Pattern.compile(activeMQServer.getConfiguration().getViewPermissionMethodMatchPattern());
-            rbacPrefix = SimpleString.toSimpleString(activeMQServer.getConfiguration().getManagementRbacPrefix());
+            rbacPrefix = SimpleString.of(activeMQServer.getConfiguration().getManagementRbacPrefix());
             mBeanServerRbacAddressPrefix = rbacPrefix.concat(".mbeanserver.");
 
             ((ActiveMQServerControlImpl) args[0]).getServer().registerActivateCallback(new ActivateCallback() {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
index 065175dbb1..d5529a6baa 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
@@ -178,7 +178,7 @@ public class ManagementServiceImpl implements ManagementService {
       broadcaster = new NotificationBroadcasterSupport();
       notificationsEnabled = true;
       objectNameBuilder = ObjectNameBuilder.create(configuration.getJMXDomain(), configuration.getName(), configuration.isJMXUseBrokerName());
-      managementMessageRbacResourceNamePrefix = configuration.isManagementMessageRbac() ? SimpleString.toSimpleString(configuration.getManagementRbacPrefix()).concat('.') : null;
+      managementMessageRbacResourceNamePrefix = configuration.isManagementMessageRbac() ? SimpleString.of(configuration.getManagementRbacPrefix()).concat('.') : null;
       viewPermissionMatcher = Pattern.compile(configuration.getViewPermissionMethodMatchPattern());
    }
 
@@ -839,7 +839,7 @@ public class ManagementServiceImpl implements ManagementService {
                   props.forEach(notificationMessage::putObjectProperty);
                }
 
-               notificationMessage.putStringProperty(ManagementHelper.HDR_NOTIFICATION_TYPE, new SimpleString(notification.getType().toString()));
+               notificationMessage.putStringProperty(ManagementHelper.HDR_NOTIFICATION_TYPE, SimpleString.of(notification.getType().toString()));
 
                long timestamp = System.currentTimeMillis();
                notificationMessage.putLongProperty(ManagementHelper.HDR_NOTIFICATION_TIMESTAMP, timestamp);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/plugin/impl/NotificationActiveMQServerPlugin.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/plugin/impl/NotificationActiveMQServerPlugin.java
index fe7d90cea3..8199ac4cac 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/plugin/impl/NotificationActiveMQServerPlugin.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/plugin/impl/NotificationActiveMQServerPlugin.java
@@ -175,9 +175,9 @@ public class NotificationActiveMQServerPlugin implements ActiveMQServerPlugin {
          try {
             String certSubjectDN = CertificateUtil.getCertSubjectDN(connection);
             final TypedProperties props = new TypedProperties();
-            props.putSimpleStringProperty(ManagementHelper.HDR_CONNECTION_NAME, SimpleString.toSimpleString(connection.getID().toString()));
-            props.putSimpleStringProperty(ManagementHelper.HDR_CERT_SUBJECT_DN, SimpleString.toSimpleString(certSubjectDN));
-            props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.toSimpleString(connection.getRemoteAddress()));
+            props.putSimpleStringProperty(ManagementHelper.HDR_CONNECTION_NAME, SimpleString.of(connection.getID().toString()));
+            props.putSimpleStringProperty(ManagementHelper.HDR_CERT_SUBJECT_DN, SimpleString.of(certSubjectDN));
+            props.putSimpleStringProperty(ManagementHelper.HDR_REMOTE_ADDRESS, SimpleString.of(connection.getRemoteAddress()));
 
             managementService.sendNotification(new Notification(null, type, props));
          } catch (Exception e) {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/transformer/AddHeadersTransformer.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/transformer/AddHeadersTransformer.java
index 4bfeaa042f..be4c5cea9d 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/transformer/AddHeadersTransformer.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/transformer/AddHeadersTransformer.java
@@ -28,7 +28,7 @@ public class AddHeadersTransformer implements Transformer {
 
    @Override
    public void init(Map<String, String> properties) {
-      properties.forEach((k,v) -> headers.put(SimpleString.toSimpleString(k), SimpleString.toSimpleString(v)));
+      properties.forEach((k,v) -> headers.put(SimpleString.of(k), SimpleString.of(v)));
    }
 
    @Override
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/transformer/ServerMessageImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/transformer/ServerMessageImpl.java
index d8a26c8bc2..866bc69f1b 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/transformer/ServerMessageImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/transformer/ServerMessageImpl.java
@@ -138,7 +138,7 @@ public class ServerMessageImpl extends MessageInternalImpl implements ServerMess
 
          message.putLongProperty(Message.HDR_ORIG_MESSAGE_ID, other.getLongProperty(Message.HDR_ORIG_MESSAGE_ID));
       } else {
-         message.putStringProperty(Message.HDR_ORIGINAL_ADDRESS, new SimpleString(other.getAddress()));
+         message.putStringProperty(Message.HDR_ORIGINAL_ADDRESS, SimpleString.of(other.getAddress()));
 
          message.putLongProperty(Message.HDR_ORIG_MESSAGE_ID, other.getMessageID());
       }
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java
index fdda8bc4e1..ac74b99aa8 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java
@@ -107,9 +107,9 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable
 
    public static final boolean DEFAULT_AUTO_CREATE_EXPIRY_RESOURCES = false;
 
-   public static final SimpleString DEFAULT_EXPIRY_QUEUE_PREFIX = SimpleString.toSimpleString("EXP.");
+   public static final SimpleString DEFAULT_EXPIRY_QUEUE_PREFIX = SimpleString.of("EXP.");
 
-   public static final SimpleString DEFAULT_EXPIRY_QUEUE_SUFFIX = SimpleString.toSimpleString("");
+   public static final SimpleString DEFAULT_EXPIRY_QUEUE_SUFFIX = SimpleString.of("");
 
    public static final long DEFAULT_EXPIRY_DELAY = -1;
 
@@ -134,9 +134,9 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable
 
    public static final boolean DEFAULT_AUTO_CREATE_DEAD_LETTER_RESOURCES = false;
 
-   public static final SimpleString DEFAULT_DEAD_LETTER_QUEUE_PREFIX = SimpleString.toSimpleString("DLQ.");
+   public static final SimpleString DEFAULT_DEAD_LETTER_QUEUE_PREFIX = SimpleString.of("DLQ.");
 
-   public static final SimpleString DEFAULT_DEAD_LETTER_QUEUE_SUFFIX = SimpleString.toSimpleString("");
+   public static final SimpleString DEFAULT_DEAD_LETTER_QUEUE_SUFFIX = SimpleString.of("");
 
    public static final boolean DEFAULT_ENABLE_METRICS = true;
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/ResourceLimitSettings.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/ResourceLimitSettings.java
index c776e32684..1c80f03ebf 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/ResourceLimitSettings.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/ResourceLimitSettings.java
@@ -36,7 +36,7 @@ public class ResourceLimitSettings implements Serializable, EncodingSupport {
 
    //   public static final Long DEFAULT_MAX_QUEUE_SIZE_BYTES = -1L;
 
-   //   public static final SimpleString DEFAULT_QUEUE_NAME_REGEX = new SimpleString(".+");
+   //   public static final SimpleString DEFAULT_QUEUE_NAME_REGEX = SimpleString.of(".+");
 
    SimpleString match = null;
 
@@ -49,7 +49,7 @@ public class ResourceLimitSettings implements Serializable, EncodingSupport {
    //   SimpleString queueNameRegex = null;
 
    public void setName(String name) {
-      setMatch(SimpleString.toSimpleString(name));
+      setMatch(SimpleString.of(name));
    }
 
    public SimpleString getMatch() {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/protocol/AbstractProtocolManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/protocol/AbstractProtocolManager.java
index a1f556e4bd..4b10b90a59 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/protocol/AbstractProtocolManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/protocol/AbstractProtocolManager.java
@@ -54,14 +54,14 @@ public abstract class AbstractProtocolManager<P, I extends BaseInterceptor<P>, C
    @Override
    public void setAnycastPrefix(String anycastPrefix) {
       for (String prefix : anycastPrefix.split(",")) {
-         prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.ANYCAST);
+         prefixes.put(SimpleString.of(prefix), RoutingType.ANYCAST);
       }
    }
 
    @Override
    public void setMulticastPrefix(String multicastPrefix) {
       for (String prefix : multicastPrefix.split(",")) {
-         prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.MULTICAST);
+         prefixes.put(SimpleString.of(prefix), RoutingType.MULTICAST);
       }
    }
 
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPMirrorBrokerConnectionElementTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPMirrorBrokerConnectionElementTest.java
index 12eb049414..abdff64548 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPMirrorBrokerConnectionElementTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPMirrorBrokerConnectionElementTest.java
@@ -64,9 +64,9 @@ public class AMQPMirrorBrokerConnectionElementTest {
       assertEquals(mirror1, mirror2);
 
       // Mirror SNF
-      mirror1.setMirrorSNF(SimpleString.toSimpleString("test"));
+      mirror1.setMirrorSNF(SimpleString.of("test"));
       assertNotEquals(mirror1, mirror2);
-      mirror2.setMirrorSNF(SimpleString.toSimpleString("test"));
+      mirror2.setMirrorSNF(SimpleString.of("test"));
       assertEquals(mirror1, mirror2);
 
       // Address Filter
@@ -112,9 +112,9 @@ public class AMQPMirrorBrokerConnectionElementTest {
       assertEquals(mirror1.hashCode(), mirror2.hashCode());
 
       // Mirror SNF
-      mirror1.setMirrorSNF(SimpleString.toSimpleString("test"));
+      mirror1.setMirrorSNF(SimpleString.of("test"));
       assertNotEquals(mirror1.hashCode(), mirror2.hashCode());
-      mirror2.setMirrorSNF(SimpleString.toSimpleString("test"));
+      mirror2.setMirrorSNF(SimpleString.of("test"));
       assertEquals(mirror1.hashCode(), mirror2.hashCode());
 
       // Address Filter
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AMQPConnectMatchTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AMQPConnectMatchTest.java
index e3cf3952e2..8ff5ee17ea 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AMQPConnectMatchTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AMQPConnectMatchTest.java
@@ -32,7 +32,7 @@ public class AMQPConnectMatchTest {
       String checkAddressMatching = "AD.TEST";
       String checkAddressNotMatching = "DD.TEST";
       WildcardConfiguration configuration = new WildcardConfiguration();
-      assertTrue(AMQPBrokerConnectionElement.match(SimpleString.toSimpleString(match), SimpleString.toSimpleString(checkAddressMatching), configuration));
-      assertFalse(AMQPBrokerConnectionElement.match(SimpleString.toSimpleString(match), SimpleString.toSimpleString(checkAddressNotMatching), configuration));
+      assertTrue(AMQPBrokerConnectionElement.match(SimpleString.of(match), SimpleString.of(checkAddressMatching), configuration));
+      assertFalse(AMQPBrokerConnectionElement.match(SimpleString.of(match), SimpleString.of(checkAddressNotMatching), configuration));
    }
 }
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AbstractConfigurationTestBase.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AbstractConfigurationTestBase.java
index 291277c9bb..85612f5b6c 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AbstractConfigurationTestBase.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AbstractConfigurationTestBase.java
@@ -112,7 +112,7 @@ public abstract class AbstractConfigurationTestBase extends ServerTestBase {
          assertEquals(i, configuration.getJournalMaxIO_NIO());
 
          s = RandomUtil.randomString();
-         configuration.setManagementAddress(new SimpleString(s));
+         configuration.setManagementAddress(SimpleString.of(s));
          assertEquals(s, configuration.getManagementAddress().toString());
 
          l = RandomUtil.randomLong();
@@ -314,7 +314,7 @@ public abstract class AbstractConfigurationTestBase extends ServerTestBase {
       assertEquals(i, configuration.getJournalMaxIO_NIO());
 
       s = RandomUtil.randomString();
-      configuration.setManagementAddress(new SimpleString(s));
+      configuration.setManagementAddress(SimpleString.of(s));
       assertEquals(s, configuration.getManagementAddress().toString());
 
       l = RandomUtil.randomLong();
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
index a4c5954af6..a65dfb630a 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
@@ -1165,7 +1165,7 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
 
       assertEquals(1, configuration.getAddressConfigurations().size());
       assertEquals(1, configuration.getAddressConfigurations().get(0).getQueueConfigs().size());
-      assertEquals(SimpleString.toSimpleString("LB.TEST"), configuration.getAddressConfigurations().get(0).getQueueConfigs().get(0).getAddress());
+      assertEquals(SimpleString.of("LB.TEST"), configuration.getAddressConfigurations().get(0).getQueueConfigs().get(0).getAddress());
       assertNotNull(configuration.getAddressConfigurations().get(0).getQueueConfigs().get(0).isDurable());
       assertFalse(configuration.getAddressConfigurations().get(0).getQueueConfigs().get(0).isDurable());
    }
@@ -1338,17 +1338,17 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(4, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString("sharedExpiry"), configuration.getAddressSettings().get("#").getExpiryAddress());
-      assertEquals(SimpleString.toSimpleString("important"), configuration.getAddressSettings().get("NeedToTrackExpired").getExpiryAddress());
-      assertEquals(SimpleString.toSimpleString("moreImportant"), configuration.getAddressSettings().get("Name.With.Dots").getExpiryAddress());
+      assertEquals(SimpleString.of("sharedExpiry"), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of("important"), configuration.getAddressSettings().get("NeedToTrackExpired").getExpiryAddress());
+      assertEquals(SimpleString.of("moreImportant"), configuration.getAddressSettings().get("Name.With.Dots").getExpiryAddress());
       assertTrue(configuration.getAddressSettings().get("NeedToSet").isAutoCreateExpiryResources());
-      assertEquals(SimpleString.toSimpleString("iamDeadLetterAdd"), configuration.getAddressSettings().get("NeedToSet").getDeadLetterAddress());
-      assertEquals(SimpleString.toSimpleString("add1Expiry"), configuration.getAddressSettings().get("NeedToSet").getExpiryQueuePrefix());
+      assertEquals(SimpleString.of("iamDeadLetterAdd"), configuration.getAddressSettings().get("NeedToSet").getDeadLetterAddress());
+      assertEquals(SimpleString.of("add1Expiry"), configuration.getAddressSettings().get("NeedToSet").getExpiryQueuePrefix());
       assertEquals(20000000, configuration.getAddressSettings().get("NeedToSet").getMaxReadPageBytes());
       assertEquals(512, configuration.getAddressSettings().get("NeedToSet").getManagementMessageAttributeSizeLimit());
-      assertEquals(SimpleString.toSimpleString("iamDeadLetterQueuePre"), configuration.getAddressSettings().get("NeedToSet").getDeadLetterQueuePrefix());
+      assertEquals(SimpleString.of("iamDeadLetterQueuePre"), configuration.getAddressSettings().get("NeedToSet").getDeadLetterQueuePrefix());
       assertEquals(12345, configuration.getAddressSettings().get("NeedToSet").getPageSizeBytes());
-      assertEquals(SimpleString.toSimpleString("add1ExpirySuffix"), configuration.getAddressSettings().get("NeedToSet").getExpiryQueueSuffix());
+      assertEquals(SimpleString.of("add1ExpirySuffix"), configuration.getAddressSettings().get("NeedToSet").getExpiryQueueSuffix());
       assertEquals(Long.valueOf(44), configuration.getAddressSettings().get("NeedToSet").getExpiryDelay());
       assertEquals(Long.valueOf(5), configuration.getAddressSettings().get("NeedToSet").getMinExpiryDelay());
       assertEquals(Long.valueOf(10), configuration.getAddressSettings().get("NeedToSet").getMaxExpiryDelay());
@@ -1356,9 +1356,9 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       assertEquals(300, configuration.getAddressSettings().get("NeedToSet").getManagementBrowsePageSize());
       assertEquals(-1, configuration.getAddressSettings().get("NeedToSet").getRetroactiveMessageCount());
       assertEquals(10, configuration.getAddressSettings().get("NeedToSet").getMaxDeliveryAttempts());
-      assertEquals(SimpleString.toSimpleString("add1Key"), configuration.getAddressSettings().get("NeedToSet").getDefaultGroupFirstKey());
+      assertEquals(SimpleString.of("add1Key"), configuration.getAddressSettings().get("NeedToSet").getDefaultGroupFirstKey());
       assertEquals(100, configuration.getAddressSettings().get("NeedToSet").getSlowConsumerCheckPeriod());
-      assertEquals(SimpleString.toSimpleString("add1Lvk"), configuration.getAddressSettings().get("NeedToSet").getDefaultLastValueKey());
+      assertEquals(SimpleString.of("add1Lvk"), configuration.getAddressSettings().get("NeedToSet").getDefaultLastValueKey());
       assertEquals(DeletionPolicy.FORCE, configuration.getAddressSettings().get("NeedToSet").getConfigDeleteDiverts());
       assertEquals(1000, configuration.getAddressSettings().get("NeedToSet").getDefaultConsumerWindowSize());
       assertEquals(7, configuration.getAddressSettings().get("NeedToSet").getMessageCounterHistoryDayLimit());
@@ -1384,7 +1384,7 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       assertTrue(configuration.getAddressSettings().get("NeedToSet").isSendToDLAOnNoRoute());
       assertEquals(SlowConsumerThresholdMeasurementUnit.MESSAGES_PER_HOUR, configuration.getAddressSettings().get("NeedToSet").getSlowConsumerThresholdMeasurementUnit());
       assertEquals(900, configuration.getAddressSettings().get("NeedToSet").getQueuePrefetch());
-      assertEquals(SimpleString.toSimpleString("iamDeadLetterQueueSuf"), configuration.getAddressSettings().get("NeedToSet").getDeadLetterQueueSuffix());
+      assertEquals(SimpleString.of("iamDeadLetterQueueSuf"), configuration.getAddressSettings().get("NeedToSet").getDeadLetterQueueSuffix());
       assertTrue(configuration.getAddressSettings().get("NeedToSet").isDefaultNonDestructive());
       assertEquals(DeletionPolicy.FORCE, configuration.getAddressSettings().get("NeedToSet").getConfigDeleteAddresses());
       assertEquals(10, configuration.getAddressSettings().get("NeedToSet").getSlowConsumerThreshold());
@@ -1418,12 +1418,12 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(1, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
       assertEquals(300L, configuration.getAddressSettings().get("#").getPageLimitMessages().longValue());
       assertEquals(300000L, configuration.getAddressSettings().get("#").getPageLimitBytes().longValue());
       assertEquals("DROP", configuration.getAddressSettings().get("#").getPageFullMessagePolicy().toString());
 
-      PagingStore storeImpl = new PagingStoreImpl(new SimpleString("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), new SimpleString("Test"), configuration.getAddressSettings().get("#"), null, null, true);
+      PagingStore storeImpl = new PagingStoreImpl(SimpleString.of("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("Test"), configuration.getAddressSettings().get("#"), null, null, true);
 
       assertEquals(300L, storeImpl.getPageLimitMessages().longValue());
       assertEquals(300000L, storeImpl.getPageLimitBytes().longValue());
@@ -1448,12 +1448,12 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(1, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
       assertEquals((Long)300L, configuration.getAddressSettings().get("#").getPageLimitMessages());
       assertEquals((Long)300000L, configuration.getAddressSettings().get("#").getPageLimitBytes());
       assertNull(configuration.getAddressSettings().get("#").getPageFullMessagePolicy());
 
-      PagingStore storeImpl = new PagingStoreImpl(new SimpleString("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), new SimpleString("Test"), configuration.getAddressSettings().get("#"), null, null, true);
+      PagingStore storeImpl = new PagingStoreImpl(SimpleString.of("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("Test"), configuration.getAddressSettings().get("#"), null, null, true);
 
       assertNull(storeImpl.getPageLimitMessages());
       assertNull(storeImpl.getPageLimitBytes());
@@ -1479,12 +1479,12 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(1, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
       assertEquals((Long)300L, configuration.getAddressSettings().get("#").getPageLimitMessages());
       assertNull(configuration.getAddressSettings().get("#").getPageLimitBytes());
       assertNull(configuration.getAddressSettings().get("#").getPageFullMessagePolicy());
 
-      PagingStore storeImpl = new PagingStoreImpl(new SimpleString("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), new SimpleString("Test"), configuration.getAddressSettings().get("#"), null, null, true);
+      PagingStore storeImpl = new PagingStoreImpl(SimpleString.of("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("Test"), configuration.getAddressSettings().get("#"), null, null, true);
 
       assertNull(storeImpl.getPageLimitMessages());
       assertNull(storeImpl.getPageLimitBytes());
@@ -1509,12 +1509,12 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(1, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
       assertNull(configuration.getAddressSettings().get("#").getPageLimitMessages());
       assertEquals((Long)300000L, configuration.getAddressSettings().get("#").getPageLimitBytes());
       assertNull(configuration.getAddressSettings().get("#").getPageFullMessagePolicy());
 
-      PagingStore storeImpl = new PagingStoreImpl(new SimpleString("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), new SimpleString("Test"), configuration.getAddressSettings().get("#"), null, null, true);
+      PagingStore storeImpl = new PagingStoreImpl(SimpleString.of("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("Test"), configuration.getAddressSettings().get("#"), null, null, true);
 
       assertNull(storeImpl.getPageLimitMessages());
       assertNull(storeImpl.getPageLimitBytes());
@@ -1539,12 +1539,12 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(1, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
       assertNull(configuration.getAddressSettings().get("#").getPageLimitMessages());
       assertNull(configuration.getAddressSettings().get("#").getPageLimitBytes());
       assertEquals("DROP", configuration.getAddressSettings().get("#").getPageFullMessagePolicy().toString());
 
-      PagingStore storeImpl = new PagingStoreImpl(new SimpleString("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), new SimpleString("Test"), configuration.getAddressSettings().get("#"), null, null, true);
+      PagingStore storeImpl = new PagingStoreImpl(SimpleString.of("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("Test"), configuration.getAddressSettings().get("#"), null, null, true);
 
       assertNull(storeImpl.getPageLimitMessages());
       assertNull(storeImpl.getPageLimitBytes());
@@ -1569,12 +1569,12 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(1, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
       assertEquals(-1L, configuration.getAddressSettings().get("#").getPageLimitMessages().longValue());
       assertEquals(-1L, configuration.getAddressSettings().get("#").getPageLimitBytes().longValue());
       assertEquals("DROP", configuration.getAddressSettings().get("#").getPageFullMessagePolicy().toString());
 
-      PagingStore storeImpl = new PagingStoreImpl(new SimpleString("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), new SimpleString("Test"), configuration.getAddressSettings().get("#"), null, null, true);
+      PagingStore storeImpl = new PagingStoreImpl(SimpleString.of("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("Test"), configuration.getAddressSettings().get("#"), null, null, true);
 
       assertNull(storeImpl.getPageLimitMessages());
       assertNull(storeImpl.getPageLimitBytes());
@@ -1596,11 +1596,11 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(1, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of(randomString), configuration.getAddressSettings().get("#").getExpiryAddress());
       assertEquals(333, configuration.getAddressSettings().get("#").getPrefetchPageMessages());
       assertEquals(777, configuration.getAddressSettings().get("#").getPrefetchPageBytes());
 
-      PagingStore storeImpl = new PagingStoreImpl(new SimpleString("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), new SimpleString("Test"), configuration.getAddressSettings().get("#"), null, null, true);
+      PagingStore storeImpl = new PagingStoreImpl(SimpleString.of("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("Test"), configuration.getAddressSettings().get("#"), null, null, true);
 
       assertEquals(333, storeImpl.getPrefetchPageMessages());
       assertEquals(777, storeImpl.getPrefetchPageBytes());
@@ -1625,7 +1625,7 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       assertEquals(333, configuration.getAddressSettings().get("#").getMaxReadPageMessages());
       assertEquals(777, configuration.getAddressSettings().get("#").getMaxReadPageBytes());
 
-      PagingStore storeImpl = new PagingStoreImpl(new SimpleString("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), new SimpleString("Test"), configuration.getAddressSettings().get("#"), null, null, true);
+      PagingStore storeImpl = new PagingStoreImpl(SimpleString.of("Test"), (ScheduledExecutorService) null, 100L, Mockito.mock(PagingManager.class), Mockito.mock(StorageManager.class), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("Test"), configuration.getAddressSettings().get("#"), null, null, true);
 
       assertEquals(333, storeImpl.getPrefetchPageMessages());
       assertEquals(777, storeImpl.getPrefetchPageBytes());
@@ -2026,9 +2026,9 @@ public class ConfigurationImplTest extends AbstractConfigurationTestBase {
       configuration.parsePrefixedProperties(properties, null);
 
       assertEquals(3, configuration.getAddressSettings().size());
-      assertEquals(SimpleString.toSimpleString("sharedExpiry"), configuration.getAddressSettings().get("#").getExpiryAddress());
-      assertEquals(SimpleString.toSimpleString("important"), configuration.getAddressSettings().get("NeedToTrackExpired").getExpiryAddress());
-      assertEquals(SimpleString.toSimpleString("moreImportant"), configuration.getAddressSettings().get("Name.With.Dots").getExpiryAddress());
+      assertEquals(SimpleString.of("sharedExpiry"), configuration.getAddressSettings().get("#").getExpiryAddress());
+      assertEquals(SimpleString.of("important"), configuration.getAddressSettings().get("NeedToTrackExpired").getExpiryAddress());
+      assertEquals(SimpleString.of("moreImportant"), configuration.getAddressSettings().get("Name.With.Dots").getExpiryAddress());
 
       assertTrue(configuration.getStatus().contains("\"errors\":[]"));
    }
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationParserTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationParserTest.java
index 7cae74e70e..161c4d9630 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationParserTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationParserTest.java
@@ -102,7 +102,7 @@ public class FileConfigurationParserTest extends ServerTestBase {
       deploymentManager.readConfiguration();
       ActiveMQServer server = addServer((ActiveMQServer) deploymentManager.buildService(null, null, null).get("core"));
       server.start();
-      assertEquals(0, server.locateQueue(SimpleString.toSimpleString("q")).getMaxConsumers());
+      assertEquals(0, server.locateQueue(SimpleString.of("q")).getMaxConsumers());
    }
 
    @Test
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
index 6f644a9dc7..d14cbbe413 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
@@ -189,8 +189,8 @@ public class FileConfigurationTest extends AbstractConfigurationTestBase {
       assertEquals(333, conf.getAuthenticationCacheSize());
       assertEquals(444, conf.getAuthorizationCacheSize());
       assertTrue(conf.isWildcardRoutingEnabled());
-      assertEquals(new SimpleString("Giraffe"), conf.getManagementAddress());
-      assertEquals(new SimpleString("Whatever"), conf.getManagementNotificationAddress());
+      assertEquals(SimpleString.of("Giraffe"), conf.getManagementAddress());
+      assertEquals(SimpleString.of("Whatever"), conf.getManagementNotificationAddress());
       assertEquals("Frog", conf.getClusterUser());
       assertEquals("Wombat", conf.getClusterPassword());
       assertFalse(conf.isJMXManagementEnabled());
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/filter/impl/FilterTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/filter/impl/FilterTest.java
index 97c0015153..8747a1155e 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/filter/impl/FilterTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/filter/impl/FilterTest.java
@@ -50,18 +50,18 @@ public class FilterTest extends SilentTestCase {
 
    @Test
    public void testNewlineMatch() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("fooprop LIKE '%1234%'"));
+      filter = FilterImpl.createFilter(SimpleString.of("fooprop LIKE '%1234%'"));
 
-      message.putStringProperty(new SimpleString("fooprop"), new SimpleString("hello1234\n"));
+      message.putStringProperty(SimpleString.of("fooprop"), SimpleString.of("hello1234\n"));
 
       assertTrue(filter.match(message));
    }
 
    @Test
    public void testFilterForgets() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("color = 'RED'"));
+      filter = FilterImpl.createFilter(SimpleString.of("color = 'RED'"));
 
-      message.putStringProperty(new SimpleString("color"), new SimpleString("RED"));
+      message.putStringProperty(SimpleString.of("color"), SimpleString.of("RED"));
       assertTrue(filter.match(message));
       message = new CoreMessage();
       assertFalse(filter.match(message));
@@ -70,10 +70,10 @@ public class FilterTest extends SilentTestCase {
    @Test
    public void testInvalidString() throws Exception {
       testInvalidFilter("color = 'red");
-      testInvalidFilter(new SimpleString("color = 'red"));
+      testInvalidFilter(SimpleString.of("color = 'red"));
 
       testInvalidFilter("3");
-      testInvalidFilter(new SimpleString("3"));
+      testInvalidFilter(SimpleString.of("3"));
    }
 
    @Test
@@ -81,12 +81,12 @@ public class FilterTest extends SilentTestCase {
       assertNull(FilterImpl.createFilter((String) null));
       assertNull(FilterImpl.createFilter(""));
       assertNull(FilterImpl.createFilter((SimpleString) null));
-      assertNull(FilterImpl.createFilter(new SimpleString("")));
+      assertNull(FilterImpl.createFilter(SimpleString.of("")));
    }
 
    @Test
    public void testAMQDurable() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("AMQDurable='DURABLE'"));
+      filter = FilterImpl.createFilter(SimpleString.of("AMQDurable='DURABLE'"));
 
       message.setDurable(true);
 
@@ -96,7 +96,7 @@ public class FilterTest extends SilentTestCase {
 
       assertFalse(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("AMQDurable='NON_DURABLE'"));
+      filter = FilterImpl.createFilter(SimpleString.of("AMQDurable='NON_DURABLE'"));
 
       message = new CoreMessage();
       message.setDurable(true);
@@ -115,11 +115,11 @@ public class FilterTest extends SilentTestCase {
 
       int encodeSize = message.getEncodeSize();
 
-      Filter moreThanSmall = FilterImpl.createFilter(new SimpleString("AMQSize > " + (encodeSize - 1)));
-      Filter lessThanLarge = FilterImpl.createFilter(new SimpleString("AMQSize < " + (encodeSize + 1)));
+      Filter moreThanSmall = FilterImpl.createFilter(SimpleString.of("AMQSize > " + (encodeSize - 1)));
+      Filter lessThanLarge = FilterImpl.createFilter(SimpleString.of("AMQSize < " + (encodeSize + 1)));
 
-      Filter lessThanSmall = FilterImpl.createFilter(new SimpleString("AMQSize < " + encodeSize));
-      Filter moreThanLarge = FilterImpl.createFilter(new SimpleString("AMQSize > " + encodeSize));
+      Filter lessThanSmall = FilterImpl.createFilter(SimpleString.of("AMQSize < " + encodeSize));
+      Filter moreThanLarge = FilterImpl.createFilter(SimpleString.of("AMQSize > " + encodeSize));
 
       assertTrue(moreThanSmall.match(message));
       assertTrue(lessThanLarge.match(message));
@@ -131,7 +131,7 @@ public class FilterTest extends SilentTestCase {
 
    @Test
    public void testAMQPriority() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("AMQPriority=3"));
+      filter = FilterImpl.createFilter(SimpleString.of("AMQPriority=3"));
 
       for (int i = 0; i < 10; i++) {
          message.setPriority((byte) i);
@@ -146,7 +146,7 @@ public class FilterTest extends SilentTestCase {
 
    @Test
    public void testAMQTimestamp() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("AMQTimestamp=12345678"));
+      filter = FilterImpl.createFilter(SimpleString.of("AMQTimestamp=12345678"));
 
       message.setTimestamp(87654321);
 
@@ -159,59 +159,59 @@ public class FilterTest extends SilentTestCase {
 
    @Test
    public void testBooleanTrue() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("MyBoolean=true"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyBoolean=true"));
 
       testBoolean("MyBoolean", true);
    }
 
    @Test
    public void testIdentifier() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("MyBoolean"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyBoolean"));
 
       testBoolean("MyBoolean", true);
    }
 
    @Test
    public void testDifferentNullString() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("prop <> 'foo'"));
+      filter = FilterImpl.createFilter(SimpleString.of("prop <> 'foo'"));
       assertFalse(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("prop <> 'foo' OR prop IS NULL"));
+      filter = FilterImpl.createFilter(SimpleString.of("prop <> 'foo' OR prop IS NULL"));
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("NOT (prop = 'foo')"));
+      filter = FilterImpl.createFilter(SimpleString.of("NOT (prop = 'foo')"));
       assertFalse(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("NOT (prop = 'foo') OR prop IS NULL"));
+      filter = FilterImpl.createFilter(SimpleString.of("NOT (prop = 'foo') OR prop IS NULL"));
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("prop <> 'foo'"));
+      filter = FilterImpl.createFilter(SimpleString.of("prop <> 'foo'"));
       doPutStringProperty("prop", "bar");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("prop <> 'foo'"));
+      filter = FilterImpl.createFilter(SimpleString.of("prop <> 'foo'"));
       doPutStringProperty("prop", "foo");
       assertFalse(filter.match(message));
    }
 
    @Test
    public void testBooleanFalse() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("MyBoolean=false"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyBoolean=false"));
       testBoolean("MyBoolean", false);
    }
 
    private void testBoolean(final String name, final boolean flag) throws Exception {
-      message.putBooleanProperty(new SimpleString(name), flag);
+      message.putBooleanProperty(SimpleString.of(name), flag);
       assertTrue(filter.match(message));
 
-      message.putBooleanProperty(new SimpleString(name), !flag);
+      message.putBooleanProperty(SimpleString.of(name), !flag);
       assertTrue(!filter.match(message));
    }
 
    @Test
    public void testStringEquals() throws Exception {
       // First, simple test of string equality and inequality
-      filter = FilterImpl.createFilter(new SimpleString("MyString='astring'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString='astring'"));
 
       doPutStringProperty("MyString", "astring");
       assertTrue(filter.match(message));
@@ -220,7 +220,7 @@ public class FilterTest extends SilentTestCase {
       assertTrue(!filter.match(message));
 
       // test empty string
-      filter = FilterImpl.createFilter(new SimpleString("MyString=''"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString=''"));
 
       doPutStringProperty("MyString", "");
       assertTrue(filter.match(message), "test 1");
@@ -230,7 +230,7 @@ public class FilterTest extends SilentTestCase {
 
       // test literal apostrophes (which are escaped using two apostrophes
       // in selectors)
-      filter = FilterImpl.createFilter(new SimpleString("MyString='test JBoss''s filter'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString='test JBoss''s filter'"));
 
       // note: apostrophes are not escaped in string properties
       doPutStringProperty("MyString", "test JBoss's filter");
@@ -244,7 +244,7 @@ public class FilterTest extends SilentTestCase {
 
    @Test
    public void testNOT_INWithNullProperty() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("myNullProp NOT IN ('foo','jms','test')"));
+      filter = FilterImpl.createFilter(SimpleString.of("myNullProp NOT IN ('foo','jms','test')"));
 
       assertFalse(filter.match(message));
 
@@ -254,7 +254,7 @@ public class FilterTest extends SilentTestCase {
 
    @Test
    public void testNOT_LIKEWithNullProperty() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("myNullProp NOT LIKE '1_3'"));
+      filter = FilterImpl.createFilter(SimpleString.of("myNullProp NOT LIKE '1_3'"));
 
       assertFalse(filter.match(message));
 
@@ -264,7 +264,7 @@ public class FilterTest extends SilentTestCase {
 
    @Test
    public void testIS_NOT_NULLWithNullProperty() throws Exception {
-      filter = FilterImpl.createFilter(new SimpleString("myNullProp IS NOT NULL"));
+      filter = FilterImpl.createFilter(SimpleString.of("myNullProp IS NOT NULL"));
 
       assertFalse(filter.match(message));
 
@@ -275,7 +275,7 @@ public class FilterTest extends SilentTestCase {
    @Test
    public void testStringLike() throws Exception {
       // test LIKE operator with no wildcards
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'astring'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'astring'"));
       assertFalse(filter.match(message));
 
       // test where LIKE operand matches
@@ -283,17 +283,17 @@ public class FilterTest extends SilentTestCase {
       assertTrue(filter.match(message));
 
       // test one character string
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'a'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'a'"));
       doPutStringProperty("MyString", "a");
       assertTrue(filter.match(message));
 
       // test empty string
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE ''"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE ''"));
       doPutStringProperty("MyString", "");
       assertTrue(filter.match(message));
 
       // tests where operand does not match
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'astring'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'astring'"));
 
       // test with extra characters at beginning
       doPutStringProperty("MyString", "NOTastring");
@@ -328,7 +328,7 @@ public class FilterTest extends SilentTestCase {
       // matches any single character
 
       // first, some tests with the wildcard by itself
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '_'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '_'"));
       assertFalse(filter.match(message));
 
       // test match against single character
@@ -344,7 +344,7 @@ public class FilterTest extends SilentTestCase {
       assertTrue(!filter.match(message));
 
       // next, tests with wildcard at the beginning of the string
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '_bcdf'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '_bcdf'"));
 
       // test match at beginning of string
       doPutStringProperty("MyString", "abcdf");
@@ -379,7 +379,7 @@ public class FilterTest extends SilentTestCase {
       assertTrue(!filter.match(message));
 
       // next, tests with wildcard at the end of the string
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'abcd_'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'abcd_'"));
 
       // test match at end of string
       doPutStringProperty("MyString", "abcdf");
@@ -416,7 +416,7 @@ public class FilterTest extends SilentTestCase {
       // test match in middle of string
 
       // next, tests with wildcard in the middle of the string
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'ab_df'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'ab_df'"));
 
       // test match in the middle of string
       doPutStringProperty("MyString", "abcdf");
@@ -456,7 +456,7 @@ public class FilterTest extends SilentTestCase {
    @Test
    public void testNotLikeExpression() throws Exception {
       // Should evaluate to false when the property MyString is not set
-      filter = FilterImpl.createFilter(new SimpleString("NOT (MyString LIKE '%')"));
+      filter = FilterImpl.createFilter(SimpleString.of("NOT (MyString LIKE '%')"));
 
       assertFalse(filter.match(message));
    }
@@ -468,7 +468,7 @@ public class FilterTest extends SilentTestCase {
       // note many of the tests are similar to those for _
 
       // first, some tests with the wildcard by itself
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '%'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '%'"));
       assertFalse(filter.match(message));
 
       // test match against single character
@@ -487,7 +487,7 @@ public class FilterTest extends SilentTestCase {
       assertTrue(filter.match(message));
 
       // next, tests with wildcard at the beginning of the string
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '%bcdf'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '%bcdf'"));
 
       // test match with single character at beginning of string
       doPutStringProperty("MyString", "Xbcdf");
@@ -518,7 +518,7 @@ public class FilterTest extends SilentTestCase {
       assertTrue(filter.match(message));
 
       // next, tests with wildcard at the end of the string
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'abcd%'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'abcd%'"));
 
       // test match of single character at end of string
       doPutStringProperty("MyString", "abcdf");
@@ -553,7 +553,7 @@ public class FilterTest extends SilentTestCase {
       assertTrue(filter.match(message));
 
       // next, tests with wildcard in the middle of the string
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'ab%df'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'ab%df'"));
 
       // test match with single character in the middle of string
       doPutStringProperty("MyString", "abXdf");
@@ -605,7 +605,7 @@ public class FilterTest extends SilentTestCase {
       // wildcards of the current underlying RE engine,
       // GNU regexp.
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'a^$b'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'a^$b'"));
       assertFalse(filter.match(message));
 
       doPutStringProperty("MyString", "a^$b");
@@ -613,67 +613,67 @@ public class FilterTest extends SilentTestCase {
 
       // this one has a double backslash since backslash
       // is interpreted specially by Java
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'a\\dc'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'a\\dc'"));
       doPutStringProperty("MyString", "a\\dc");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'a.c'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'a.c'"));
       doPutStringProperty("MyString", "abc");
       assertTrue(!filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '[abc]'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '[abc]'"));
       doPutStringProperty("MyString", "[abc]");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '[^abc]'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '[^abc]'"));
       doPutStringProperty("MyString", "[^abc]");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '[a-c]'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '[a-c]'"));
       doPutStringProperty("MyString", "[a-c]");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '[:alpha]'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '[:alpha]'"));
       doPutStringProperty("MyString", "[:alpha]");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(abc)'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(abc)'"));
       doPutStringProperty("MyString", "(abc)");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE 'a|bc'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE 'a|bc'"));
       doPutStringProperty("MyString", "a|bc");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(abc)?'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(abc)?'"));
       doPutStringProperty("MyString", "(abc)?");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(abc)*'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(abc)*'"));
       doPutStringProperty("MyString", "(abc)*");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(abc)+'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(abc)+'"));
       doPutStringProperty("MyString", "(abc)+");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(abc){3}'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(abc){3}'"));
       doPutStringProperty("MyString", "(abc){3}");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(abc){3,5}'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(abc){3,5}'"));
       doPutStringProperty("MyString", "(abc){3,5}");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(abc){3,}'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(abc){3,}'"));
       doPutStringProperty("MyString", "(abc){3,}");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(?=abc)'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(?=abc)'"));
       doPutStringProperty("MyString", "(?=abc)");
       assertTrue(filter.match(message));
 
-      filter = FilterImpl.createFilter(new SimpleString("MyString LIKE '(?!abc)'"));
+      filter = FilterImpl.createFilter(SimpleString.of("MyString LIKE '(?!abc)'"));
       doPutStringProperty("MyString", "(?!abc)");
       assertTrue(filter.match(message));
    }
@@ -698,14 +698,14 @@ public class FilterTest extends SilentTestCase {
    //      }
    //
    //      FilterParser parse = new FilterParser();
-   //      SimpleStringReader reader = new SimpleStringReader(new SimpleString(largeString));
+   //      SimpleStringReader reader = new SimpleStringReader(SimpleString.of(largeString));
    //      parse.ReInit(reader);
    //      // the server would fail at doing this when HORNETQ-545 wasn't solved
    //      parse.getNextToken();
    //   }
 
    private void doPutStringProperty(final String key, final String value) {
-      message.putStringProperty(new SimpleString(key), new SimpleString(value));
+      message.putStringProperty(SimpleString.of(key), SimpleString.of(value));
    }
 
    private void testInvalidFilter(final String filterString) throws Exception {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/management/impl/openmbean/OpenTypeSupportTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/management/impl/openmbean/OpenTypeSupportTest.java
index e5f7ad9d25..2e6db3bc09 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/management/impl/openmbean/OpenTypeSupportTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/management/impl/openmbean/OpenTypeSupportTest.java
@@ -36,7 +36,7 @@ public class OpenTypeSupportTest {
       coreMessage.initBuffer(1024);
       coreMessage.setType(Message.TEXT_TYPE);
 
-      TextMessageUtil.writeBodyText(coreMessage.getBodyBuffer(), SimpleString.toSimpleString(bodyText));
+      TextMessageUtil.writeBodyText(coreMessage.getBodyBuffer(), SimpleString.of(bodyText));
 
       CompositeData cd = coreMessage.toCompositeData(256, 1);
 
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/ConcurrentAckTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/ConcurrentAckTest.java
index 91b1ef3e64..81a68e6a06 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/ConcurrentAckTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/ConcurrentAckTest.java
@@ -59,7 +59,7 @@ public class ConcurrentAckTest extends ServerTestBase {
 
    private void testConcurrentAddAckPaging(ScheduledExecutorService scheduledExecutorService, ExecutorService service) throws Throwable {
       AtomicInteger errors = new AtomicInteger(0);
-      PagingStoreImpl store = new PagingStoreImpl(SimpleString.toSimpleString("TEST"), scheduledExecutorService, 100L, Mockito.mock(PagingManager.class), new NullStorageManager(), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.toSimpleString("TEST"), new AddressSettings(), ArtemisExecutor.delegate(service), ArtemisExecutor.delegate(service), false);
+      PagingStoreImpl store = new PagingStoreImpl(SimpleString.of("TEST"), scheduledExecutorService, 100L, Mockito.mock(PagingManager.class), new NullStorageManager(), Mockito.mock(SequentialFileFactory.class), Mockito.mock(PagingStoreFactory.class), SimpleString.of("TEST"), new AddressSettings(), ArtemisExecutor.delegate(service), ArtemisExecutor.delegate(service), false);
 
       PageCursorProviderImpl pageCursorProvider = new PageCursorProviderImpl(store, new NullStorageManager());
       PageSubscriptionImpl subscription = (PageSubscriptionImpl) pageCursorProvider.createSubscription(1, null, true);
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/QueueConfigTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/QueueConfigTest.java
index 1f1b7cdf12..2dd8c4456c 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/QueueConfigTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/QueueConfigTest.java
@@ -26,14 +26,14 @@ public class QueueConfigTest {
 
    @Test
    public void addressMustBeDefaultedToName() {
-      final QueueConfig queueConfig = QueueConfig.builderWith(1L, new SimpleString("queue_name")).build();
+      final QueueConfig queueConfig = QueueConfig.builderWith(1L, SimpleString.of("queue_name")).build();
       assertEquals(queueConfig.name(), queueConfig.address());
    }
 
    @Test
    public void cannotAllowNullAddress() {
       assertThrows(IllegalStateException.class, () -> {
-         QueueConfig.builderWith(1L, new SimpleString("queue_name"), null);
+         QueueConfig.builderWith(1L, SimpleString.of("queue_name"), null);
       });
    }
 
@@ -47,7 +47,7 @@ public class QueueConfigTest {
    @Test
    public void cannotAllowNullNameWithAddress() {
       assertThrows(IllegalStateException.class, () -> {
-         QueueConfig.builderWith(1L, null, new SimpleString("queue_address"));
+         QueueConfig.builderWith(1L, null, SimpleString.of("queue_address"));
       });
    }
 }
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/files/FileMoveManagerTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/files/FileMoveManagerTest.java
index 02292585c0..535c623a90 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/files/FileMoveManagerTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/files/FileMoveManagerTest.java
@@ -307,7 +307,7 @@ public class FileMoveManagerTest extends ArtemisTestCase {
 
             managerImpl.start();
 
-            PagingStore store = managerImpl.getPageStore(new SimpleString("simple-test"));
+            PagingStore store = managerImpl.getPageStore(SimpleString.of("simple-test"));
 
             store.startPaging();
 
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
index 36e42f800b..e2ffb3f231 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
@@ -73,7 +73,7 @@ import org.junit.jupiter.api.Test;
  */
 public class ClusteredResetMockTest extends ServerTestBase {
 
-   public static final SimpleString ANYCLUSTER = SimpleString.toSimpleString("anycluster");
+   public static final SimpleString ANYCLUSTER = SimpleString.of("anycluster");
 
    @Test
    public void testMultipleSenders() throws Throwable {
@@ -82,7 +82,7 @@ public class ClusteredResetMockTest extends ServerTestBase {
       ReusableLatch latchSends = new ReusableLatch(NUMBER_OF_SENDERS);
 
       FakeManagement fake = new FakeManagement(latchSends);
-      RemoteGroupingHandler handler = new RemoteGroupingHandler(fake, SimpleString.toSimpleString("tst1"), SimpleString.toSimpleString("tst2"), 50000, 499);
+      RemoteGroupingHandler handler = new RemoteGroupingHandler(fake, SimpleString.of("tst1"), SimpleString.of("tst2"), 50000, 499);
       handler.start();
 
       Sender[] sn = new Sender[NUMBER_OF_SENDERS];
@@ -150,7 +150,7 @@ public class ClusteredResetMockTest extends ServerTestBase {
 
       Sender(String code, RemoteGroupingHandler handler) {
          super("Sender::" + code);
-         this.code = SimpleString.toSimpleString(code);
+         this.code = SimpleString.of(code);
          this.handler = handler;
       }
 
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/QueueImplTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/QueueImplTest.java
index 346fabcb6f..dd24e803c3 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/QueueImplTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/QueueImplTest.java
@@ -46,7 +46,7 @@ public class QueueImplTest {
 
    @Test
    public void deleteAllPagedReferencesTest() throws Exception {
-      SimpleString address = new SimpleString("test");
+      SimpleString address = SimpleString.of("test");
       AtomicInteger pageIteratorIndex = new AtomicInteger(0);
       PageIterator pageIterator = Mockito.mock(PageIterator.class);
       PageSubscription pageSubscription = Mockito.mock(PageSubscription.class);
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/RoutingContextTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/RoutingContextTest.java
index 16df10cbc0..31ee0db827 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/RoutingContextTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/RoutingContextTest.java
@@ -90,7 +90,7 @@ public class RoutingContextTest {
 
       @Override
       public SimpleString getName() {
-         return SimpleString.toSimpleString(name);
+         return SimpleString.of(name);
       }
 
       @Override
@@ -862,7 +862,7 @@ public class RoutingContextTest {
 
       @Override
       public SimpleString getAddress() {
-         return SimpleString.toSimpleString(name);
+         return SimpleString.of(name);
       }
 
       @Override
@@ -946,25 +946,25 @@ public class RoutingContextTest {
       RoutingContext context = new RoutingContextImpl(new TransactionImpl(new NullStorageManager()));
       assertFalse(context.isInternal());
 
-      context.addQueue(SimpleString.toSimpleString("t1"), new FakeQueueForRoutingContextTest("t1", true, true));
+      context.addQueue(SimpleString.of("t1"), new FakeQueueForRoutingContextTest("t1", true, true));
       assertTrue(context.isInternal());
 
-      context.addQueue(SimpleString.toSimpleString("t2"), new FakeQueueForRoutingContextTest("t2", false, true));
+      context.addQueue(SimpleString.of("t2"), new FakeQueueForRoutingContextTest("t2", false, true));
       assertFalse(context.isInternal());
 
-      context.addQueue(SimpleString.toSimpleString("t3"), new FakeQueueForRoutingContextTest("t3", true, true));
+      context.addQueue(SimpleString.of("t3"), new FakeQueueForRoutingContextTest("t3", true, true));
       assertFalse(context.isInternal());
 
       context.clear();
       assertFalse(context.isInternal());
 
-      context.addQueue(SimpleString.toSimpleString("t1"), new FakeQueueForRoutingContextTest("t1", true, true));
+      context.addQueue(SimpleString.of("t1"), new FakeQueueForRoutingContextTest("t1", true, true));
       assertTrue(context.isInternal());
 
-      context.addQueue(SimpleString.toSimpleString("t2"), new FakeQueueForRoutingContextTest("t2", true, true));
+      context.addQueue(SimpleString.of("t2"), new FakeQueueForRoutingContextTest("t2", true, true));
       assertTrue(context.isInternal());
 
-      context.addQueue(SimpleString.toSimpleString("t3"), new FakeQueueForRoutingContextTest("t3", true, true));
+      context.addQueue(SimpleString.of("t3"), new FakeQueueForRoutingContextTest("t3", true, true));
       assertTrue(context.isInternal());
    }
 
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/ArtemisRbacMBeanServerBuilderTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/ArtemisRbacMBeanServerBuilderTest.java
index 8086fc3095..1262fcf25a 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/ArtemisRbacMBeanServerBuilderTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/ArtemisRbacMBeanServerBuilderTest.java
@@ -80,7 +80,7 @@ public class ArtemisRbacMBeanServerBuilderTest extends ServerTestBase {
       MBeanServer proxy = underTest.newMBeanServer("d", mbeanServer, mBeanServerDelegate);
       ArtemisRbacInvocationHandler handler = (ArtemisRbacInvocationHandler) Proxy.getInvocationHandler(proxy);
       handler.brokerDomain = "a.b";
-      handler.rbacPrefix = SimpleString.toSimpleString("jmx");
+      handler.rbacPrefix = SimpleString.of("jmx");
 
       try {
          handler.addressFrom(null);
@@ -90,15 +90,15 @@ public class ArtemisRbacMBeanServerBuilderTest extends ServerTestBase {
 
       SimpleString rbacAddress = handler.addressFrom(new ObjectName("java.lang", "type", "Runtime"));
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx.java.lang.Runtime")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx.java.lang.Runtime")));
 
       rbacAddress = handler.addressFrom(new ObjectName("a.b", "type", "Runtime"));
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx")));
 
       rbacAddress = handler.addressFrom(new ObjectName("a.b", "broker", "bb"));
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx.broker")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx.broker")));
 
       Hashtable<String, String> attrs = new Hashtable<>();
       attrs.put("broker", "bb");
@@ -107,17 +107,17 @@ public class ArtemisRbacMBeanServerBuilderTest extends ServerTestBase {
       attrs.put("name", "n");
       rbacAddress = handler.addressFrom(new ObjectName("a.b", attrs));
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx.c.n")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx.c.n")));
 
 
       rbacAddress = handler.addressFrom(new ObjectName("a.b", attrs), "doIt");
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx.c.n.doIt")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx.c.n.doIt")));
 
       // non broker domain
       rbacAddress = handler.addressFrom(new ObjectName("j.l", attrs));
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx.j.l.t.c.n")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx.j.l.t.c.n")));
 
       // address
       attrs.clear();
@@ -127,7 +127,7 @@ public class ArtemisRbacMBeanServerBuilderTest extends ServerTestBase {
       attrs.put("component", "addresses");
       rbacAddress = handler.addressFrom(new ObjectName("a.b", attrs), "opOnA");
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx.address.a.opOnA")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx.address.a.opOnA")));
 
       // queue
       attrs.clear();
@@ -140,7 +140,7 @@ public class ArtemisRbacMBeanServerBuilderTest extends ServerTestBase {
 
       rbacAddress = handler.addressFrom(new ObjectName("a.b", attrs), "opOnQ");
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx.queue.q.opOnQ")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx.queue.q.opOnQ")));
 
       // divert
       attrs.clear();
@@ -154,7 +154,7 @@ public class ArtemisRbacMBeanServerBuilderTest extends ServerTestBase {
 
       rbacAddress = handler.addressFrom(new ObjectName("a.b", attrs), "opOnDivert");
       assertNotNull(rbacAddress);
-      assertEquals(0, rbacAddress.compareTo(SimpleString.toSimpleString("jmx.divert.d.opOnDivert")));
+      assertEquals(0, rbacAddress.compareTo(SimpleString.of("jmx.divert.d.opOnDivert")));
 
    }
 
@@ -164,7 +164,7 @@ public class ArtemisRbacMBeanServerBuilderTest extends ServerTestBase {
       ArtemisRbacInvocationHandler handler =
          (ArtemisRbacInvocationHandler) Proxy.getInvocationHandler(proxy);
       handler.brokerDomain = ActiveMQDefaultConfiguration.getDefaultJmxDomain();
-      handler.rbacPrefix = SimpleString.toSimpleString(ActiveMQDefaultConfiguration.getManagementRbacPrefix());
+      handler.rbacPrefix = SimpleString.of(ActiveMQDefaultConfiguration.getManagementRbacPrefix());
 
       for (Method m : ObjectNameBuilder.class.getDeclaredMethods() ) {
          if (Modifier.isPublic(m.getModifiers()) && ObjectName.class == m.getReturnType()) {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImplTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImplTest.java
index 9578e213ce..f2db2b01c8 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImplTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImplTest.java
@@ -81,7 +81,7 @@ public class ManagementServiceImplTest {
       managementService.registerAcceptor(acceptor, transportConfig);
       managementService.getAttribute(ResourceNames.ACCEPTOR + transportConfig.getName(), "name", auth);
 
-      SimpleString expected = SimpleString.toSimpleString("mm.acceptor.a1.getName");
+      SimpleString expected = SimpleString.of("mm.acceptor.a1.getName");
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.VIEW), Mockito.any(SecurityAuth.class));
 
       // address
@@ -91,19 +91,19 @@ public class ManagementServiceImplTest {
       managementService.registerAddress(new AddressInfo(addressName));
       managementService.getAttribute(ResourceNames.ADDRESS + addressName, "address", auth);
 
-      expected = SimpleString.toSimpleString("mm.address." + addressName + ".getAddress");
+      expected = SimpleString.of("mm.address." + addressName + ".getAddress");
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.VIEW), Mockito.any(SecurityAuth.class));
 
       // isX needs UPDATE with view regexp above
       Mockito.clearInvocations(securityStore);
       managementService.getAttribute(ResourceNames.ADDRESS + addressName, "paging", auth);
 
-      expected = SimpleString.toSimpleString("mm.address." + addressName + ".isPaging");
+      expected = SimpleString.of("mm.address." + addressName + ".isPaging");
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.EDIT), Mockito.any(SecurityAuth.class));
 
 
       // queue
-      final SimpleString queueName = SimpleString.toSimpleString("queueName");
+      final SimpleString queueName = SimpleString.of("queueName");
       Mockito.clearInvocations(securityStore);
 
       Queue queue = Mockito.mock(Queue.class);
@@ -114,13 +114,13 @@ public class ManagementServiceImplTest {
       managementService.registerQueue(queue, new AddressInfo(queueName), storageManager);
       managementService.getAttribute(ResourceNames.QUEUE + queueName, "ringSize", auth);
 
-      expected = SimpleString.toSimpleString("mm.queue." + queueName + ".getRingSize");
+      expected = SimpleString.of("mm.queue." + queueName + ".getRingSize");
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.VIEW), Mockito.any(SecurityAuth.class));
 
       Mockito.clearInvocations(securityStore);
       managementService.getAttribute(ResourceNames.QUEUE + queueName, "ID", auth);
 
-      expected = SimpleString.toSimpleString("mm.queue." + queueName + ".getID");
+      expected = SimpleString.of("mm.queue." + queueName + ".getID");
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.VIEW), Mockito.any(SecurityAuth.class));
 
    }
@@ -152,7 +152,7 @@ public class ManagementServiceImplTest {
       managementService.registerAcceptor(acceptor, transportConfig);
       managementService.invokeOperation(ResourceNames.ACCEPTOR + transportConfig.getName(), "getName", new Object[]{}, auth);
 
-      SimpleString expected = SimpleString.toSimpleString("$mm.acceptor.a1.getName");
+      SimpleString expected = SimpleString.of("$mm.acceptor.a1.getName");
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.VIEW), Mockito.any(SecurityAuth.class));
 
       // address
@@ -162,11 +162,11 @@ public class ManagementServiceImplTest {
       managementService.registerAddress(new AddressInfo(addressName));
       managementService.invokeOperation(ResourceNames.ADDRESS + addressName, "getAddress", new Object[]{}, auth);
 
-      expected = SimpleString.toSimpleString("$mm.address." + addressName + ".getAddress");
+      expected = SimpleString.of("$mm.address." + addressName + ".getAddress");
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.VIEW), Mockito.any(SecurityAuth.class));
 
       // queue
-      final SimpleString queueName = SimpleString.toSimpleString("queueName");
+      final SimpleString queueName = SimpleString.of("queueName");
       Mockito.clearInvocations(securityStore);
 
       Queue queue = Mockito.mock(Queue.class);
@@ -177,14 +177,14 @@ public class ManagementServiceImplTest {
       managementService.registerQueue(queue, new AddressInfo(queueName), storageManager);
       managementService.invokeOperation(ResourceNames.QUEUE + queueName, "getRingSize", new Object[]{}, auth);
 
-      expected = SimpleString.toSimpleString("$mm.queue." + queueName + ".getRingSize");
+      expected = SimpleString.of("$mm.queue." + queueName + ".getRingSize");
 
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.VIEW), Mockito.any(SecurityAuth.class));
 
       // update permission required on pause operation
       Mockito.clearInvocations(securityStore);
       managementService.invokeOperation(ResourceNames.QUEUE + queueName, "pause", new Object[]{}, auth);
-      expected = SimpleString.toSimpleString("$mm.queue." + queueName + ".pause");
+      expected = SimpleString.of("$mm.queue." + queueName + ".pause");
       Mockito.verify(securityStore).check(Mockito.eq(expected), Mockito.eq(CheckType.EDIT), Mockito.any(SecurityAuth.class));
 
    }
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java
index d37a658ade..f3af43b96b 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java
@@ -75,8 +75,8 @@ public class AddressSettingsTest extends ServerTestBase {
    private void testSingleMerge(boolean copy) {
       AddressSettings addressSettings = new AddressSettings();
       AddressSettings addressSettingsToMerge = new AddressSettings();
-      SimpleString DLQ = new SimpleString("testDLQ");
-      SimpleString exp = new SimpleString("testExpiryQueue");
+      SimpleString DLQ = SimpleString.of("testDLQ");
+      SimpleString exp = SimpleString.of("testExpiryQueue");
       addressSettingsToMerge.setDeadLetterAddress(DLQ);
       addressSettingsToMerge.setExpiryAddress(exp);
       addressSettingsToMerge.setMaxDeliveryAttempts(1000);
@@ -128,8 +128,8 @@ public class AddressSettingsTest extends ServerTestBase {
    private void testMultipleMerge(boolean copy) {
       AddressSettings addressSettings = new AddressSettings();
       AddressSettings addressSettingsToMerge = new AddressSettings();
-      SimpleString DLQ = new SimpleString("testDLQ");
-      SimpleString exp = new SimpleString("testExpiryQueue");
+      SimpleString DLQ = SimpleString.of("testDLQ");
+      SimpleString exp = SimpleString.of("testExpiryQueue");
       addressSettingsToMerge.setDeadLetterAddress(DLQ);
       addressSettingsToMerge.setExpiryAddress(exp);
       addressSettingsToMerge.setMaxDeliveryAttempts(1000);
@@ -144,7 +144,7 @@ public class AddressSettingsTest extends ServerTestBase {
       }
 
       AddressSettings addressSettingsToMerge2 = new AddressSettings();
-      SimpleString exp2 = new SimpleString("testExpiryQueue2");
+      SimpleString exp2 = SimpleString.of("testExpiryQueue2");
       addressSettingsToMerge2.setExpiryAddress(exp2);
       addressSettingsToMerge2.setMaxSizeBytes(2001);
       addressSettingsToMerge2.setRedeliveryDelay(2003);
@@ -179,8 +179,8 @@ public class AddressSettingsTest extends ServerTestBase {
    private void testMultipleMergeAll(boolean copy) {
       AddressSettings addressSettings = new AddressSettings();
       AddressSettings addressSettingsToMerge = new AddressSettings();
-      SimpleString DLQ = new SimpleString("testDLQ");
-      SimpleString exp = new SimpleString("testExpiryQueue");
+      SimpleString DLQ = SimpleString.of("testDLQ");
+      SimpleString exp = SimpleString.of("testExpiryQueue");
       addressSettingsToMerge.setDeadLetterAddress(DLQ);
       addressSettingsToMerge.setExpiryAddress(exp);
       addressSettingsToMerge.setMaxSizeBytes(1001);
@@ -194,8 +194,8 @@ public class AddressSettingsTest extends ServerTestBase {
       }
 
       AddressSettings addressSettingsToMerge2 = new AddressSettings();
-      SimpleString exp2 = new SimpleString("testExpiryQueue2");
-      SimpleString DLQ2 = new SimpleString("testDlq2");
+      SimpleString exp2 = SimpleString.of("testExpiryQueue2");
+      SimpleString DLQ2 = SimpleString.of("testDlq2");
       addressSettingsToMerge2.setExpiryAddress(exp2);
       addressSettingsToMerge2.setDeadLetterAddress(DLQ2);
       addressSettingsToMerge2.setMaxDeliveryAttempts(2000);
@@ -225,8 +225,8 @@ public class AddressSettingsTest extends ServerTestBase {
    @Test
    public void testToJSON() {
       AddressSettings addressSettings = new AddressSettings();
-      SimpleString DLQ = new SimpleString("testDLQ");
-      SimpleString exp = new SimpleString("testExpiryQueue");
+      SimpleString DLQ = SimpleString.of("testDLQ");
+      SimpleString exp = SimpleString.of("testExpiryQueue");
       addressSettings.setDeadLetterAddress(DLQ);
       addressSettings.setExpiryAddress(exp);
       addressSettings.setMaxSizeBytes(1001);
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SimpleStringTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SimpleStringTest.java
index c566bf1640..a2cac17e64 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SimpleStringTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SimpleStringTest.java
@@ -46,12 +46,12 @@ public class SimpleStringTest {
     */
    @Test
    public void testGetChar() {
-      SimpleString p1 = new SimpleString("foo");
-      SimpleString p2 = new SimpleString("bar");
+      SimpleString p1 = SimpleString.of("foo");
+      SimpleString p2 = SimpleString.of("bar");
       for (int i = 0; i < 1 << 16; i++) {
          String msg = "expecting " + i;
          char c = (char) i;
-         SimpleString s = new SimpleString(String.valueOf(c));
+         SimpleString s = SimpleString.of(String.valueOf(c));
 
          // test getChars(...)
          char[] c1 = new char[1];
@@ -66,7 +66,7 @@ public class SimpleStringTest {
          assertEquals(c, s2.charAt(1), msg);
 
          // test splitting with chars
-         SimpleString sSplit = new SimpleString("foo" + String.valueOf(c) + "bar");
+         SimpleString sSplit = SimpleString.of("foo" + String.valueOf(c) + "bar");
          SimpleString[] chunks = sSplit.split(c);
          SimpleString[] split1 = p1.split(c);
          SimpleString[] split2 = p2.split(c);
@@ -86,7 +86,7 @@ public class SimpleStringTest {
    public void testString() throws Exception {
       final String str = "hello123ABC__524`16254`6125!%^$!%$!%$!%$!%!$%!$$!\uA324";
 
-      SimpleString s = new SimpleString(str);
+      SimpleString s = SimpleString.of(str);
 
       assertEquals(str, s.toString());
 
@@ -94,32 +94,32 @@ public class SimpleStringTest {
 
       byte[] data = s.getData();
 
-      SimpleString s2 = new SimpleString(data);
+      SimpleString s2 = SimpleString.of(data);
 
       assertEquals(str, s2.toString());
    }
 
    @Test
    public void testStartsWith() throws Exception {
-      SimpleString s1 = new SimpleString("abcdefghi");
+      SimpleString s1 = SimpleString.of("abcdefghi");
 
-      assertTrue(s1.startsWith(new SimpleString("abc")));
+      assertTrue(s1.startsWith(SimpleString.of("abc")));
 
-      assertTrue(s1.startsWith(new SimpleString("abcdef")));
+      assertTrue(s1.startsWith(SimpleString.of("abcdef")));
 
-      assertTrue(s1.startsWith(new SimpleString("abcdefghi")));
+      assertTrue(s1.startsWith(SimpleString.of("abcdefghi")));
 
-      assertFalse(s1.startsWith(new SimpleString("abcdefghijklmn")));
+      assertFalse(s1.startsWith(SimpleString.of("abcdefghijklmn")));
 
-      assertFalse(s1.startsWith(new SimpleString("aardvark")));
+      assertFalse(s1.startsWith(SimpleString.of("aardvark")));
 
-      assertFalse(s1.startsWith(new SimpleString("z")));
+      assertFalse(s1.startsWith(SimpleString.of("z")));
    }
 
    @Test
    public void testCharSequence() throws Exception {
       String s = "abcdefghijkl";
-      SimpleString s1 = new SimpleString(s);
+      SimpleString s1 = SimpleString.of(s);
 
       assertEquals('a', s1.charAt(0));
       assertEquals('b', s1.charAt(1));
@@ -162,13 +162,13 @@ public class SimpleStringTest {
       assertEquals(ss, s1);
 
       ss = s1.subSequence(1, 4);
-      assertEquals(ss, new SimpleString("bcd"));
+      assertEquals(ss, SimpleString.of("bcd"));
 
       ss = s1.subSequence(5, 10);
-      assertEquals(ss, new SimpleString("fghij"));
+      assertEquals(ss, SimpleString.of("fghij"));
 
       ss = s1.subSequence(5, 12);
-      assertEquals(ss, new SimpleString("fghijkl"));
+      assertEquals(ss, SimpleString.of("fghijkl"));
 
       try {
          s1.subSequence(-1, 2);
@@ -208,21 +208,21 @@ public class SimpleStringTest {
 
    @Test
    public void testEquals() throws Exception {
-      assertFalse(new SimpleString("abcdef").equals(new Object()));
+      assertFalse(SimpleString.of("abcdef").equals(new Object()));
 
-      assertFalse(new SimpleString("abcef").equals(null));
+      assertFalse(SimpleString.of("abcef").equals(null));
 
-      assertEquals(new SimpleString("abcdef"), new SimpleString("abcdef"));
+      assertEquals(SimpleString.of("abcdef"), SimpleString.of("abcdef"));
 
-      assertFalse(new SimpleString("abcdef").equals(new SimpleString("abggcdef")));
-      assertFalse(new SimpleString("abcdef").equals(new SimpleString("ghijkl")));
+      assertFalse(SimpleString.of("abcdef").equals(SimpleString.of("abggcdef")));
+      assertFalse(SimpleString.of("abcdef").equals(SimpleString.of("ghijkl")));
    }
 
    @Test
    public void testHashcode() throws Exception {
-      SimpleString str = new SimpleString("abcdef");
-      SimpleString sameStr = new SimpleString("abcdef");
-      SimpleString differentStr = new SimpleString("ghijk");
+      SimpleString str = SimpleString.of("abcdef");
+      SimpleString sameStr = SimpleString.of("abcdef");
+      SimpleString differentStr = SimpleString.of("ghijk");
 
       assertTrue(str.hashCode() == sameStr.hashCode());
       assertFalse(str.hashCode() == differentStr.hashCode());
@@ -232,9 +232,9 @@ public class SimpleStringTest {
    public void testUnicode() throws Exception {
       String myString = "abcdef&^*&!^ghijkl\uB5E2\uCAC7\uB2BB\uB7DD\uB7C7\uB3A3\uBCE4\uB5A5";
 
-      SimpleString s = new SimpleString(myString);
+      SimpleString s = SimpleString.of(myString);
       byte[] data = s.getData();
-      s = new SimpleString(data);
+      s = SimpleString.of(data);
 
       assertEquals(myString, s.toString());
    }
@@ -243,18 +243,18 @@ public class SimpleStringTest {
    public void testUnicodeWithSurrogates() throws Exception {
       String myString = "abcdef&^*&!^ghijkl\uD900\uDD00";
 
-      SimpleString s = new SimpleString(myString);
+      SimpleString s = SimpleString.of(myString);
       byte[] data = s.getData();
-      s = new SimpleString(data);
+      s = SimpleString.of(data);
 
       assertEquals(myString, s.toString());
    }
 
    @Test
    public void testSizeofString() throws Exception {
-      assertEquals(DataConstants.SIZE_INT, SimpleString.sizeofString(new SimpleString("")));
+      assertEquals(DataConstants.SIZE_INT, SimpleString.sizeofString(SimpleString.of("")));
 
-      SimpleString str = new SimpleString(RandomUtil.randomString());
+      SimpleString str = SimpleString.of(RandomUtil.randomString());
       assertEquals(DataConstants.SIZE_INT + str.getData().length, SimpleString.sizeofString(str));
    }
 
@@ -262,15 +262,15 @@ public class SimpleStringTest {
    public void testSizeofNullableString() throws Exception {
       assertEquals(1, SimpleString.sizeofNullableString(null));
 
-      assertEquals(1 + DataConstants.SIZE_INT, SimpleString.sizeofNullableString(new SimpleString("")));
+      assertEquals(1 + DataConstants.SIZE_INT, SimpleString.sizeofNullableString(SimpleString.of("")));
 
-      SimpleString str = new SimpleString(RandomUtil.randomString());
+      SimpleString str = SimpleString.of(RandomUtil.randomString());
       assertEquals(1 + DataConstants.SIZE_INT + str.getData().length, SimpleString.sizeofNullableString(str));
    }
 
    @Test
    public void testSplitNoDelimeter() throws Exception {
-      SimpleString s = new SimpleString("abcdefghi");
+      SimpleString s = SimpleString.of("abcdefghi");
       SimpleString[] strings = s.split('.');
       assertNotNull(strings);
       assertEquals(strings.length, 1);
@@ -279,31 +279,31 @@ public class SimpleStringTest {
 
    @Test
    public void testSplit1Delimeter() throws Exception {
-      SimpleString s = new SimpleString("abcd.efghi");
+      SimpleString s = SimpleString.of("abcd.efghi");
       SimpleString[] strings = s.split('.');
       assertNotNull(strings);
       assertEquals(strings.length, 2);
-      assertEquals(strings[0], new SimpleString("abcd"));
-      assertEquals(strings[1], new SimpleString("efghi"));
+      assertEquals(strings[0], SimpleString.of("abcd"));
+      assertEquals(strings[1], SimpleString.of("efghi"));
    }
 
    @Test
    public void testSplitmanyDelimeters() throws Exception {
-      SimpleString s = new SimpleString("abcd.efghi.jklmn.opqrs.tuvw.xyz");
+      SimpleString s = SimpleString.of("abcd.efghi.jklmn.opqrs.tuvw.xyz");
       SimpleString[] strings = s.split('.');
       assertNotNull(strings);
       assertEquals(strings.length, 6);
-      assertEquals(strings[0], new SimpleString("abcd"));
-      assertEquals(strings[1], new SimpleString("efghi"));
-      assertEquals(strings[2], new SimpleString("jklmn"));
-      assertEquals(strings[3], new SimpleString("opqrs"));
-      assertEquals(strings[4], new SimpleString("tuvw"));
-      assertEquals(strings[5], new SimpleString("xyz"));
+      assertEquals(strings[0], SimpleString.of("abcd"));
+      assertEquals(strings[1], SimpleString.of("efghi"));
+      assertEquals(strings[2], SimpleString.of("jklmn"));
+      assertEquals(strings[3], SimpleString.of("opqrs"));
+      assertEquals(strings[4], SimpleString.of("tuvw"));
+      assertEquals(strings[5], SimpleString.of("xyz"));
    }
 
    @Test
    public void testContains() {
-      SimpleString simpleString = new SimpleString("abcdefghijklmnopqrst");
+      SimpleString simpleString = SimpleString.of("abcdefghijklmnopqrst");
       assertFalse(simpleString.contains('.'));
       assertFalse(simpleString.contains('%'));
       assertFalse(simpleString.contains('8'));
@@ -332,14 +332,14 @@ public class SimpleStringTest {
 
    @Test
    public void testConcat() {
-      SimpleString start = new SimpleString("abcdefg");
-      SimpleString middle = new SimpleString("hijklmnop");
-      SimpleString end = new SimpleString("qrstuvwxyz");
-      assertEquals(start.concat(middle).concat(end), new SimpleString("abcdefghijklmnopqrstuvwxyz"));
-      assertEquals(start.concat('.').concat(end), new SimpleString("abcdefg.qrstuvwxyz"));
+      SimpleString start = SimpleString.of("abcdefg");
+      SimpleString middle = SimpleString.of("hijklmnop");
+      SimpleString end = SimpleString.of("qrstuvwxyz");
+      assertEquals(start.concat(middle).concat(end), SimpleString.of("abcdefghijklmnopqrstuvwxyz"));
+      assertEquals(start.concat('.').concat(end), SimpleString.of("abcdefg.qrstuvwxyz"));
       // Testing concat of SimpleString with String
       for (int i = 0; i < 10; i++) {
-         assertEquals(new SimpleString("abcdefg-" + i), start.concat("-" + Integer.toString(i)));
+         assertEquals(SimpleString.of("abcdefg-" + i), start.concat("-" + Integer.toString(i)));
 
       }
    }
@@ -355,9 +355,9 @@ public class SimpleStringTest {
          }
          String strvalue = buffer.toString();
 
-         final int initialhash = new SimpleString(strvalue).hashCode();
+         final int initialhash = SimpleString.of(strvalue).hashCode();
 
-         final SimpleString value = new SimpleString(strvalue);
+         final SimpleString value = SimpleString.of(strvalue);
 
          int nThreads = 100;
          final CountDownLatch latch = new CountDownLatch(nThreads);
@@ -407,7 +407,7 @@ public class SimpleStringTest {
    @Test
    public void testToSimpleStringPoolStringArgument() throws Exception {
       final String s = "pooled";
-      final SimpleString ss = SimpleString.toSimpleString(s);
+      final SimpleString ss = SimpleString.of(s);
       final String s1 = ss.toString();
       assertSame(s, s1, "SimpleString::toSimpleString is not pooling the given String");
    }
@@ -417,10 +417,10 @@ public class SimpleStringTest {
       final int capacity = 8;
       final int chars = Integer.toString(capacity).length();
       final SimpleString.ByteBufSimpleStringPool pool = new SimpleString.ByteBufSimpleStringPool(capacity, chars);
-      final int bytes = new SimpleString(Integer.toString(capacity)).sizeof();
+      final int bytes = SimpleString.of(Integer.toString(capacity)).sizeof();
       final ByteBuf bb = Unpooled.buffer(bytes, bytes);
       for (int i = 0; i < capacity; i++) {
-         final SimpleString s = new SimpleString(Integer.toString(i));
+         final SimpleString s = SimpleString.of(Integer.toString(i));
          bb.resetWriterIndex();
          SimpleString.writeSimpleString(bb, s);
          bb.resetReaderIndex();
@@ -433,7 +433,7 @@ public class SimpleStringTest {
 
    @Test
    public void testByteBufSimpleStringPoolTooLong() {
-      final SimpleString tooLong = new SimpleString("aa");
+      final SimpleString tooLong = SimpleString.of("aa");
       final ByteBuf bb = Unpooled.buffer(tooLong.sizeof(), tooLong.sizeof());
       SimpleString.writeSimpleString(bb, tooLong);
       final SimpleString.ByteBufSimpleStringPool pool = new SimpleString.ByteBufSimpleStringPool(1, tooLong.length() - 1);
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerWrapper.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerWrapper.java
index a6b7e615f0..3db8eaa577 100644
--- a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerWrapper.java
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerWrapper.java
@@ -91,7 +91,7 @@ public class ArtemisBrokerWrapper extends ArtemisBrokerBase {
          commonSettings = new AddressSettings();
          addressSettingsMap.put(match, commonSettings);
       }
-      SimpleString dla = new SimpleString("ActiveMQ.DLQ");
+      SimpleString dla = SimpleString.of("ActiveMQ.DLQ");
       commonSettings.setDeadLetterAddress(dla);
       commonSettings.setExpiryAddress(dla);
       commonSettings.setAutoCreateQueues(true);
@@ -260,7 +260,7 @@ public class ArtemisBrokerWrapper extends ArtemisBrokerBase {
       synchronized (testQueues) {
          SimpleString coreQ = testQueues.get(qname);
          if (coreQ == null) {
-            coreQ = new SimpleString(qname);
+            coreQ = SimpleString.of(qname);
             try {
                this.server.createQueue(new QueueConfiguration(coreQ).setDurable(false));
                testQueues.put(qname, coreQ);
@@ -282,7 +282,7 @@ public class ArtemisBrokerWrapper extends ArtemisBrokerBase {
       } else {
          qname = amq5Dest.getPhysicalName();
       }
-      Binding binding = server.getPostOffice().getBinding(new SimpleString(qname));
+      Binding binding = server.getPostOffice().getBinding(SimpleString.of(qname));
       if (binding != null) {
          QueueImpl q = (QueueImpl) binding.getBindable();
          count = q.getMessageCount();
diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/JMSConsumerTest.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/JMSConsumerTest.java
index 40b388f239..f6a8be7464 100644
--- a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/JMSConsumerTest.java
+++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/JMSConsumerTest.java
@@ -909,7 +909,7 @@ public class JMSConsumerTest extends JmsTestSupport {
    private QueueControl createQueueControl(String destName) throws Exception {
       ArtemisBrokerWrapper wrapper = (ArtemisBrokerWrapper) broker.getBroker();
       MBeanServer beanServer = wrapper.getMbeanServer();
-      SimpleString address = new SimpleString(destName);
+      SimpleString address = SimpleString.of(destName);
       ObjectName objName = ObjectNameBuilder.DEFAULT.getQueueObjectName(address, address, RoutingType.ANYCAST);
       return MBeanServerInvocationHandler.newProxyInstance(beanServer, objName, QueueControl.class, false);
    }
diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/JmsQueueCompositeSendReceiveTest.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/JmsQueueCompositeSendReceiveTest.java
index 14559337a2..5f7e322086 100644
--- a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/JmsQueueCompositeSendReceiveTest.java
+++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/JmsQueueCompositeSendReceiveTest.java
@@ -118,7 +118,7 @@ public class JmsQueueCompositeSendReceiveTest extends JmsTopicSendReceiveTest {
       try (ServerLocator locator = ServerLocatorImpl.newLocator("tcp://localhost:61616");
            ClientSessionFactory factory = locator.createSessionFactory();
            ClientSession session = factory.createSession()) {
-         ClientSession.QueueQuery query = session.queueQuery(new SimpleString("TEST"));
+         ClientSession.QueueQuery query = session.queueQuery(SimpleString.of("TEST"));
          assertNotNull(query);
          assertEquals(data.length, query.getMessageCount());
       }
diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/OptimizedAckTest.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/OptimizedAckTest.java
index 23de19fac5..15bd5f5396 100644
--- a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/OptimizedAckTest.java
+++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/OptimizedAckTest.java
@@ -65,7 +65,7 @@ public class OptimizedAckTest extends TestSupport {
       MessageConsumer consumer = session.createConsumer(queue);
       //check queue delivering count is 10
       ArtemisBrokerWrapper broker = (ArtemisBrokerWrapper) ArtemisBrokerHelper.getBroker().getBroker();
-      Binding binding = broker.getServer().getPostOffice().getBinding(new SimpleString("test"));
+      Binding binding = broker.getServer().getPostOffice().getBinding(SimpleString.of("test"));
 
       final QueueImpl coreQueue = (QueueImpl) binding.getBindable();
       assertTrue("delivering count is 10", Wait.waitFor(new Wait.Condition() {
@@ -107,7 +107,7 @@ public class OptimizedAckTest extends TestSupport {
 
       //check queue delivering count is 10
       ArtemisBrokerWrapper broker = (ArtemisBrokerWrapper) ArtemisBrokerHelper.getBroker().getBroker();
-      Binding binding = broker.getServer().getPostOffice().getBinding(new SimpleString("test"));
+      Binding binding = broker.getServer().getPostOffice().getBinding(SimpleString.of("test"));
 
       final QueueImpl coreQueue = (QueueImpl) binding.getBindable();
       assertTrue("prefetch full", Wait.waitFor(new Wait.Condition() {
@@ -151,7 +151,7 @@ public class OptimizedAckTest extends TestSupport {
 
       MessageConsumer consumer = session.createConsumer(queue);
       ArtemisBrokerWrapper broker = (ArtemisBrokerWrapper) ArtemisBrokerHelper.getBroker().getBroker();
-      Binding binding = broker.getServer().getPostOffice().getBinding(new SimpleString("test"));
+      Binding binding = broker.getServer().getPostOffice().getBinding(SimpleString.of("test"));
 
       final QueueImpl coreQueue = (QueueImpl) binding.getBindable();
       assertTrue("prefetch full", Wait.waitFor(new Wait.Condition() {
diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/AMQ1925Test.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/AMQ1925Test.java
index 9ba3156d0e..f83e9da55d 100644
--- a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/AMQ1925Test.java
+++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/AMQ1925Test.java
@@ -157,7 +157,7 @@ public class AMQ1925Test extends OpenwireArtemisBaseTest implements ExceptionLis
    }
 
    private void assertQueueLength(int len) throws Exception, IOException {
-      QueueImpl queue = (QueueImpl) bs.getActiveMQServer().getPostOffice().getBinding(new SimpleString(QUEUE_NAME)).getBindable();
+      QueueImpl queue = (QueueImpl) bs.getActiveMQServer().getPostOffice().getBinding(SimpleString.of(QUEUE_NAME)).getBindable();
       if (len > queue.getMessageCount()) {
          //we wait for a moment as the tx might still in afterCommit stage (async op)
          Thread.sleep(5000);
diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverConsumerUnconsumedTest.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverConsumerUnconsumedTest.java
index 3549baa6e1..02a0d442a2 100644
--- a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverConsumerUnconsumedTest.java
+++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverConsumerUnconsumedTest.java
@@ -243,7 +243,7 @@ public class FailoverConsumerUnconsumedTest extends OpenwireArtemisBaseTest {
          testConsumers.add(new TestConsumer(consumerSession, destination, connection));
       }
 
-      assureQueueMessages(0, new SimpleString(QUEUE_NAME));
+      assureQueueMessages(0, SimpleString.of(QUEUE_NAME));
 
       produceMessage(consumerSession, destination, maxConsumers * prefetch);
 
diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/cluster/reattach/MultiThreadRandomReattachTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/cluster/reattach/MultiThreadRandomReattachTestBase.java
index 4ce24de3e7..5b65a59b4b 100644
--- a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/cluster/reattach/MultiThreadRandomReattachTestBase.java
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/cluster/reattach/MultiThreadRandomReattachTestBase.java
@@ -63,7 +63,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
 
    private final int NUM_THREADS = getNumThreads();
 
-   protected static final SimpleString ADDRESS = new SimpleString("FailoverTestAddress");
+   protected static final SimpleString ADDRESS = SimpleString.of("FailoverTestAddress");
 
    protected ActiveMQServer server;
 
@@ -258,7 +258,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
    protected void doTestA(final ClientSessionFactory sf,
                           final int threadNum,
                           final ClientSession session2) throws Exception {
-      SimpleString subName = new SimpleString("sub" + threadNum);
+      SimpleString subName = SimpleString.of("sub" + threadNum);
 
       ClientSession session = addClientSession(sf.createSession(false, true, true));
 
@@ -312,7 +312,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          ClientSession sessConsume = createAutoCommitSession(sf);
 
@@ -365,7 +365,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -390,7 +390,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          ClientSession sessConsume = createAutoCommitSession(sf);
 
@@ -445,7 +445,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -472,7 +472,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          ClientSession sessConsume = createTransactionalSession(sf);
 
@@ -546,7 +546,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -572,7 +572,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + " sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + " sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, false, false);
          sessConsume.addMetaData("data", RandomUtil.randomString());
@@ -671,7 +671,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + " sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + " sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -699,7 +699,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, true, true);
          sessConsume.addMetaData("some-data", RandomUtil.randomString());
@@ -730,7 +730,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -756,7 +756,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, true, true);
          sessConsume.addMetaData("data", RandomUtil.randomString());
@@ -789,7 +789,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -815,7 +815,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, false, false);
          sessConsume.addMetaData("data", RandomUtil.randomString());
@@ -862,7 +862,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -888,7 +888,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, false, false);
          sessConsume.addMetaData("data", RandomUtil.randomString());
@@ -937,7 +937,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString(threadNum + "sub" + i);
+         SimpleString subName = SimpleString.of(threadNum + "sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -953,14 +953,14 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       ClientSession sessCreate = sf.createSession(false, true, true);
       sessCreate.addMetaData("data", RandomUtil.randomString());
 
-      sessCreate.createQueue(new QueueConfiguration(new SimpleString(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
+      sessCreate.createQueue(new QueueConfiguration(SimpleString.of(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
 
       ClientSession sess = sf.createSession(false, true, true);
       sess.addMetaData("data", RandomUtil.randomString());
 
       sess.start();
 
-      ClientConsumer consumer = sess.createConsumer(new SimpleString(threadNum + ADDRESS.toString()));
+      ClientConsumer consumer = sess.createConsumer(SimpleString.of(threadNum + ADDRESS.toString()));
 
       ClientProducer producer = sess.createProducer(ADDRESS);
 
@@ -975,7 +975,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
 
       sess.close();
 
-      sessCreate.deleteQueue(new SimpleString(threadNum + ADDRESS.toString()));
+      sessCreate.deleteQueue(SimpleString.of(threadNum + ADDRESS.toString()));
 
       sessCreate.close();
    }
@@ -984,14 +984,14 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       ClientSession sessCreate = sf.createSession(false, true, true);
       sessCreate.addMetaData("data", RandomUtil.randomString());
 
-      sessCreate.createQueue(new QueueConfiguration(new SimpleString(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
+      sessCreate.createQueue(new QueueConfiguration(SimpleString.of(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
 
       ClientSession sess = sf.createSession(false, true, true);
       sess.addMetaData("data", RandomUtil.randomString());
 
       sess.start();
 
-      ClientConsumer consumer = sess.createConsumer(new SimpleString(threadNum + ADDRESS.toString()));
+      ClientConsumer consumer = sess.createConsumer(SimpleString.of(threadNum + ADDRESS.toString()));
 
       ClientProducer producer = sess.createProducer(ADDRESS);
 
@@ -1006,7 +1006,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
 
       sess.close();
 
-      sessCreate.deleteQueue(new SimpleString(threadNum + ADDRESS.toString()));
+      sessCreate.deleteQueue(SimpleString.of(threadNum + ADDRESS.toString()));
 
       sessCreate.close();
    }
@@ -1015,17 +1015,17 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
       ClientSession s = sf.createSession(false, false, false);
       s.addMetaData("data", RandomUtil.randomString());
 
-      s.createQueue(new QueueConfiguration(new SimpleString(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
+      s.createQueue(new QueueConfiguration(SimpleString.of(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
 
       final int numConsumers = 100;
 
       for (int i = 0; i < numConsumers; i++) {
-         ClientConsumer consumer = s.createConsumer(new SimpleString(threadNum + ADDRESS.toString()));
+         ClientConsumer consumer = s.createConsumer(SimpleString.of(threadNum + ADDRESS.toString()));
 
          consumer.close();
       }
 
-      s.deleteQueue(new SimpleString(threadNum + ADDRESS.toString()));
+      s.deleteQueue(SimpleString.of(threadNum + ADDRESS.toString()));
 
       s.close();
    }
@@ -1048,7 +1048,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
    protected void doTestN(final ClientSessionFactory sf, final int threadNum) throws Exception {
       ClientSession sessCreate = sf.createSession(false, true, true);
 
-      sessCreate.createQueue(new QueueConfiguration(new SimpleString(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
+      sessCreate.createQueue(new QueueConfiguration(SimpleString.of(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
 
       ClientSession sess = sf.createSession(false, true, true);
       sess.addMetaData("data", RandomUtil.randomString());
@@ -1059,7 +1059,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
 
       sess.stop();
 
-      ClientConsumer consumer = sess.createConsumer(new SimpleString(threadNum + ADDRESS.toString()));
+      ClientConsumer consumer = sess.createConsumer(SimpleString.of(threadNum + ADDRESS.toString()));
 
       ClientProducer producer = sess.createProducer(ADDRESS);
 
@@ -1080,7 +1080,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
 
       sess.close();
 
-      sessCreate.deleteQueue(new SimpleString(threadNum + ADDRESS.toString()));
+      sessCreate.deleteQueue(SimpleString.of(threadNum + ADDRESS.toString()));
 
       sessCreate.close();
    }
@@ -1088,13 +1088,13 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
    protected void doTestO(final ClientSessionFactory sf, final int threadNum) throws Exception {
       ClientSession sessCreate = sf.createSession(false, true, true);
 
-      sessCreate.createQueue(new QueueConfiguration(new SimpleString(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
+      sessCreate.createQueue(new QueueConfiguration(SimpleString.of(threadNum + ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
 
       ClientSession sess = sf.createSession(false, true, true);
 
       sess.start();
 
-      ClientConsumer consumer = sess.createConsumer(new SimpleString(threadNum + ADDRESS.toString()));
+      ClientConsumer consumer = sess.createConsumer(SimpleString.of(threadNum + ADDRESS.toString()));
 
       for (int i = 0; i < 100; i++) {
          assertNull(consumer.receiveImmediate());
@@ -1102,7 +1102,7 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
 
       sess.close();
 
-      sessCreate.deleteQueue(new SimpleString(threadNum + ADDRESS.toString()));
+      sessCreate.deleteQueue(SimpleString.of(threadNum + ADDRESS.toString()));
 
       sessCreate.close();
    }
@@ -1154,8 +1154,8 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
                              final int threadNum) throws Exception {
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQBytesMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("threadnum"), threadNum);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("threadnum"), threadNum);
+         message.putIntProperty(SimpleString.of("count"), i);
          setBody(message);
          producer.send(message);
       }
@@ -1180,8 +1180,8 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
 
             assertNotNull(msg);
 
-            int tn = (Integer) msg.getObjectProperty(new SimpleString("threadnum"));
-            int cnt = (Integer) msg.getObjectProperty(new SimpleString("count"));
+            int tn = (Integer) msg.getObjectProperty(SimpleString.of("threadnum"));
+            int cnt = (Integer) msg.getObjectProperty(SimpleString.of("count"));
 
             Integer c = consumerCounts.get(tn);
             if (c == null) {
@@ -1249,8 +1249,8 @@ public abstract class MultiThreadRandomReattachTestBase extends MultiThreadReatt
             return;
          }
 
-         int threadNum = (Integer) message.getObjectProperty(new SimpleString("threadnum"));
-         int cnt = (Integer) message.getObjectProperty(new SimpleString("count"));
+         int threadNum = (Integer) message.getObjectProperty(SimpleString.of("threadnum"));
+         int cnt = (Integer) message.getObjectProperty(SimpleString.of("count"));
 
          Integer c = counts.get(threadNum);
          if (c == null) {
diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/cluster/reattach/RandomReattachTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/cluster/reattach/RandomReattachTestBase.java
index 9ff55c9611..54203e04e7 100644
--- a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/cluster/reattach/RandomReattachTestBase.java
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/cluster/reattach/RandomReattachTestBase.java
@@ -63,7 +63,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
    private static final int RECEIVE_TIMEOUT = 10000;
 
 
-   private static final SimpleString ADDRESS = new SimpleString("FailoverTestAddress");
+   private static final SimpleString ADDRESS = SimpleString.of("FailoverTestAddress");
 
    private ActiveMQServer server;
 
@@ -237,7 +237,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, true, true);
 
@@ -258,7 +258,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -274,7 +274,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
                fail("Too many messages");
             }
 
-            assertEquals(count, message.getObjectProperty(new SimpleString("count")));
+            assertEquals(count, message.getObjectProperty(SimpleString.of("count")));
 
             count++;
 
@@ -314,7 +314,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -339,7 +339,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, true, true);
 
@@ -358,7 +358,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -378,7 +378,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
                fail("Too many messages");
             }
 
-            assertEquals(count, message.getObjectProperty(new SimpleString("count")));
+            assertEquals(count, message.getObjectProperty(SimpleString.of("count")));
 
             count++;
 
@@ -413,7 +413,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -439,7 +439,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, false, false);
 
@@ -460,7 +460,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -468,7 +468,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -486,7 +486,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
                fail("Too many messages, expected " + count);
             }
 
-            assertEquals(count, message.getObjectProperty(new SimpleString("count")));
+            assertEquals(count, message.getObjectProperty(SimpleString.of("count")));
 
             count++;
 
@@ -554,7 +554,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -579,7 +579,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, false, false);
 
@@ -598,7 +598,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -606,7 +606,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -628,7 +628,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
                fail("Too many messages, " + count);
             }
 
-            assertEquals(count, message.getObjectProperty(new SimpleString("count")));
+            assertEquals(count, message.getObjectProperty(SimpleString.of("count")));
 
             count++;
 
@@ -689,7 +689,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -716,7 +716,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, true, true);
 
@@ -737,7 +737,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -747,7 +747,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
             assertNotNull(msg);
 
-            assertEquals(i, msg.getObjectProperty(new SimpleString("count")));
+            assertEquals(i, msg.getObjectProperty(SimpleString.of("count")));
 
             msg.acknowledge();
          }
@@ -767,7 +767,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -792,7 +792,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, true, true);
 
@@ -811,7 +811,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -829,7 +829,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
             assertNotNull(msg);
 
-            assertEquals(i, msg.getObjectProperty(new SimpleString("count")));
+            assertEquals(i, msg.getObjectProperty(SimpleString.of("count")));
 
             msg.acknowledge();
          }
@@ -849,7 +849,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -876,7 +876,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, false, false);
 
@@ -897,7 +897,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -905,7 +905,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -917,7 +917,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
             assertNotNull(msg);
 
-            assertEquals(i, msg.getObjectProperty(new SimpleString("count")));
+            assertEquals(i, msg.getObjectProperty(SimpleString.of("count")));
 
             msg.acknowledge();
          }
@@ -939,7 +939,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
             assertNotNull(msg);
 
-            assertEquals(i, msg.getObjectProperty(new SimpleString("count")));
+            assertEquals(i, msg.getObjectProperty(SimpleString.of("count")));
 
             msg.acknowledge();
          }
@@ -963,7 +963,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -988,7 +988,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       Set<ClientSession> sessions = new HashSet<>();
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          ClientSession sessConsume = sf.createSession(false, false, false);
 
@@ -1007,7 +1007,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -1015,7 +1015,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       for (int i = 0; i < numMessages; i++) {
          ClientMessage message = sessSend.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
-         message.putIntProperty(new SimpleString("count"), i);
+         message.putIntProperty(SimpleString.of("count"), i);
          producer.send(message);
       }
 
@@ -1031,7 +1031,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
             assertNotNull(msg);
 
-            assertEquals(i, msg.getObjectProperty(new SimpleString("count")));
+            assertEquals(i, msg.getObjectProperty(SimpleString.of("count")));
 
             msg.acknowledge();
          }
@@ -1055,7 +1055,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
             assertNotNull(msg);
 
-            assertEquals(i, msg.getObjectProperty(new SimpleString("count")));
+            assertEquals(i, msg.getObjectProperty(SimpleString.of("count")));
 
             msg.acknowledge();
          }
@@ -1079,7 +1079,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
       }
 
       for (int i = 0; i < numSessions; i++) {
-         SimpleString subName = new SimpleString("sub" + i);
+         SimpleString subName = SimpleString.of("sub" + i);
 
          s.deleteQueue(subName);
       }
@@ -1180,7 +1180,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
    protected void doTestN(final ClientSessionFactory sf) throws Exception {
       ClientSession sessCreate = sf.createSession(false, true, true);
 
-      sessCreate.createQueue(new QueueConfiguration(new SimpleString(ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
+      sessCreate.createQueue(new QueueConfiguration(SimpleString.of(ADDRESS.toString())).setAddress(ADDRESS).setDurable(false));
 
       ClientSession sess = sf.createSession(false, true, true);
 
@@ -1190,7 +1190,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       sess.stop();
 
-      ClientConsumer consumer = sess.createConsumer(new SimpleString(ADDRESS.toString()));
+      ClientConsumer consumer = sess.createConsumer(SimpleString.of(ADDRESS.toString()));
 
       ClientProducer producer = sess.createProducer(ADDRESS);
 
@@ -1211,7 +1211,7 @@ public abstract class RandomReattachTestBase extends ActiveMQTestBase {
 
       sess.close();
 
-      sessCreate.deleteQueue(new SimpleString(ADDRESS.toString()));
+      sessCreate.deleteQueue(SimpleString.of(ADDRESS.toString()));
 
       sessCreate.close();
    }
diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/largemessage/LargeMessageTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/largemessage/LargeMessageTestBase.java
index 34bf1c01aa..12cc924f44 100644
--- a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/largemessage/LargeMessageTestBase.java
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/integration/largemessage/LargeMessageTestBase.java
@@ -68,7 +68,7 @@ public abstract class LargeMessageTestBase extends ActiveMQTestBase {
 
    private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-   protected final SimpleString ADDRESS = new SimpleString("SimpleAddress");
+   protected final SimpleString ADDRESS = SimpleString.of("SimpleAddress");
 
 
 
@@ -264,7 +264,7 @@ public abstract class LargeMessageTestBase extends ActiveMQTestBase {
                   public void onMessage(final ClientMessage message) {
                      try {
                         if (delayDelivery > 0) {
-                           long originalTime = (Long) message.getObjectProperty(new SimpleString("original-time"));
+                           long originalTime = (Long) message.getObjectProperty(SimpleString.of("original-time"));
                            assertTrue(System.currentTimeMillis() - originalTime >= delayDelivery, System.currentTimeMillis() - originalTime + "<" + delayDelivery);
                         }
 
@@ -278,7 +278,7 @@ public abstract class LargeMessageTestBase extends ActiveMQTestBase {
                            // right now there is no guarantee of ordered delivered on multiple scheduledMessages with
                            // the same
                            // scheduled delivery time
-                           assertEquals(msgCounter, ((Integer) message.getObjectProperty(new SimpleString("counter-message"))).intValue());
+                           assertEquals(msgCounter, ((Integer) message.getObjectProperty(SimpleString.of("counter-message"))).intValue());
                         }
 
                         if (useStreamOnConsume) {
@@ -351,7 +351,7 @@ public abstract class LargeMessageTestBase extends ActiveMQTestBase {
                   assertNotNull(message);
 
                   if (delayDelivery > 0) {
-                     long originalTime = (Long) message.getObjectProperty(new SimpleString("original-time"));
+                     long originalTime = (Long) message.getObjectProperty(SimpleString.of("original-time"));
                      assertTrue(System.currentTimeMillis() - originalTime >= delayDelivery, System.currentTimeMillis() - originalTime + "<" + delayDelivery);
                   }
 
@@ -364,7 +364,7 @@ public abstract class LargeMessageTestBase extends ActiveMQTestBase {
                   if (delayDelivery <= 0) {
                      // right now there is no guarantee of ordered delivered on multiple scheduledMessages with the same
                      // scheduled delivery time
-                     assertEquals(i, ((Integer) message.getObjectProperty(new SimpleString("counter-message"))).intValue());
+                     assertEquals(i, ((Integer) message.getObjectProperty(SimpleString.of("counter-message"))).intValue());
                   }
 
                   if (useStreamOnConsume) {
@@ -486,10 +486,10 @@ public abstract class LargeMessageTestBase extends ActiveMQTestBase {
             }
             message.getBodyBuffer().writeBytes(bytes);
          }
-         message.putIntProperty(new SimpleString("counter-message"), i);
+         message.putIntProperty(SimpleString.of("counter-message"), i);
          if (delayDelivery > 0) {
             long time = System.currentTimeMillis();
-            message.putLongProperty(new SimpleString("original-time"), time);
+            message.putLongProperty(SimpleString.of("original-time"), time);
             message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, time + delayDelivery);
 
             producer.send(message);
diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
index 2fee718a6c..d78a723ee1 100644
--- a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
@@ -1938,7 +1938,7 @@ public abstract class ActiveMQTestBase extends ArtemisTestCase {
          bindingCount = 0;
          totConsumers = 0;
 
-         Bindings bindings = po.getBindingsForAddress(new SimpleString(address));
+         Bindings bindings = po.getBindingsForAddress(SimpleString.of(address));
 
          for (Binding binding : bindings.getBindings()) {
             if (binding.isConnected() && (binding instanceof LocalQueueBinding && local || binding instanceof RemoteQueueBinding && !local)) {
@@ -1986,7 +1986,7 @@ public abstract class ActiveMQTestBase extends ArtemisTestCase {
 
    public void printBindings(ActiveMQServer server, String address) throws Exception {
       PostOffice po = server.getPostOffice();
-      Bindings bindings = po.getBindingsForAddress(new SimpleString(address));
+      Bindings bindings = po.getBindingsForAddress(SimpleString.of(address));
 
       System.err.println("=======================================================================");
       System.err.println("Binding information for address = " + address + " for server " + server);
@@ -2127,7 +2127,7 @@ public abstract class ActiveMQTestBase extends ArtemisTestCase {
 
       message.getBodyBuffer().writeString(UUID.randomUUID().toString());
 
-      message.setAddress(new SimpleString("foo"));
+      message.setAddress(SimpleString.of("foo"));
 
       return message;
    }
@@ -2230,7 +2230,7 @@ public abstract class ActiveMQTestBase extends ArtemisTestCase {
                                                     final String address) throws Exception {
       ArrayList<QueueBinding> bindingsFound = new ArrayList<>();
 
-      Bindings bindings = postOffice.getBindingsForAddress(new SimpleString(address));
+      Bindings bindings = postOffice.getBindingsForAddress(SimpleString.of(address));
 
       for (Binding binding : bindings.getBindings()) {
          if (binding instanceof LocalQueueBinding) {
diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/utils/RealServerTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/utils/RealServerTestBase.java
index b25a5feea5..70fe9b2d4a 100644
--- a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/utils/RealServerTestBase.java
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/utils/RealServerTestBase.java
@@ -228,7 +228,7 @@ public class RealServerTestBase extends ActiveMQTestBase {
          try {
             JMXConnector connector = newJMXFactory(uri);
 
-            ObjectName objectQueueName = builder.getQueueObjectName(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), routingType);
+            ObjectName objectQueueName = builder.getQueueObjectName(SimpleString.of(address), SimpleString.of(queueName), routingType);
 
             QueueControl queueControl = MBeanServerInvocationHandler.newProxyInstance(connector.getMBeanServerConnection(), objectQueueName, QueueControl.class, false);
             queueControl.getMessagesAcknowledged(); // making one call
diff --git a/tests/compatibility-tests/src/main/resources/hqsoak/artemisServer.groovy b/tests/compatibility-tests/src/main/resources/hqsoak/artemisServer.groovy
index 65b56051f4..291cefcd3e 100644
--- a/tests/compatibility-tests/src/main/resources/hqsoak/artemisServer.groovy
+++ b/tests/compatibility-tests/src/main/resources/hqsoak/artemisServer.groovy
@@ -44,8 +44,8 @@ configuration.setSecurityEnabled(false);
 configuration.setPersistenceEnabled(true);
 try {
     if (!type.startsWith("ARTEMIS-1")) {
-        configuration.addAddressSetting("#", new AddressSettings().setAutoCreateAddresses(false).setDeadLetterAddress(SimpleString.toSimpleString("DLQ"))
-                .setExpiryAddress(SimpleString.toSimpleString("EXP")));
+        configuration.addAddressSetting("#", new AddressSettings().setAutoCreateAddresses(false).setDeadLetterAddress(SimpleString.of("DLQ"))
+                .setExpiryAddress(SimpleString.of("EXP")));
         if (globalMaxSize != null) {
             configuration.getAddressSettings().get("#").setPageSizeBytes(Long.parseLong(globalMaxSize)).setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE)
             configuration.setGlobalMaxSize(Long.parseLong(globalMaxSize));
@@ -64,6 +64,6 @@ server.setConfiguration(configuration);
 server.setJmsConfiguration(jmsConfiguration);
 server.start();
 
-AddressInfo info = new AddressInfo(SimpleString.toSimpleString("topic")).setAutoCreated(false).addRoutingType(RoutingType.MULTICAST);
+AddressInfo info = new AddressInfo(SimpleString.of("topic")).setAutoCreated(false).addRoutingType(RoutingType.MULTICAST);
 server.activeMQServer.addAddressInfo(info);
 
diff --git a/tests/compatibility-tests/src/main/resources/jmsReplyToQueue/artemisServer.groovy b/tests/compatibility-tests/src/main/resources/jmsReplyToQueue/artemisServer.groovy
index 444eaf179c..95c167705f 100644
--- a/tests/compatibility-tests/src/main/resources/jmsReplyToQueue/artemisServer.groovy
+++ b/tests/compatibility-tests/src/main/resources/jmsReplyToQueue/artemisServer.groovy
@@ -46,8 +46,8 @@ server.setConfiguration(configuration);
 server.setJmsConfiguration(jmsConfiguration);
 server.start();
 
-server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST));
-server.getActiveMQServer().createQueue(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST, SimpleString.toSimpleString(queueAddress), null, true, false);
+server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.of(queueAddress), RoutingType.ANYCAST));
+server.getActiveMQServer().createQueue(SimpleString.of(queueAddress), RoutingType.ANYCAST, SimpleString.of(queueAddress), null, true, false);
 
-server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(replyQueueAddress), RoutingType.ANYCAST));
-server.getActiveMQServer().createQueue(SimpleString.toSimpleString(replyQueueAddress), RoutingType.ANYCAST, SimpleString.toSimpleString(replyQueueAddress), null, true, false);
+server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.of(replyQueueAddress), RoutingType.ANYCAST));
+server.getActiveMQServer().createQueue(SimpleString.of(replyQueueAddress), RoutingType.ANYCAST, SimpleString.of(replyQueueAddress), null, true, false);
diff --git a/tests/compatibility-tests/src/main/resources/jmsReplyToTempQueue/artemisServer.groovy b/tests/compatibility-tests/src/main/resources/jmsReplyToTempQueue/artemisServer.groovy
index 2b06830f1c..fb190d7be8 100644
--- a/tests/compatibility-tests/src/main/resources/jmsReplyToTempQueue/artemisServer.groovy
+++ b/tests/compatibility-tests/src/main/resources/jmsReplyToTempQueue/artemisServer.groovy
@@ -45,5 +45,5 @@ server.setConfiguration(configuration);
 server.setJmsConfiguration(jmsConfiguration);
 server.start();
 
-server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST));
-server.getActiveMQServer().createQueue(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST, SimpleString.toSimpleString(queueAddress), null, true, false);
+server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.of(queueAddress), RoutingType.ANYCAST));
+server.getActiveMQServer().createQueue(SimpleString.of(queueAddress), RoutingType.ANYCAST, SimpleString.of(queueAddress), null, true, false);
diff --git a/tests/compatibility-tests/src/main/resources/jmsReplyToTempTopic/artemisServer.groovy b/tests/compatibility-tests/src/main/resources/jmsReplyToTempTopic/artemisServer.groovy
index 9e85473889..1bd1cac058 100644
--- a/tests/compatibility-tests/src/main/resources/jmsReplyToTempTopic/artemisServer.groovy
+++ b/tests/compatibility-tests/src/main/resources/jmsReplyToTempTopic/artemisServer.groovy
@@ -46,7 +46,7 @@ server.setConfiguration(configuration);
 server.setJmsConfiguration(jmsConfiguration);
 server.start();
 
-server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST));
-server.getActiveMQServer().createQueue(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST, SimpleString.toSimpleString(queueAddress), null, true, false);
+server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.of(queueAddress), RoutingType.ANYCAST));
+server.getActiveMQServer().createQueue(SimpleString.of(queueAddress), RoutingType.ANYCAST, SimpleString.of(queueAddress), null, true, false);
 
-server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(replyTopicAddress), RoutingType.MULTICAST));
+server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.of(replyTopicAddress), RoutingType.MULTICAST));
diff --git a/tests/compatibility-tests/src/main/resources/jmsReplyToTopic/artemisServer.groovy b/tests/compatibility-tests/src/main/resources/jmsReplyToTopic/artemisServer.groovy
index 37a6aa0c95..bf8a1351e3 100644
--- a/tests/compatibility-tests/src/main/resources/jmsReplyToTopic/artemisServer.groovy
+++ b/tests/compatibility-tests/src/main/resources/jmsReplyToTopic/artemisServer.groovy
@@ -45,5 +45,5 @@ server.setConfiguration(configuration);
 server.setJmsConfiguration(jmsConfiguration);
 server.start();
 
-server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST));
-server.getActiveMQServer().createQueue(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST, SimpleString.toSimpleString(queueAddress), null, true, false);
+server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.of(queueAddress), RoutingType.ANYCAST));
+server.getActiveMQServer().createQueue(SimpleString.of(queueAddress), RoutingType.ANYCAST, SimpleString.of(queueAddress), null, true, false);
diff --git a/tests/compatibility-tests/src/main/resources/journalcompatibility/forcepaging.groovy b/tests/compatibility-tests/src/main/resources/journalcompatibility/forcepaging.groovy
index 76e5f0dbff..5f48530843 100644
--- a/tests/compatibility-tests/src/main/resources/journalcompatibility/forcepaging.groovy
+++ b/tests/compatibility-tests/src/main/resources/journalcompatibility/forcepaging.groovy
@@ -2,7 +2,6 @@ package journalcompatibility
 
 import org.apache.activemq.artemis.api.core.SimpleString
 import org.apache.activemq.artemis.core.server.Queue
-import org.apache.activemq.artemis.tests.compatibility.GroovyRun
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
diff --git a/tests/compatibility-tests/src/main/resources/oldAddressSpace/artemisServer.groovy b/tests/compatibility-tests/src/main/resources/oldAddressSpace/artemisServer.groovy
index b398546639..bf54c40152 100644
--- a/tests/compatibility-tests/src/main/resources/oldAddressSpace/artemisServer.groovy
+++ b/tests/compatibility-tests/src/main/resources/oldAddressSpace/artemisServer.groovy
@@ -48,8 +48,8 @@ AddressSettings addressSettings = new AddressSettings();
 addressSettings.setAddressFullMessagePolicy(AddressFullMessagePolicy.BLOCK)
         .setMaxSizeBytes(10 * 1024)
         .setPageSizeBytes(1024)
-        .setDeadLetterAddress(SimpleString.toSimpleString("DLA"))
-        .setExpiryAddress(SimpleString.toSimpleString("Expiry"));
+        .setDeadLetterAddress(SimpleString.of("DLA"))
+        .setExpiryAddress(SimpleString.of("Expiry"));
 
 if (!(type.startsWith("ARTEMIS-1") || type.startsWith("HORNETQ"))) {
     addressSettings.setAutoCreateAddresses(false);
@@ -61,8 +61,8 @@ addressSettings = new AddressSettings();
 addressSettings.setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE)
         .setMaxSizeBytes(1024 * 1024 * 1024)
         .setPageSizeBytes(1024)
-        .setDeadLetterAddress(SimpleString.toSimpleString("DLA"))
-        .setExpiryAddress(SimpleString.toSimpleString("Expiry"));
+        .setDeadLetterAddress(SimpleString.of("DLA"))
+        .setExpiryAddress(SimpleString.of("Expiry"));
 
 if (!(type.startsWith("ARTEMIS-1") || type.startsWith("HORNETQ"))) {
     addressSettings.setAutoCreateAddresses(false);
@@ -82,8 +82,8 @@ server.start();
 if (type.startsWith("ARTEMIS-1") || type.startsWith("HORNETQ")) {
     server.getJMSServerManager().createQueue(true, queueName, null, true, null);
 } else {
-    server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST));
-    server.getActiveMQServer().createQueue(SimpleString.toSimpleString(queueAddress), RoutingType.ANYCAST, SimpleString.toSimpleString(queueAddress), null, true, false);
+    server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.of(queueAddress), RoutingType.ANYCAST));
+    server.getActiveMQServer().createQueue(SimpleString.of(queueAddress), RoutingType.ANYCAST, SimpleString.of(queueAddress), null, true, false);
 
-    server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.toSimpleString(topicAddress), RoutingType.MULTICAST));
+    server.getActiveMQServer().addAddressInfo(new AddressInfo(SimpleString.of(topicAddress), RoutingType.MULTICAST));
 }
diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/OldOpenWireTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/OldOpenWireTest.java
index fe6f28ea2f..fe5cf574af 100644
--- a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/OldOpenWireTest.java
+++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/OldOpenWireTest.java
@@ -59,7 +59,7 @@ public class OldOpenWireTest extends ClasspathBase {
       server.getActiveMQServer().addAddressInfo(new AddressInfo("DLQ").addRoutingType(RoutingType.ANYCAST));
       server.getActiveMQServer().createQueue(new QueueConfiguration("DLQ").setDurable(true).setRoutingType(RoutingType.ANYCAST));
 
-      server.getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.toSimpleString("DLQ")));
+      server.getActiveMQServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setDeadLetterAddress(SimpleString.of("DLQ")));
    }
 
    @AfterEach
diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java
index 0c2b4ed561..40b5315863 100644
--- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java
+++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java
@@ -138,7 +138,7 @@ public class PagingTest extends ParameterDBTestBase {
    protected static final int PAGE_SIZE = 10 * 1024;
    static final int MESSAGE_SIZE = 1024; // 1k
    static final int LARGE_MESSAGE_SIZE = 100 * 1024;
-   static final SimpleString ADDRESS = new SimpleString("TestADDRESS");
+   static final SimpleString ADDRESS = SimpleString.of("TestADDRESS");
    private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
    protected ServerLocator locator;
    protected ActiveMQServer server;
@@ -1095,8 +1095,8 @@ public class PagingTest extends ParameterDBTestBase {
       producer.close();
       session.close();
 
-      Queue queue = server.locateQueue(new SimpleString(PagingTest.ADDRESS + "Queue"));
-      Queue originalQueue = server.locateQueue(new SimpleString(PagingTest.ADDRESS + "QueueOriginal"));
+      Queue queue = server.locateQueue(SimpleString.of(PagingTest.ADDRESS + "Queue"));
+      Queue originalQueue = server.locateQueue(SimpleString.of(PagingTest.ADDRESS + "QueueOriginal"));
 
       Wait.assertEquals(numberOfMessages * 4, queue::getMessageCount);
       Wait.assertEquals(0, originalQueue::getMessageCount);
@@ -1147,7 +1147,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(body);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
       }
@@ -1575,7 +1575,7 @@ public class PagingTest extends ParameterDBTestBase {
       server = createServer(true, config, PagingTest.PAGE_SIZE, PagingTest.PAGE_MAX, -1, -1);
       server.start();
 
-      AddressSettings defaultSetting = new AddressSettings().setPageSizeBytes(PAGE_SIZE).setMaxSizeBytes(0).setExpiryAddress(new SimpleString("EXP")).setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE).setMaxReadPageBytes(-1).setMaxReadPageMessages(-1);
+      AddressSettings defaultSetting = new AddressSettings().setPageSizeBytes(PAGE_SIZE).setMaxSizeBytes(0).setExpiryAddress(SimpleString.of("EXP")).setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE).setMaxReadPageBytes(-1).setMaxReadPageMessages(-1);
       server.getAddressSettingsRepository().clear();
       server.getAddressSettingsRepository().addMatch("#", defaultSetting);
 
@@ -1592,7 +1592,7 @@ public class PagingTest extends ParameterDBTestBase {
       session.createQueue(new QueueConfiguration("EXP"));
 
       Queue queue1 = server.locateQueue(ADDRESS);
-      Queue qEXP = server.locateQueue(new SimpleString("EXP"));
+      Queue qEXP = server.locateQueue(SimpleString.of("EXP"));
 
       ClientProducer producer = session.createProducer(PagingTest.ADDRESS);
 
@@ -1837,7 +1837,7 @@ public class PagingTest extends ParameterDBTestBase {
 
       server.start();
 
-      SimpleString queue = new SimpleString("testPurge:" + RandomUtil.randomString());
+      SimpleString queue = SimpleString.of("testPurge:" + RandomUtil.randomString());
       server.addAddressInfo(new AddressInfo(queue, RoutingType.ANYCAST));
       QueueImpl purgeQueue = (QueueImpl) server.createQueue(new QueueConfiguration(queue).setRoutingType(RoutingType.ANYCAST).setMaxConsumers(1).setPurgeOnNoConsumers(false).setAutoCreateAddress(false));
 
@@ -1910,7 +1910,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(body);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
       }
@@ -2084,7 +2084,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(body);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
 
@@ -2150,7 +2150,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(body);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
          if (i % 10 == 0) {
@@ -2262,7 +2262,7 @@ public class PagingTest extends ParameterDBTestBase {
 
             bodyLocal.writeBytes(body);
 
-            message.putIntProperty(new SimpleString("id"), i);
+            message.putIntProperty(SimpleString.of("id"), i);
 
             producer.send(message);
             if (i % messagesPerTX == 0) {
@@ -2315,8 +2315,8 @@ public class PagingTest extends ParameterDBTestBase {
       ClientConsumer cons2 = sess.createConsumer("q2");
       assertNull(cons2.receiveImmediate());
 
-      Queue q1 = server.locateQueue(new SimpleString("q1"));
-      Queue q2 = server.locateQueue(new SimpleString("q2"));
+      Queue q1 = server.locateQueue(SimpleString.of("q1"));
+      Queue q2 = server.locateQueue(SimpleString.of("q2"));
 
       q1.getPageSubscription().cleanupEntries(false);
       q2.getPageSubscription().cleanupEntries(false);
@@ -2473,7 +2473,7 @@ public class PagingTest extends ParameterDBTestBase {
       ClientSession session = sf.createSession(false, false, false);
 
       session.createQueue(new QueueConfiguration(PagingTest.ADDRESS));
-      session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("-invalid")).setAddress(PagingTest.ADDRESS).setFilterString(new SimpleString(Filter.GENERIC_IGNORED_FILTER)));
+      session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("-invalid")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.of(Filter.GENERIC_IGNORED_FILTER)));
 
       ClientProducer producer = session.createProducer(PagingTest.ADDRESS);
 
@@ -2488,7 +2488,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(body);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
          if (i % 10 == 0) {
@@ -2615,7 +2615,7 @@ public class PagingTest extends ParameterDBTestBase {
 
                bodyLocal.writeBytes(body);
 
-               message.putIntProperty(new SimpleString("id"), i);
+               message.putIntProperty(SimpleString.of("id"), i);
 
                producer.send(message);
             }
@@ -2787,7 +2787,7 @@ public class PagingTest extends ParameterDBTestBase {
 
             bodyLocal.writeBytes(body);
 
-            message.putIntProperty(new SimpleString("id"), i);
+            message.putIntProperty(SimpleString.of("id"), i);
 
             producer.send(message);
          }
@@ -2889,7 +2889,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(body);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
       }
@@ -3011,7 +3011,7 @@ public class PagingTest extends ParameterDBTestBase {
       for (int i = 0; i < 10; i++) {
          message = session.createMessage(true);
          message.getBodyBuffer().writeBytes(body);
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          // Consume messages to force an eventual out of order delivery
          if (i == 5) {
@@ -3026,7 +3026,7 @@ public class PagingTest extends ParameterDBTestBase {
             consumer.close();
          }
 
-         Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id"));
+         Integer messageID = (Integer) message.getObjectProperty(SimpleString.of("id"));
          assertNotNull(messageID);
          assertEquals(messageID.intValue(), i);
 
@@ -3046,7 +3046,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          assertNotNull(message);
 
-         Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id"));
+         Integer messageID = (Integer) message.getObjectProperty(SimpleString.of("id"));
 
          assertNotNull(messageID);
          assertEquals(messageID.intValue(), i, "message received out of order");
@@ -3094,7 +3094,7 @@ public class PagingTest extends ParameterDBTestBase {
 
       ClientMessage firstMessage = sessionTransacted.createMessage(IS_DURABLE_MESSAGE);
       firstMessage.getBodyBuffer().writeBytes(body);
-      firstMessage.putIntProperty(new SimpleString("id"), 0);
+      firstMessage.putIntProperty(SimpleString.of("id"), 0);
 
       producerTransacted.send(firstMessage);
 
@@ -3129,7 +3129,7 @@ public class PagingTest extends ParameterDBTestBase {
       for (int i = 1; i < 10; i++) {
          message = session.createMessage(true);
          message.getBodyBuffer().writeBytes(body);
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          // Consume messages to force an eventual out of order delivery
          if (i == 5) {
@@ -3148,7 +3148,7 @@ public class PagingTest extends ParameterDBTestBase {
             consumer.close();
          }
 
-         Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id"));
+         Integer messageID = (Integer) message.getObjectProperty(SimpleString.of("id"));
          assertNotNull(messageID);
          assertEquals(messageID.intValue(), i);
 
@@ -3168,7 +3168,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          assertNotNull(message);
 
-         Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id"));
+         Integer messageID = (Integer) message.getObjectProperty(SimpleString.of("id"));
 
          assertNotNull(messageID);
          assertEquals(i, messageID.intValue(), "message received out of order");
@@ -3218,9 +3218,9 @@ public class PagingTest extends ParameterDBTestBase {
       for (int i = 0; i < MAX_TX; i++) {
          ClientMessage message = sessionNonTX.createMessage(true);
          message.getBodyBuffer().writeBytes(body);
-         message.putIntProperty(new SimpleString("id"), i);
-         message.putStringProperty(new SimpleString("tst"), new SimpleString("i=" + i));
-         message.putStringProperty(new SimpleString("TX"), "true");
+         message.putIntProperty(SimpleString.of("id"), i);
+         message.putStringProperty(SimpleString.of("tst"), SimpleString.of("i=" + i));
+         message.putStringProperty(SimpleString.of("TX"), "true");
 
          producerTransacted.send(message);
 
@@ -3228,8 +3228,8 @@ public class PagingTest extends ParameterDBTestBase {
             logger.debug("Sending");
             for (int j = 0; j < 10; j++) {
                ClientMessage msgSend = sessionNonTX.createMessage(true);
-               msgSend.putStringProperty(new SimpleString("tst"), new SimpleString("i=" + i + ", j=" + j));
-               msgSend.putStringProperty(new SimpleString("TX"), "false");
+               msgSend.putStringProperty(SimpleString.of("tst"), SimpleString.of("i=" + i + ", j=" + j));
+               msgSend.putStringProperty(SimpleString.of("TX"), "false");
                msgSend.getBodyBuffer().writeBytes(new byte[20 * 1024]);
                producerNonTransacted.send(msgSend);
             }
@@ -3259,7 +3259,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          assertNotNull(message);
 
-         Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id"));
+         Integer messageID = (Integer) message.getObjectProperty(SimpleString.of("id"));
 
          assertNotNull(messageID);
          assertEquals(i, messageID.intValue(), "message received out of order");
@@ -3497,7 +3497,7 @@ public class PagingTest extends ParameterDBTestBase {
          message = session.createMessage(true);
 
          message.getBodyBuffer().writeBytes(body);
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          PagingStore store = server.getPagingManager().getPageStore(PagingTest.ADDRESS);
 
@@ -3590,7 +3590,7 @@ public class PagingTest extends ParameterDBTestBase {
             bodyLocal.writeInt(j);
          }
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
       }
@@ -3637,7 +3637,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(new byte[100 * 4]);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
          session.commit();
@@ -3652,7 +3652,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(new byte[100 * 4]);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
       }
@@ -3666,7 +3666,7 @@ public class PagingTest extends ParameterDBTestBase {
       PageCursorProviderTestAccessor.cleanup(queue.getPagingStore().getCursorProvider());
 
       consumerSession.start();
-      ClientConsumer consumer = consumerSession.createConsumer(ADDRESS, SimpleString.toSimpleString("id > 0"));
+      ClientConsumer consumer = consumerSession.createConsumer(ADDRESS, SimpleString.of("id > 0"));
       for (int i = 0; i < 19; i++) {
          ClientMessage messageRec = consumer.receive(5000);
          logger.debug("msg::{}", messageRec);
@@ -3760,7 +3760,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(new byte[100 * 4]);
 
-         message.putIntProperty(new SimpleString("idi"), i);
+         message.putIntProperty(SimpleString.of("idi"), i);
 
          producer.send(message);
          session.commit();
@@ -3806,7 +3806,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(new byte[100 * 4]);
 
-         message.putIntProperty(new SimpleString("newid"), i);
+         message.putIntProperty(SimpleString.of("newid"), i);
 
          producer.send(message);
          session.commit();
@@ -3865,7 +3865,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          bodyLocal.writeBytes(new byte[1024]);
 
-         message.putIntProperty(new SimpleString("id"), i);
+         message.putIntProperty(SimpleString.of("id"), i);
 
          producer.send(message);
       }
@@ -4152,7 +4152,7 @@ public class PagingTest extends ParameterDBTestBase {
       ClientSession session = sf.createSession(null, null, false, !transacted, true, false, 0);
 
       for (int i = 0; i < NUMBER_OF_BINDINGS; i++) {
-         session.createQueue(new QueueConfiguration(new SimpleString("someQueue" + i)).setAddress(PagingTest.ADDRESS).setDurable(true));
+         session.createQueue(new QueueConfiguration(SimpleString.of("someQueue" + i)).setAddress(PagingTest.ADDRESS).setDurable(true));
       }
 
       ClientProducer producer = session.createProducer(PagingTest.ADDRESS);
@@ -4188,7 +4188,7 @@ public class PagingTest extends ParameterDBTestBase {
       for (int msg = 0; msg < NUMBER_OF_MESSAGES; msg++) {
 
          for (int i = 0; i < NUMBER_OF_BINDINGS; i++) {
-            ClientConsumer consumer = session.createConsumer(new SimpleString("someQueue" + i));
+            ClientConsumer consumer = session.createConsumer(SimpleString.of("someQueue" + i));
 
             ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT);
 
@@ -4206,7 +4206,7 @@ public class PagingTest extends ParameterDBTestBase {
       session.close();
 
       for (int i = 0; i < NUMBER_OF_BINDINGS; i++) {
-         Queue queue = (Queue) server.getPostOffice().getBinding(new SimpleString("someQueue" + i)).getBindable();
+         Queue queue = (Queue) server.getPostOffice().getBinding(SimpleString.of("someQueue" + i)).getBindable();
 
          assertEquals(0, getMessageCount(queue), "Queue someQueue" + i + " was supposed to be empty");
          assertEquals(0, queue.getDeliveringCount(), "Queue someQueue" + i + " was supposed to be empty");
@@ -4283,8 +4283,8 @@ public class PagingTest extends ParameterDBTestBase {
 
    @TestTemplate
    public void testPagingOneDestinationOnly() throws Exception {
-      SimpleString PAGED_ADDRESS = new SimpleString("paged");
-      SimpleString NON_PAGED_ADDRESS = new SimpleString("non-paged");
+      SimpleString PAGED_ADDRESS = SimpleString.of("paged");
+      SimpleString NON_PAGED_ADDRESS = SimpleString.of("non-paged");
 
       Configuration configuration = createDefaultInVMConfig();
 
@@ -4369,7 +4369,7 @@ public class PagingTest extends ParameterDBTestBase {
 
    @TestTemplate
    public void testSimplePaging() throws Exception {
-      SimpleString PAGED_ADDRESS = new SimpleString("paged");
+      SimpleString PAGED_ADDRESS = SimpleString.of("paged");
 
       Configuration configuration = createDefaultInVMConfig();
 
@@ -4450,7 +4450,7 @@ public class PagingTest extends ParameterDBTestBase {
       int NQUEUES = 2;
 
       for (int i = 0; i < NQUEUES; i++) {
-         session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=" + i)).setAddress(PagingTest.ADDRESS).setFilterString(new SimpleString("propTest=" + i)).setDurable(true));
+         session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=" + i)).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.of("propTest=" + i)).setDurable(true));
       }
 
       ClientProducer producer = session.createProducer(PagingTest.ADDRESS);
@@ -4613,7 +4613,7 @@ public class PagingTest extends ParameterDBTestBase {
          session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=2")).setAddress(PagingTest.ADDRESS));
 
          // A queue with an impossible filter
-         session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("-3")).setAddress(PagingTest.ADDRESS).setFilterString(new SimpleString("nothing='something'")));
+         session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("-3")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.of("nothing='something'")));
 
          PagingStore store = server.getPagingManager().getPageStore(ADDRESS);
 
@@ -4768,7 +4768,7 @@ public class PagingTest extends ParameterDBTestBase {
       Configuration config = createDefaultInVMConfig().setThreadPoolMaxSize(10).setJournalSyncNonTransactional(false);
 
       Map<String, AddressSettings> settings = new HashMap<>();
-      AddressSettings dla = new AddressSettings().setMaxDeliveryAttempts(2).setDeadLetterAddress(new SimpleString("DLA")).setRedeliveryDelay(0).setMaxReadPageBytes(-1);
+      AddressSettings dla = new AddressSettings().setMaxDeliveryAttempts(2).setDeadLetterAddress(SimpleString.of("DLA")).setRedeliveryDelay(0).setMaxReadPageBytes(-1);
       settings.put(ADDRESS.toString(), dla);
 
       server = createServer(true, config, PagingTest.PAGE_SIZE, PagingTest.PAGE_MAX, -1, -1, settings);
@@ -4797,7 +4797,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          PagingStore pgStoreAddress = server.getPagingManager().getPageStore(ADDRESS);
          pgStoreAddress.startPaging();
-         PagingStore pgStoreDLA = server.getPagingManager().getPageStore(new SimpleString("DLA"));
+         PagingStore pgStoreDLA = server.getPagingManager().getPageStore(SimpleString.of("DLA"));
 
          ClientProducer producer = session.createProducer(PagingTest.ADDRESS);
 
@@ -4972,7 +4972,7 @@ public class PagingTest extends ParameterDBTestBase {
       Configuration config = createDefaultInVMConfig().setMessageExpiryScanPeriod(500).setJournalSyncNonTransactional(false);
 
       Map<String, AddressSettings> settings = new HashMap<>();
-      AddressSettings dla = new AddressSettings().setMaxDeliveryAttempts(5).setDeadLetterAddress(new SimpleString("DLA")).setExpiryAddress(new SimpleString("DLA")).setMaxReadPageBytes(-1);
+      AddressSettings dla = new AddressSettings().setMaxDeliveryAttempts(5).setDeadLetterAddress(SimpleString.of("DLA")).setExpiryAddress(SimpleString.of("DLA")).setMaxReadPageBytes(-1);
       settings.put(ADDRESS.toString(), dla);
 
       server = createServer(true, config, PagingTest.PAGE_SIZE, PagingTest.PAGE_MAX, -1, -1, settings);
@@ -5279,7 +5279,7 @@ public class PagingTest extends ParameterDBTestBase {
       Wait.assertEquals(3, q::getMessageCount);
 
       // send a message with a dup ID that should fail b/c the address is full
-      SimpleString dupID1 = new SimpleString("abcdefg");
+      SimpleString dupID1 = SimpleString.of("abcdefg");
       message.putBytesProperty(Message.HDR_DUPLICATE_DETECTION_ID, dupID1.getData());
       message.putStringProperty("key", dupID1.toString());
 
@@ -5358,7 +5358,7 @@ public class PagingTest extends ParameterDBTestBase {
       session.createQueue(new QueueConfiguration("Q2").setAddress("Q").setFilterString("dest=2"));
       session.createQueue(new QueueConfiguration("Q3").setAddress("Q").setFilterString("dest=3"));
 
-      Queue queue = server.locateQueue(new SimpleString("Q1"));
+      Queue queue = server.locateQueue(SimpleString.of("Q1"));
       queue.getPageSubscription().getPagingStore().startPaging();
 
       ClientProducer prod = session.createProducer("Q");
@@ -5450,7 +5450,7 @@ public class PagingTest extends ParameterDBTestBase {
          final int MESSAGE_SIZE = 300;
          final byte[] bodyWrite = new byte[MESSAGE_SIZE];
 
-         Queue serverQueue = server.locateQueue(new SimpleString("Q1"));
+         Queue serverQueue = server.locateQueue(SimpleString.of("Q1"));
          PagingStore pageStore = serverQueue.getPageSubscription().getPagingStore();
 
          ClientProducer producer = session.createProducer(ADDRESS);
@@ -5953,7 +5953,7 @@ public class PagingTest extends ParameterDBTestBase {
          session.createQueue(new QueueConfiguration("Q1"));
          session.createQueue(new QueueConfiguration("Q2"));
 
-         PagingStore store = server.getPagingManager().getPageStore(new SimpleString("Q1"));
+         PagingStore store = server.getPagingManager().getPageStore(SimpleString.of("Q1"));
 
          ClientProducer prod = session.createProducer("Q1");
 
@@ -5982,9 +5982,9 @@ public class PagingTest extends ParameterDBTestBase {
          }
          session.commit();
 
-         Queue queue = server.locateQueue(new SimpleString("Q1"));
+         Queue queue = server.locateQueue(SimpleString.of("Q1"));
 
-         queue.moveReferences(10, (Filter) null, new SimpleString("Q2"), false, server.getPostOffice().getBinding(new SimpleString("Q2")));
+         queue.moveReferences(10, (Filter) null, SimpleString.of("Q2"), false, server.getPostOffice().getBinding(SimpleString.of("Q2")));
 
          waitForNotPaging(store);
 
@@ -6020,7 +6020,7 @@ public class PagingTest extends ParameterDBTestBase {
 
          assertNull(cons.receiveImmediate());
 
-         waitForNotPaging(server.locateQueue(new SimpleString("Q2")));
+         waitForNotPaging(server.locateQueue(SimpleString.of("Q2")));
 
          session.close();
          sf.close();
@@ -6261,8 +6261,8 @@ public class PagingTest extends ParameterDBTestBase {
 
          ClientSessionFactory sf = locator.createSessionFactory();
          ClientSession session = sf.createSession(false, false, false);
-         session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=1")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.toSimpleString("destQ=1 or both=true")));
-         session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=2")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.toSimpleString("destQ=2 or both=true")));
+         session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=1")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.of("destQ=1 or both=true")));
+         session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=2")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.of("destQ=2 or both=true")));
          PagingStore store = server.getPagingManager().getPageStore(ADDRESS);
          Queue queue = server.locateQueue(PagingTest.ADDRESS.concat("=1"));
          queue.getPageSubscription().getPagingStore().startPaging();
@@ -6334,8 +6334,8 @@ public class PagingTest extends ParameterDBTestBase {
 
       ClientSession session = sf.createSession(false, false, false);
 
-      session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=1")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.toSimpleString("destQ=1")));
-      session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=2")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.toSimpleString("destQ=2")));
+      session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=1")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.of("destQ=1")));
+      session.createQueue(new QueueConfiguration(PagingTest.ADDRESS.concat("=2")).setAddress(PagingTest.ADDRESS).setFilterString(SimpleString.of("destQ=2")));
 
       ClientProducer producer = session.createProducer(PagingTest.ADDRESS);
       ClientConsumer consumer1 = session.createConsumer(PagingTest.ADDRESS.concat("=1"));
diff --git a/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/JmxSecurityTest.java b/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/JmxSecurityTest.java
index f452089a55..c31532d951 100644
--- a/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/JmxSecurityTest.java
+++ b/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/JmxSecurityTest.java
@@ -111,7 +111,7 @@ public class JmxSecurityTest {
 
       AddressControl addressControl = JMX.newMBeanProxy(
          ManagementFactory.getPlatformMBeanServer(),
-         ObjectNameBuilder.DEFAULT.getAddressObjectName(SimpleString.toSimpleString("activemq.notifications")), AddressControl.class, false);
+         ObjectNameBuilder.DEFAULT.getAddressObjectName(SimpleString.of("activemq.notifications")), AddressControl.class, false);
 
       try {
          addressControl.sendMessage(null, 1, "hi", false, null, null);
@@ -137,7 +137,7 @@ public class JmxSecurityTest {
 
       AddressControl addressControl = JMX.newMBeanProxy(
          ManagementFactory.getPlatformMBeanServer(),
-         ObjectNameBuilder.DEFAULT.getAddressObjectName(SimpleString.toSimpleString("activemq.notifications")), AddressControl.class, false);
+         ObjectNameBuilder.DEFAULT.getAddressObjectName(SimpleString.of("activemq.notifications")), AddressControl.class, false);
 
       long unRoutedMessageCount = addressControl.getUnRoutedMessageCount();
       assertEquals(0L, unRoutedMessageCount);
@@ -168,7 +168,7 @@ public class JmxSecurityTest {
 
       QueueControl queueControl = JMX.newMBeanProxy(
          ManagementFactory.getPlatformMBeanServer(),
-         ObjectNameBuilder.DEFAULT.getQueueObjectName(SimpleString.toSimpleString("Q1"), SimpleString.toSimpleString("Q1"), RoutingType.ANYCAST), QueueControl.class, false);
+         ObjectNameBuilder.DEFAULT.getQueueObjectName(SimpleString.of("Q1"), SimpleString.of("Q1"), RoutingType.ANYCAST), QueueControl.class, false);
       queueControl.getDurableMessageCount();
 
       queueControl.browse();
@@ -273,9 +273,9 @@ public class JmxSecurityTest {
 
    @Test
    public void testQueueAuthorization() throws Exception {
-      final SimpleString ADDRESS = new SimpleString("address");
-      final SimpleString QUEUE_A = new SimpleString("a");
-      final SimpleString QUEUE_B = new SimpleString("b");
+      final SimpleString ADDRESS = SimpleString.of("address");
+      final SimpleString QUEUE_A = SimpleString.of("a");
+      final SimpleString QUEUE_B = SimpleString.of("b");
 
       Set<Role> aRoles = new HashSet<>();
       aRoles.add(new Role(QUEUE_A.toString(), false, true, true, false, false, false, false, false, true, false, true, false));
diff --git a/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LDAPSecurityTest.java b/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LDAPSecurityTest.java
index c76ceaa0f5..1f91b32c23 100644
--- a/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LDAPSecurityTest.java
+++ b/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LDAPSecurityTest.java
@@ -170,9 +170,9 @@ public class LDAPSecurityTest extends AbstractLdapTestUnit {
 
    @Test
    public void testJAASSecurityManagerAuthorizationNegative() throws Exception {
-      final SimpleString ADDRESS = new SimpleString("address");
-      final SimpleString DURABLE_QUEUE = new SimpleString("durableQueue");
-      final SimpleString NON_DURABLE_QUEUE = new SimpleString("nonDurableQueue");
+      final SimpleString ADDRESS = SimpleString.of("address");
+      final SimpleString DURABLE_QUEUE = SimpleString.of("durableQueue");
+      final SimpleString NON_DURABLE_QUEUE = SimpleString.of("nonDurableQueue");
 
       Set<Role> roles = new HashSet<>();
       roles.add(new Role("programmers", false, false, false, false, false, false, false, false, false, false, false, false));
@@ -256,9 +256,9 @@ public class LDAPSecurityTest extends AbstractLdapTestUnit {
 
    @Test
    public void testJAASSecurityManagerAuthorizationPositive() throws Exception {
-      final SimpleString ADDRESS = new SimpleString("address");
-      final SimpleString DURABLE_QUEUE = new SimpleString("durableQueue");
-      final SimpleString NON_DURABLE_QUEUE = new SimpleString("nonDurableQueue");
+      final SimpleString ADDRESS = SimpleString.of("address");
+      final SimpleString DURABLE_QUEUE = SimpleString.of("durableQueue");
+      final SimpleString NON_DURABLE_QUEUE = SimpleString.of("nonDurableQueue");
 
       Set<Role> roles = new HashSet<>();
       roles.add(new Role("admins", true, true, true, true, true, true, true, true, true, true, false, false));
diff --git a/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LegacyLDAPSecuritySettingPluginListenerTest.java b/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LegacyLDAPSecuritySettingPluginListenerTest.java
index 7343d3e08e..80c0490abd 100644
--- a/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LegacyLDAPSecuritySettingPluginListenerTest.java
+++ b/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LegacyLDAPSecuritySettingPluginListenerTest.java
@@ -313,7 +313,7 @@ public class LegacyLDAPSecuritySettingPluginListenerTest extends AbstractLdapTes
       server.createQueue(new QueueConfiguration(queue).setRoutingType(RoutingType.ANYCAST).setDurable(false));
       ClientSessionFactory cf = locator.createSessionFactory();
       ClientSession session = cf.createSession("first", "secret", false, true, true, false, 0);
-      ClientProducer producer = session.createProducer(SimpleString.toSimpleString(queue));
+      ClientProducer producer = session.createProducer(SimpleString.of(queue));
 
       try {
          producer.send(session.createMessage(true));
diff --git a/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LegacyLDAPSecuritySettingPluginTest.java b/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LegacyLDAPSecuritySettingPluginTest.java
index 0b4eefda52..669ca2df40 100644
--- a/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LegacyLDAPSecuritySettingPluginTest.java
+++ b/tests/integration-tests-isolated/src/test/java/org/apache/activemq/artemis/tests/integration/isolated/security/LegacyLDAPSecuritySettingPluginTest.java
@@ -167,8 +167,8 @@ public class LegacyLDAPSecuritySettingPluginTest extends AbstractLdapTestUnit {
 
    @Test
    public void testPluginAuthorizationNegative() throws Exception {
-      final SimpleString ADDRESS = new SimpleString("queue2");
-      final SimpleString QUEUE = new SimpleString("queue2");
+      final SimpleString ADDRESS = SimpleString.of("queue2");
+      final SimpleString QUEUE = SimpleString.of("queue2");
 
       server.start();
       server.createQueue(new QueueConfiguration(QUEUE).setAddress(ADDRESS).setRoutingType(RoutingType.ANYCAST));
@@ -239,8 +239,8 @@ public class LegacyLDAPSecuritySettingPluginTest extends AbstractLdapTestUnit {
 
    @Test
    public void testPluginAuthorizationPositive() throws Exception {
-      final SimpleString ADDRESS = new SimpleString("queue1");
-      final SimpleString QUEUE = new SimpleString("queue1");
+      final SimpleString ADDRESS = SimpleString.of("queue1");
+      final SimpleString QUEUE = SimpleString.of("queue1");
 
       server.start();
 
@@ -343,7 +343,7 @@ public class LegacyLDAPSecuritySettingPluginTest extends AbstractLdapTestUnit {
       server.start();
 
       // The address needs to exist already otherwise the "admin" permission is required to create it
-      server.addAddressInfo(new AddressInfo(SimpleString.toSimpleString("topic1"), RoutingType.MULTICAST));
+      server.addAddressInfo(new AddressInfo(SimpleString.of("topic1"), RoutingType.MULTICAST));
 
       ConnectionFactory cf = new ActiveMQConnectionFactory("vm://0");
       try (Connection connection = cf.createConnection("third", "secret")) {
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/DuplicateDetectionTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/DuplicateDetectionTest.java
index 214a3e66cb..77d16a31f4 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/DuplicateDetectionTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/DuplicateDetectionTest.java
@@ -78,7 +78,7 @@ public class DuplicateDetectionTest extends ActiveMQTestBase {
 
    private ActiveMQServer server;
 
-   private final SimpleString propKey = new SimpleString("propkey");
+   private final SimpleString propKey = SimpleString.of("propkey");
 
    private final int cacheSize = 10;
 
@@ -88,7 +88,7 @@ public class DuplicateDetectionTest extends ActiveMQTestBase {
 
       session.start();
 
-      final SimpleString queueName = new SimpleString("DuplicateDetectionTestQueue");
+      final SimpleString queueName = SimpleString.of("DuplicateDetectionTestQueue");
 
       session.createQueue(new QueueConfiguration(queueName).setDurable(false));
 
@@ -102,7 +102,7 @@ public class DuplicateDetectionTest extends ActiveMQTestBase {
       assertEquals(0, message2.getObjectProperty(propKey));
 
       message = createMessage(session, 1);
-      SimpleString dupID = new SimpleString("abcdefg");
+      SimpleString dupID = SimpleString.of("abcdefg");
       message.putBytesProperty(Message.HDR_DUPLICATE_DETECTION_ID, dupID.getData());
       producer.send(message);
       message2 = consumer.receive(1000);
@@ -123,7 +123,7 @@ public class DuplicateDetectionTest extends ActiveMQTestBase {
       // Now try with a different id
 
       message = createMessage(session, 4);
-      SimpleString dupID2 = new SimpleString("hijklmnop");
+      SimpleString dupID2 = SimpleString.of("hijklmnop");
       message.putBytesProperty(Message.HDR_DUPLICATE_DETECTION_ID, dupID2.getData());
       producer.send(message);
       message2 = consumer.receive(1000);
@@ -158,7 +158,7 @@ public class DuplicateDetectionTest extends ActiveMQTestBase {
 
       session.start();
... 18845 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@activemq.apache.org
For additional commands, e-mail: commits-help@activemq.apache.org
For further information, visit: https://activemq.apache.org/contact