diff --git a/org.springframework.build.aws.maven/.classpath b/org.springframework.build.aws.maven/.classpath
index 49140ee..3b30f1c 100644
--- a/org.springframework.build.aws.maven/.classpath
+++ b/org.springframework.build.aws.maven/.classpath
@@ -1,13 +1,12 @@
 <classpath>
-  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
   <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
   <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.2/commons-codec-1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/net/java/dev/jets3t/jets3t/0.5.1-20080115/jets3t-0.6.0.jar" sourcepath="M2_REPO/net/java/dev/jets3t/jets3t/0.5.1-20080115/jets3t-0.6.0-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar" sourcepath="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar" sourcepath="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/net/java/dev/jets3t/jets3t/0.6.0/jets3t-0.6.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.jar"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 </classpath>
\ No newline at end of file
diff --git a/org.springframework.build.aws.maven/pom.xml b/org.springframework.build.aws.maven/pom.xml
index 711e803..c5c7262 100644
--- a/org.springframework.build.aws.maven/pom.xml
+++ b/org.springframework.build.aws.maven/pom.xml
@@ -54,7 +54,7 @@
         <dependency>
             <groupId>org.apache.maven.wagon</groupId>
             <artifactId>wagon-provider-api</artifactId>
-            <version>1.0-beta-2</version>
+            <version>1.0-beta-6</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/AbstractWagon.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/AbstractWagon.java
index 1e1c760..66f5245 100644
--- a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/AbstractWagon.java
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/AbstractWagon.java
@@ -26,6 +26,7 @@
 import org.apache.maven.wagon.events.TransferEvent;
 import org.apache.maven.wagon.events.TransferListener;
 import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyInfoProvider;
 import org.apache.maven.wagon.repository.Repository;
 import org.apache.maven.wagon.resource.Resource;
 
@@ -51,6 +52,8 @@
 
 	private TransferListenerSupport transferListeners = new TransferListenerSupport(this);
 
+	private int timeout;
+
 	protected AbstractWagon(boolean supportsDirectoryCopy) {
 		this.supportsDirectoryCopy = supportsDirectoryCopy;
 	}
@@ -100,7 +103,7 @@
 	}
 
 	public final void connect(Repository source) throws ConnectionException, AuthenticationException {
-		connect(source, null, null);
+		connect(source, null, (ProxyInfoProvider)null);
 	}
 
 	public final void connect(Repository source, ProxyInfo proxyInfo) throws ConnectionException,
@@ -110,15 +113,33 @@
 
 	public final void connect(Repository source, AuthenticationInfo authenticationInfo) throws ConnectionException,
 			AuthenticationException {
-		connect(source, authenticationInfo, null);
+		connect(source, authenticationInfo, (ProxyInfoProvider)null);
 	}
 
-	public final void connect(Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo)
+	public void connect(Repository source, ProxyInfoProvider proxyInfoProvider) throws ConnectionException, AuthenticationException {
+		connect(source, null, proxyInfoProvider);
+	}
+
+	public void connect(Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo) throws ConnectionException, AuthenticationException {
+		final ProxyInfo proxy = proxyInfo;
+		connect(source, authenticationInfo, new ProxyInfoProvider() {
+			public ProxyInfo getProxyInfo(String protocol) {
+				if (protocol == null || proxy == null || protocol.equalsIgnoreCase(proxy.getType())) {
+					return proxy;
+				}
+				else {
+					return null;
+				}
+			}
+		} );
+	}
+
+	public final void connect(Repository source, AuthenticationInfo authenticationInfo, ProxyInfoProvider proxyInfoProvider)
 			throws ConnectionException, AuthenticationException {
 		repository = source;
 		sessionListeners.fireSessionOpening();
 		try {
-			connectToRepository(source, authenticationInfo, proxyInfo);
+			connectToRepository(source, authenticationInfo, proxyInfoProvider);
 		}
 		catch (ConnectionException e) {
 			sessionListeners.fireSessionConnectionRefused();
@@ -284,9 +305,17 @@
 		return supportsDirectoryCopy;
 	}
 
+	public int getTimeout() {
+		return timeout;
+	}
+
+	public void setTimeout(int timeout) {
+		this.timeout = timeout;
+	}
+
 	/**
 	 * Subclass must implement with specific connection behavior
-	 * 
+	 *
 	 * @param source The repository connection information
 	 * @param authenticationInfo Authentication information, if any
 	 * @param proxyInfo Proxy information, if any
@@ -294,7 +323,7 @@
 	 * handled by the base class
 	 */
 	protected abstract void connectToRepository(Repository source, AuthenticationInfo authenticationInfo,
-			ProxyInfo proxyInfo) throws Exception;
+			ProxyInfoProvider proxyInfo) throws Exception;
 
 	/**
 	 * Subclass must implement with specific detection behavior
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SimpleStorageServiceWagon.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SimpleStorageServiceWagon.java
index 6fb37e0..f578732 100644
--- a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SimpleStorageServiceWagon.java
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SimpleStorageServiceWagon.java
@@ -18,7 +18,7 @@
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.authentication.AuthenticationException;
 import org.apache.maven.wagon.authentication.AuthenticationInfo;
-import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyInfoProvider;
 import org.apache.maven.wagon.repository.Repository;
 import org.jets3t.service.S3Service;
 import org.jets3t.service.S3ServiceException;
@@ -60,7 +60,7 @@
 		super(false);
 	}
 
-	protected void connectToRepository(Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo)
+	protected void connectToRepository(Repository source, AuthenticationInfo authenticationInfo, ProxyInfoProvider proxyInfoProvider)
 			throws AuthenticationException {
 		try {
 			service = new RestS3Service(getCredentials(authenticationInfo));
