diff --git a/systests/src/test/java/org/apache/qpid/systest/connection/FailoverMethodTest.java b/systests/src/test/java/org/apache/qpid/systest/connection/FailoverMethodTest.java
index 58d140d..61f8a2a 100644
--- a/systests/src/test/java/org/apache/qpid/systest/connection/FailoverMethodTest.java
+++ b/systests/src/test/java/org/apache/qpid/systest/connection/FailoverMethodTest.java
@@ -25,13 +25,19 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.assumeThat;
 
+import java.io.IOException;
 import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
 import javax.jms.ExceptionListener;
 import javax.jms.JMSException;
 
 import com.google.common.util.concurrent.SettableFuture;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -41,7 +47,6 @@
 import org.apache.qpid.client.AMQConnectionURL;
 import org.apache.qpid.systest.core.BrokerAdmin;
 import org.apache.qpid.systest.core.JmsTestBase;
-import org.apache.qpid.systest.core.util.PortHelper;
 import org.apache.qpid.util.SystemUtils;
 
 public class FailoverMethodTest extends JmsTestBase implements ExceptionListener
@@ -50,16 +55,24 @@
     private final SettableFuture<JMSException> _failoverComplete = SettableFuture.create();
     private int _freePortWithNoBroker;
     private int _port;
+    private DummyServer _dummyServer;
 
     @Before
-    public void setUp()
+    public void setUp() throws Exception
     {
         assumeThat("Test requires redevelopment - timings/behaviour on windows mean it fails",
                    SystemUtils.isWindows(), is(not(true)));
 
+        _dummyServer = new DummyServer();
         InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
         _port = brokerAddress.getPort();
-        _freePortWithNoBroker = new PortHelper().getNextAvailable();
+        _freePortWithNoBroker = _dummyServer.start();
+    }
+
+    @After
+    public void tearDown()
+    {
+        _dummyServer.stop();
     }
     /**
      * Test that the round robin method has the correct delays.
@@ -178,4 +191,72 @@
     {
         _failoverComplete.set(e);
     }
+
+    class DummyServer implements Runnable
+    {
+        private ExecutorService _executorService;
+        private ServerSocket _serverSocket;
+        private boolean _started;
+
+        synchronized int start() throws IOException
+        {
+            if (!_started)
+            {
+                _executorService = Executors.newSingleThreadExecutor();
+                _serverSocket = new ServerSocket(0);
+                _started = true;
+                _executorService.submit(this);
+                return _serverSocket.getLocalPort();
+            }
+            return -1;
+        }
+
+        synchronized void stop()
+        {
+            if (_started)
+            {
+                _started = false;
+                closeSafely();
+            }
+        }
+
+        public void run()
+        {
+            while (_started)
+            {
+                try
+                {
+                    acceptAndClose();
+                }
+                catch (IOException e)
+                {
+                    LOGGER.warn("Failed to close client socket", e);
+                    stop();
+                }
+            }
+        }
+
+        private void acceptAndClose() throws IOException
+        {
+            final Socket socket = _serverSocket.accept();
+            socket.close();
+        }
+
+        private synchronized void closeSafely()
+        {
+            try
+            {
+                _serverSocket.close();
+            }
+            catch (IOException e)
+            {
+                LOGGER.warn("Failed to close server socket", e);
+            }
+            finally
+            {
+                _executorService.shutdown();
+            }
+        }
+    }
+
 }
