diff --git a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
index 9d3630b..09ff0ef 100755
--- a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
+++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
@@ -665,9 +665,19 @@
      */
     private String buildUrl( Resource resource )
     {
-        return EncodingUtil.encodeURLToString( getRepository().getUrl(), resource.getName() );
+        return buildUrl( resource.getName() );
     }
 
+    /**
+     * Builds a complete URL string from the repository URL and the relative path of the resource passed.
+     *
+     * @param resourceName the resourcerelative path
+     * @return the complete URL
+     */
+    private String buildUrl( String resourceName )
+    {
+        return EncodingUtil.encodeURLToString( getRepository().getUrl(), resourceName );
+    }
 
     private void put( Resource resource, File source, HttpEntity httpEntity, String url )
         throws TransferFailedException, AuthorizationException, ResourceDoesNotExistException
@@ -804,8 +814,7 @@
     private boolean resourceExists( int wait, String resourceName )
         throws TransferFailedException, AuthorizationException
     {
-        String repositoryUrl = getRepository().getUrl();
-        String url = repositoryUrl + ( repositoryUrl.endsWith( "/" ) ? "" : "/" ) + resourceName;
+        String url = buildUrl( resourceName );
         HttpHead headMethod = new HttpHead( url );
         try
         {
@@ -1082,8 +1091,7 @@
     {
         Resource resource = inputData.getResource();
 
-        String repositoryUrl = getRepository().getUrl();
-        String url = repositoryUrl + ( repositoryUrl.endsWith( "/" ) ? "" : "/" ) + resource.getName();
+        String url = buildUrl( resource );
         HttpGet getMethod = new HttpGet( url );
         long timestamp = resource.getLastModified();
         if ( timestamp > 0 )
diff --git a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/EncodingUtil.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/EncodingUtil.java
index 1794288..67f5e5f 100644
--- a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/EncodingUtil.java
+++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/EncodingUtil.java
@@ -24,6 +24,8 @@
 import java.net.URISyntaxException;
 import java.net.URL;
 
+import org.apache.http.client.utils.URLEncodedUtils;
+
 /**
  * Encoding utility.
  *
@@ -38,7 +40,9 @@
      * @return Parsed/encoded {@link URI} that represents the string form URL passed in.
      * @throws MalformedURLException
      * @throws URISyntaxException
+     * @deprecated to be removed with 4.0.0
      */
+    @Deprecated
     public static URI encodeURL( String url )
         throws MalformedURLException, URISyntaxException
     {
@@ -61,7 +65,9 @@
      * @param url Raw/decoded string form of a URL to parse/encode.
      * @return Parsed/encoded URI (as string) that represents the
      * @throws IllegalArgumentException in case the URL string is invalid.
+     * @deprecated To be remvoed with 4.0.0
      */
+    @Deprecated
     public static String encodeURLToString( String url )
     {
         try
@@ -75,31 +81,43 @@
     }
 
     /**
-     * Parses and returns an encoded version of the given URL string alongside the given paths.
+     * Parses and returns an encoded version of the given URL string alongside the given path.
      *
-     * @param baseUrl Base URL to use when constructing the final URL, ie: scheme://authority/initial.path.
-     * @param paths   Additional path(s) to append at the end of the base path.
-     * @return Composed URL (base + paths) already encoded, separating the individual path components by "/".
+     * @param baseUrl Base URL to use when constructing the final URL. This has to be a valid URL already.
+     * @param path Additional unencoded path to append at the end of the base path.
+     * @return Composed URL (base + path) already encoded, separating the individual path segments by "/".
      * @since TODO
      */
-    public static String encodeURLToString( String baseUrl, String... paths )
+    public static String encodeURLToString( String baseUrl, String path )
+    {
+        String[] pathSegments = path == null ? new String[0] : path.split( "/" );
+
+        return encodeURLToString( baseUrl, pathSegments );
+    }
+
+    /**
+     * Parses and returns an encoded version of the given URL string alongside the given path segments.
+     *
+     * @param baseUrl Base URL to use when constructing the final URL. This has to be a valid URL already.
+     * @param pathSegments Additional unencoded path segments to append at the end of the base path.
+     * @return Composed URL (base + path) already encoded, separating the individual path segments by "/".
+     * @since TODO
+     */
+    public static String encodeURLToString( String baseUrl, String... pathSegments )
     {
         StringBuilder url = new StringBuilder( baseUrl );
 
-        String[] parts = paths == null ? //
-            new String[0] : //
-            paths.length == 1 ? paths[0].split( "/" ) : paths;
+        String[] segments = pathSegments == null ? new String[0] : pathSegments;
 
-        for ( String part : parts )
+        String path = URLEncodedUtils.formatSegments( segments );
+
+        if ( url.toString().endsWith( "/" ) && !path.isEmpty() )
         {
-            if ( !url.toString().endsWith( "/" ) )
-            {
-                url.append( '/' );
-            }
-
-            url.append( part );
+            url.deleteCharAt( url.length() - 1 );
         }
 
-        return encodeURLToString( url.toString() );
+        url.append( path );
+
+        return url.toString();
     }
 }
diff --git a/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/EncodingUtilTest.java b/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/EncodingUtilTest.java
index f20f35f..4ec549c 100644
--- a/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/EncodingUtilTest.java
+++ b/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/EncodingUtilTest.java
@@ -46,8 +46,73 @@
     public void testEncodeURLWithSpacesInBothBaseAndPath()
         throws URISyntaxException, MalformedURLException
     {
-        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/with a", "path with spaces" );
+        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/with%20a", "path with spaces" );
 
         assertEquals( "file://host:1/with%20a/path%20with%20spaces", encodedURL );
     }
+
+    public void testEncodeURLWithSlashes1()
+        throws URISyntaxException, MalformedURLException
+    {
+        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/basePath", "a", "b", "c" );
+
+        assertEquals( "file://host:1/basePath/a/b/c", encodedURL );
+
+        encodedURL = EncodingUtil.encodeURLToString( "file://host:1/basePath", "a/b/c" );
+
+        assertEquals( "file://host:1/basePath/a/b/c", encodedURL );
+    }
+
+    public void testEncodeURLWithSlashes2()
+        throws URISyntaxException, MalformedURLException
+    {
+        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/basePath/", "a", "b", "c" );
+
+        assertEquals( "file://host:1/basePath/a/b/c", encodedURL );
+
+        encodedURL = EncodingUtil.encodeURLToString( "file://host:1/basePath/", "a/b/c" );
+
+        assertEquals( "file://host:1/basePath/a/b/c", encodedURL );
+    }
+
+    public void testEncodeURLWithSlashes3()
+            throws URISyntaxException, MalformedURLException
+    {
+        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/basePath/", new String[0] );
+
+        assertEquals( "file://host:1/basePath/", encodedURL );
+    }
+
+    public void testEncodeURLWithSlashes4()
+        throws URISyntaxException, MalformedURLException
+    {
+        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/basePath", new String[0] );
+
+        assertEquals( "file://host:1/basePath", encodedURL );
+    }
+
+    public void testEncodeURLWithSlashes5()
+        throws URISyntaxException, MalformedURLException
+    {
+        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/basePath",
+                                                            "a/1", "b/1", "c/1" );
+
+        assertEquals( "file://host:1/basePath/a%2F1/b%2F1/c%2F1", encodedURL );
+    }
+
+    public void testEncodeURLWithSlashes6()
+        throws URISyntaxException, MalformedURLException
+    {
+        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/", new String[0] );
+
+        assertEquals( "file://host:1/", encodedURL );
+    }
+
+    public void testEncodeURLWithSlashes7()
+        throws URISyntaxException, MalformedURLException
+    {
+        String encodedURL = EncodingUtil.encodeURLToString( "file://host:1", new String[0] );
+
+        assertEquals( "file://host:1", encodedURL );
+    }
 }
