diff --git a/wagon-provider-test/src/main/java/org/apache/maven/wagon/StreamingWagonTestCase.java b/wagon-provider-test/src/main/java/org/apache/maven/wagon/StreamingWagonTestCase.java
index c2a4782..d06da32 100644
--- a/wagon-provider-test/src/main/java/org/apache/maven/wagon/StreamingWagonTestCase.java
+++ b/wagon-provider-test/src/main/java/org/apache/maven/wagon/StreamingWagonTestCase.java
@@ -42,10 +42,10 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
-
             setupWagonTestingFixtures();
 
+            setupRepositories();
+
             streamRoundTripTesting();
 
             tearDownWagonTestingFixtures();
@@ -55,10 +55,10 @@
     public void testFailedGetToStream()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         message( "Getting test artifact from test repository " + testRepository );
 
         StreamingWagon wagon = (StreamingWagon) getWagon();
@@ -103,8 +103,9 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
+
             int expectedSize = putFile();
             // CHECKSTYLE_OFF: MagicNumber
             getIfNewerToStream( getExpectedLastModifiedOnGet( testRepository, new Resource( resource ) ) + 30000, false,
@@ -118,8 +119,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             getIfNewerToStream( new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2006-01-01" ).getTime(), true,
                                 expectedSize );
@@ -131,8 +132,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             getIfNewerToStream( getExpectedLastModifiedOnGet( testRepository, new Resource( resource ) ), false,
                                 expectedSize );
@@ -172,8 +173,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             message( "Getting test artifact from test repository " + testRepository );
             StreamingWagon wagon = (StreamingWagon) getWagon();
             wagon.addTransferListener( checksumObserver );
diff --git a/wagon-provider-test/src/main/java/org/apache/maven/wagon/WagonTestCase.java b/wagon-provider-test/src/main/java/org/apache/maven/wagon/WagonTestCase.java
index cdcdc67..a1b9a45 100644
--- a/wagon-provider-test/src/main/java/org/apache/maven/wagon/WagonTestCase.java
+++ b/wagon-provider-test/src/main/java/org/apache/maven/wagon/WagonTestCase.java
@@ -42,7 +42,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.net.ServerSocket;
 import java.nio.charset.StandardCharsets;
 import java.security.NoSuchAlgorithmException;
 import java.text.SimpleDateFormat;
@@ -136,23 +135,6 @@
      */
     protected abstract String getProtocol();
 
-    public static ServerSocket newServerSocket( int... ports )
-    {
-        for ( int port : ports )
-        {
-            try
-            {
-                return new ServerSocket( port );
-            }
-            catch ( IOException ex )
-            {
-                continue;
-            }
-        }
-
-        throw new RuntimeException( "no port available" );
-    }
-
     // ----------------------------------------------------------------------
     // 1. Create a local file repository which mimic a users local file
     // Repository.
@@ -270,10 +252,10 @@
     public void testWagon()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         fileRoundTripTesting();
 
         tearDownWagonTestingFixtures();
@@ -284,8 +266,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             // CHECKSTYLE_OFF: MagicNumber
             getIfNewer( getExpectedLastModifiedOnGet( testRepository, new Resource( resource ) ) + 30000, false,
@@ -315,8 +297,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             getIfNewer( getExpectedLastModifiedOnGet( testRepository, new Resource( resource ) ), false, expectedSize );
         }
@@ -327,8 +309,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             getIfNewer( new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2006-01-01" ).getTime(), true, expectedSize );
         }
@@ -431,10 +413,10 @@
     public void testWagonPutDirectory()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
@@ -479,10 +461,10 @@
     public void testWagonPutDirectoryDeepDestination()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
@@ -533,10 +515,10 @@
 
         final String[] resources = { "a/test-resource-2.txt", "a/b/test-resource-3.txt", "c/test-resource-4.txt" };
 
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
@@ -585,10 +567,10 @@
 
         final String[] resources = { "a/test-resource-2.txt", "a/b/test-resource-3.txt", "c/test-resource-4.txt" };
 
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
@@ -688,10 +670,10 @@
     public void testFailedGet()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         message( "Getting test artifact from test repository " + testRepository );
 
         Wagon wagon = getWagon();
@@ -729,8 +711,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             message( "Getting test artifact from test repository " + testRepository );
             Wagon wagon = getWagon();
             wagon.addTransferListener( checksumObserver );
@@ -767,10 +749,10 @@
     public void testWagonGetFileList()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         String dirName = "file-list";
 
         String filenames[] =
@@ -821,10 +803,10 @@
     public void testWagonGetFileListWhenDirectoryDoesNotExist()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         String dirName = "file-list-unexisting";
 
         Wagon wagon = getWagon();
@@ -857,10 +839,10 @@
     public void testWagonResourceExists()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         putFile();
@@ -883,10 +865,10 @@
     public void testWagonResourceNotExists()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         wagon.connect( testRepository, getAuthInfo() );
diff --git a/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java b/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
index 16a777c..463431a 100644
--- a/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
+++ b/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
@@ -123,8 +123,6 @@
         server.setHandler( handlers );
 
         server.start();
-
-        testRepository.setUrl( getTestRepositoryUrl() );
     }
 
     protected final int getTestRepositoryPort()
diff --git a/wagon-providers/wagon-ftp/src/test/java/org/apache/maven/wagon/providers/ftp/FtpWagonTest.java b/wagon-providers/wagon-ftp/src/test/java/org/apache/maven/wagon/providers/ftp/FtpWagonTest.java
index d5f74b9..6f20f99 100644
--- a/wagon-providers/wagon-ftp/src/test/java/org/apache/maven/wagon/providers/ftp/FtpWagonTest.java
+++ b/wagon-providers/wagon-ftp/src/test/java/org/apache/maven/wagon/providers/ftp/FtpWagonTest.java
@@ -20,8 +20,6 @@
  */
 
 import java.io.File;
-import java.io.IOException;
-import java.net.ServerSocket;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -30,6 +28,7 @@
 import org.apache.ftpserver.FtpServerFactory;
 import org.apache.ftpserver.ftplet.Authority;
 import org.apache.ftpserver.ftplet.UserManager;
+import org.apache.ftpserver.listener.Listener;
 import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
 import org.apache.ftpserver.usermanager.impl.BaseUser;
@@ -49,30 +48,15 @@
 public class FtpWagonTest
     extends StreamingWagonTestCase
 {
-    static private FtpServer server;
+    private FtpServer server;
     
-//    private static final int testRepositoryPort = 10023 + new Random().nextInt( 16 );
-    
-    private static int testRepositoryPort;
+    private int testRepositoryPort;
     
     protected String getProtocol()
     {
         return "ftp";
     }
     
-    static
-    {
-        // claim number, release it again so it can be reclaimed by ftp server
-        try (ServerSocket socket = newServerSocket( 10023, 10024, 10025, 10026 ))
-        {
-            testRepositoryPort = socket.getLocalPort();
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-        }
-    }
-
     protected int getTestRepositoryPort() {
         return testRepositoryPort;
     }
@@ -86,17 +70,18 @@
             ftpHomeDir.mkdirs();
         }
 
-        if (server == null)
+        if ( server == null )
         {
             FtpServerFactory serverFactory = new FtpServerFactory();
 
             ListenerFactory factory = new ListenerFactory();
 
             // set the port of the listener
-            factory.setPort(getTestRepositoryPort());
+            factory.setPort( 0 );
             
             // replace the default listener
-            serverFactory.addListener("default", factory.createListener());
+            Listener defaultListener = factory.createListener();
+            serverFactory.addListener("default", defaultListener );
 
             PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
             UserManager um = userManagerFactory.createUserManager();
@@ -122,6 +107,7 @@
             // start the server
             server.start();
 
+            testRepositoryPort = defaultListener.getPort();
         }
     }
 
@@ -207,10 +193,10 @@
     public void testPutDirectoryCreation()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonErrorTest.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonErrorTest.java
index b48ee12..85df40d 100644
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonErrorTest.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonErrorTest.java
@@ -53,7 +53,7 @@
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -87,7 +87,7 @@
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -122,7 +122,7 @@
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -156,7 +156,7 @@
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
index b257659..38cd7e1 100644
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
@@ -1,8 +1,5 @@
 package org.apache.maven.wagon.providers.http;
 
-import java.io.IOException;
-import java.net.ServerSocket;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -23,9 +20,9 @@
  */
 
 import org.apache.maven.wagon.Wagon;
-import org.apache.maven.wagon.WagonTestCase;
 import org.codehaus.plexus.PlexusTestCase;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.handler.ResourceHandler;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 
@@ -35,32 +32,17 @@
 public abstract class HttpWagonHttpServerTestCase
     extends PlexusTestCase
 {
-    protected static int httpServerPort;
-
     private Server server;
 
     protected ResourceHandler resourceHandler;
 
     protected ServletContextHandler context;
 
-    static
-    {
-        // claim number, release it again so it can be reclaimed by ftp server
-        try ( ServerSocket socket = WagonTestCase.newServerSocket( 10008, 10009, 10010, 10011 ) )
-        {
-            httpServerPort = socket.getLocalPort();
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-        }
-    }
-    
     protected void setUp()
         throws Exception
     {
         super.setUp();
-        server = new Server( httpServerPort );
+        server = new Server( 0 );
 
         context = new ServletContextHandler( ServletContextHandler.SESSIONS );
         resourceHandler = new ResourceHandler();
@@ -85,4 +67,10 @@
     {
         server.stop();
     }
+    
+    protected final int getPort()
+    {
+        return ((ServerConnector) server.getConnectors()[0]).getLocalPort();
+    }
+    
 }
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
index ee1d0ec..553576f 100644
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
@@ -56,7 +56,7 @@
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -91,7 +91,7 @@
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -123,7 +123,7 @@
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -155,7 +155,7 @@
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
diff --git a/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java b/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java
index cf9fbdd..c8a3692 100644
--- a/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java
+++ b/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java
@@ -160,10 +160,10 @@
     public void testMkdirs()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         WebDavWagon wagon = (WebDavWagon) getWagon();
         wagon.connect( testRepository, getAuthInfo() );
 
@@ -210,10 +210,10 @@
         throws Exception
     {
         // WAGON-244
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         // reconstruct with no basedir
         testRepository.setUrl(
             testRepository.getProtocol() + "://" + testRepository.getHost() + ":" + testRepository.getPort() );
@@ -255,10 +255,10 @@
     public void testWagonWebDavGetFileList()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         String dirName = "file-list";
 
         String filenames[] =
@@ -325,10 +325,10 @@
     public void testWagonFailsOnPutFailureByDefault()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         File testFile = getTempFile();
 
         System.clearProperty( WebDavWagon.CONTINUE_ON_FAILURE_PROPERTY );
@@ -388,10 +388,10 @@
     public void testWagonContinuesOnPutFailureIfPropertySet()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         File testFile = getTempFile();
 
         String continueOnFailureProperty = WebDavWagon.CONTINUE_ON_FAILURE_PROPERTY;
