diff --git a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java
index fe64610..04cd4e1 100644
--- a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java
+++ b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java
@@ -35,9 +35,6 @@
     ConnectionBuilder setHost(String host);
     ConnectionBuilder setPort(int port);
 
-    @Deprecated
-    ConnectionBuilder setSslPort(int port);
-
     ConnectionBuilder setPrefetch(int prefetch);
     ConnectionBuilder setClientId(String clientId);
     ConnectionBuilder setUsername(String username);
diff --git a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java
index 7935cb3..3219582 100644
--- a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java
+++ b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java
@@ -52,7 +52,6 @@
     private int _connectdelay;
     private String _host = "localhost";
     private int _port;
-    private int _sslPort;
     private String _keyStoreLocation;
     private String _keyStorePassword;
     private String _trustStoreLocation;
@@ -72,7 +71,7 @@
     public ConnectionBuilder setPort(final int port)
     {
         _port = port;
-        return setSslPort(port);
+        return this;
     }
 
     @Override
@@ -83,13 +82,6 @@
     }
 
     @Override
-    public ConnectionBuilder setSslPort(final int port)
-    {
-        _sslPort = port;
-        return this;
-    }
-
-    @Override
     public ConnectionBuilder setPrefetch(final int prefetch)
     {
         _options.put("maxprefetch", prefetch);
@@ -329,7 +321,7 @@
         cUrlBuilder.append("?");
 
         final List<Integer> copy = new ArrayList<>(_failoverPorts.size() + 1);
-        copy.add(_enableTls ? _sslPort : _port);
+        copy.add(_port);
 
         if (_enableFailover)
         {
diff --git a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java
index c47e81e..dc39edb 100644
--- a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java
+++ b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java
@@ -46,7 +46,6 @@
     private static final AtomicInteger CLIENTID_COUNTER = new AtomicInteger();
     private String _host;
     private int _port;
-    private int _sslPort;
     private Map<String, Object> _options;
     private boolean _enableTls;
     private boolean _enableFailover;
@@ -73,7 +72,7 @@
     public ConnectionBuilder setPort(final int port)
     {
         _port = port;
-        return setSslPort(port);
+        return this;
     }
 
     @Override
@@ -84,13 +83,6 @@
     }
 
     @Override
-    public ConnectionBuilder setSslPort(final int port)
-    {
-        _sslPort = port;
-        return this;
-    }
-
-    @Override
     public ConnectionBuilder setPrefetch(final int prefetch)
     {
         _options.put("jms.prefetchPolicy.all", prefetch);
@@ -341,7 +333,7 @@
             final String transportQuery = transportQueryBuilder.toString();
 
             final List<Integer> copy = new ArrayList<>(_failoverPorts.size() + 1);
-            copy.add(_enableTls ? _sslPort : _port);
+            copy.add(_port);
             copy.addAll(_failoverPorts);
 
             final String failover = copy.stream()
@@ -350,17 +342,13 @@
             connectionUrlBuilder.append(failover);
             appendOptions(options, connectionUrlBuilder);
         }
-        else if (!_enableTls)
+        connectionUrlBuilder.append(_transport);
+        if (_enableTls)
         {
-            connectionUrlBuilder.append(_transport).append("://").append(_host).append(":").append(_port);
-
-            appendOptions(options, connectionUrlBuilder);
+            connectionUrlBuilder.append("s");
         }
-        else
-        {
-            connectionUrlBuilder.append(_transport).append("s").append("://").append(_host).append(":").append(_sslPort);
-            appendOptions(options, connectionUrlBuilder);
-        }
+        connectionUrlBuilder.append("://").append(_host).append(":").append(_port);
+        appendOptions(options, connectionUrlBuilder);
         return connectionUrlBuilder.toString();
     }
 
diff --git a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/management/AmqpManagementTest.java b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/management/AmqpManagementTest.java
index 4704829..d6aa747 100644
--- a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/management/AmqpManagementTest.java
+++ b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/management/AmqpManagementTest.java
@@ -692,7 +692,7 @@
                                             getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP).getPort());
 
         Connection connection = getConnectionBuilder().setTls(true)
-                                                      .setSslPort(tlsPort)
+                                                      .setPort(tlsPort)
                                                       .setTrustStoreLocation(TRUSTSTORE)
                                                       .setTrustStorePassword(TRUSTSTORE_PASSWORD)
                                                       .build();
diff --git a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/sasl/AuthenticationTest.java b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/sasl/AuthenticationTest.java
index 9661a6d..e5f033f 100644
--- a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/sasl/AuthenticationTest.java
+++ b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/sasl/AuthenticationTest.java
@@ -157,7 +157,7 @@
     {
         int port = createExternalProviderAndTlsPort();
 
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setTls(true)
                                                       .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                                                       .setKeyStoreLocation(KEYSTORE)
@@ -185,7 +185,7 @@
 
         try
         {
-            getConnectionBuilder().setSslPort(port)
+            getConnectionBuilder().setPort(port)
                                   .setTls(true)
                                   .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                                   .setKeyStoreLocation(KEYSTORE)
@@ -215,7 +215,7 @@
 
         try
         {
-            getConnectionBuilder().setSslPort(port)
+            getConnectionBuilder().setPort(port)
                                   .setTls(true)
                                   .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                                   .setKeyStoreLocation(TEST_PROFILE_RESOURCE_BASE + EXPIRED_KEYSTORE)
@@ -240,7 +240,7 @@
         trustStoreAttributes.put(FileTrustStore.PEERS_ONLY, true);
         int port = createExternalProviderAndTlsPort(trustStoreAttributes);
 
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setTls(true)
                                                       .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                                                       .setKeyStoreLocation(KEYSTORE)
@@ -262,7 +262,7 @@
         try
         {
 
-            getConnectionBuilder().setSslPort(port)
+            getConnectionBuilder().setPort(port)
                                   .setTls(true)
                                   .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                                   .setKeyStoreLocation(KEYSTORE)
@@ -311,7 +311,7 @@
         trustStoreAttributes.put(FileTrustStore.PEERS_ONLY, true);
         int port = createExternalProviderAndTlsPort(trustStoreAttributes, trustStoreName, false);
 
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setTls(true)
                                                       .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                                                       .setKeyStoreLocation(KEYSTORE)
@@ -330,7 +330,7 @@
         }
 
         //use the app2 cert, which is NOT in the peerstore (but is signed by the same CA as app1)
-        Connection connection2 = getConnectionBuilder().setSslPort(port)
+        Connection connection2 = getConnectionBuilder().setPort(port)
                               .setTls(true)
                               .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                               .setKeyStoreLocation(KEYSTORE)
@@ -359,7 +359,7 @@
 
         String clientId = getTestName();
         int port = createExternalProviderAndTlsPort(trustStoreAttributes, null, true);
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setTls(true)
                                                       .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                                                       .setKeyStoreLocation(KEYSTORE)
@@ -392,7 +392,7 @@
 
         String clientId = getTestName();
         int port = createExternalProviderAndTlsPort(trustStoreAttributes, null, false);
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setTls(true)
                                                       .setSaslMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
                                                       .setKeyStoreLocation(KEYSTORE)
diff --git a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/tls/TlsTest.java b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/tls/TlsTest.java
index 71d5e3c..01d69f3 100644
--- a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/tls/TlsTest.java
+++ b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/tls/TlsTest.java
@@ -124,7 +124,7 @@
         int port = configureTlsPort(getTestPortName(), true, false, false);
 
         InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setHost(brokerAddress.getHostName())
                                                       .setTls(true)
                                                       .setKeyStoreLocation(KEYSTORE)
@@ -153,7 +153,7 @@
         File trustCertFile = extractCertFileFromTestTrustStore();
 
         InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setHost(brokerAddress.getHostName())
                                                       .setTls(true)
                                                       .setOptions(Collections.singletonMap("trusted_certs_path",
@@ -178,7 +178,7 @@
         try
         {
             InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
-            getConnectionBuilder().setSslPort(brokerAddress.getPort())
+            getConnectionBuilder().setPort(brokerAddress.getPort())
                                   .setHost(brokerAddress.getHostName())
                                   .setTls(true)
                                   .build();
@@ -205,7 +205,7 @@
 
         try
         {
-            getConnectionBuilder().setSslPort(port)
+            getConnectionBuilder().setPort(port)
                                   .setHost("127.0.0.1")
                                   .setTls(true)
                                   .setKeyStoreLocation(KEYSTORE)
@@ -220,7 +220,7 @@
             // PASS
         }
 
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setHost("127.0.0.1")
                                                       .setTls(true)
                                                       .setKeyStoreLocation(KEYSTORE)
@@ -247,7 +247,7 @@
         setSslStoreSystemProperties();
         try
         {
-            Connection connection = getConnectionBuilder().setSslPort(port)
+            Connection connection = getConnectionBuilder().setPort(port)
                                                           .setTls(true)
                                                           .build();
             try
@@ -274,7 +274,7 @@
         try
         {
             Connection connection = getConnectionBuilder().setClientId(getTestName())
-                                                          .setSslPort(port)
+                                                          .setPort(port)
                                                           .setTls(true)
                                                           .setKeyAlias(TestSSLConstants.CERT_ALIAS_APP1)
                                                           .build();
@@ -287,7 +287,7 @@
                 connection.close();
             }
 
-            Connection connection2 = getConnectionBuilder().setSslPort(port)
+            Connection connection2 = getConnectionBuilder().setPort(port)
                                                            .setTls(true)
                                                            .setKeyAlias(TestSSLConstants.CERT_ALIAS_APP2)
                                                            .build();
@@ -317,7 +317,7 @@
         setSslStoreSystemProperties();
         try
         {
-            getConnectionBuilder().setSslPort(port)
+            getConnectionBuilder().setPort(port)
                                   .setHost("127.0.0.1")
                                   .setTls(true)
                                   .setVerifyHostName(true)
@@ -343,7 +343,7 @@
         setSslStoreSystemProperties();
         try
         {
-            Connection connection = getConnectionBuilder().setSslPort(port)
+            Connection connection = getConnectionBuilder().setPort(port)
                                                           .setHost("localhost")
                                                           .setTls(true)
                                                           .build();
@@ -369,7 +369,7 @@
         int port = configureTlsPort(getTestPortName(), false, true, false);
 
         InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setHost(brokerAddress.getHostName())
                                                       .setTls(true)
                                                       .setTrustStoreLocation(TRUSTSTORE)
@@ -395,7 +395,7 @@
 
         try
         {
-            getConnectionBuilder().setSslPort(port)
+            getConnectionBuilder().setPort(port)
                                   .setHost(getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP).getHostName())
                                   .setTls(true)
                                   .setTrustStoreLocation(TRUSTSTORE)
@@ -416,7 +416,7 @@
         int port = configureTlsPort(getTestPortName(), false, true, false);
 
         InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setHost(brokerAddress.getHostName())
                                                       .setTls(true)
                                                       .setTrustStoreLocation(TRUSTSTORE)
@@ -441,7 +441,7 @@
 
         try
         {
-            getConnectionBuilder().setSslPort(port)
+            getConnectionBuilder().setPort(port)
                                   .setHost(getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP).getHostName())
                                   .setTls(true)
                                   .setTrustStoreLocation(TRUSTSTORE)
@@ -463,7 +463,7 @@
         int port = configureTlsPort(getTestPortName(), false, true, true);
 
         InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setHost(brokerAddress.getHostName())
                                                       .setTls(true)
                                                       .setKeyStoreLocation(KEYSTORE)
@@ -513,7 +513,7 @@
         options.put("client_cert_path", encodePathOption(certAndKeyFiles[1].getCanonicalPath()));
         options.put("client_cert_priv_key_path", encodePathOption(certAndKeyFiles[0].getCanonicalPath()));
         InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
-        Connection connection = getConnectionBuilder().setSslPort(port)
+        Connection connection = getConnectionBuilder().setPort(port)
                                                       .setHost(brokerAddress.getHostName())
                                                       .setTls(true)
                                                       .setTrustStoreLocation(TRUSTSTORE)
