diff --git a/main/src/main/java/org/geoserver/catalog/ResourcePool.java b/main/src/main/java/org/geoserver/catalog/ResourcePool.java
index a751a32..084347e 100644
--- a/main/src/main/java/org/geoserver/catalog/ResourcePool.java
+++ b/main/src/main/java/org/geoserver/catalog/ResourcePool.java
@@ -1152,9 +1152,12 @@ public class ResourcePool {
                         }
                         String username = info.getUsername();
                         String password = info.getPassword();
-
+                        int connectTimeout = info.getConnectTimeout();
+                        int readTimeout = info.getReadTimeout();
                         client.setUser(username);
                         client.setPassword(password);
+                        client.setConnectTimeout(connectTimeout);
+                        client.setReadTimeout(readTimeout);
 
                         URL serverURL = new URL(info.getCapabilitiesURL());
                         wms = new WebMapServer(serverURL, client);
diff --git a/main/src/main/java/org/geoserver/catalog/WMSStoreInfo.java b/main/src/main/java/org/geoserver/catalog/WMSStoreInfo.java
index ad0a99c..36ff5e7 100644
--- a/main/src/main/java/org/geoserver/catalog/WMSStoreInfo.java
+++ b/main/src/main/java/org/geoserver/catalog/WMSStoreInfo.java
@@ -58,4 +58,25 @@ public interface WMSStoreInfo extends StoreInfo {
     
     void setMaxConnections(int maxConcurrentConnections);
     
+    /**
+     * @return number of seconds to wait on read before time out, defaults to 60
+     */
+    int getReadTimeout();
+
+    /**
+     * @param timeoutSeconds
+     *            seconds to wait before timing out a read request
+     */
+    void setReadTimeout(int timeoutSeconds);
+
+    /**
+     * @return seconds to wait for connect requests before timing out, defaults to 30
+     */
+    int getConnectTimeout();
+
+    /**
+     * @param seconds
+     *            to wait for connect requests before timing out
+     */
+    void setConnectTimeout(int timeoutSeconds);
 }
diff --git a/main/src/main/java/org/geoserver/catalog/impl/WMSStoreInfoImpl.java b/main/src/main/java/org/geoserver/catalog/impl/WMSStoreInfoImpl.java
index 7481ff6..54b393d 100644
--- a/main/src/main/java/org/geoserver/catalog/impl/WMSStoreInfoImpl.java
+++ b/main/src/main/java/org/geoserver/catalog/impl/WMSStoreInfoImpl.java
@@ -62,6 +62,24 @@ public class WMSStoreInfoImpl extends StoreInfoImpl implements WMSStoreInfo {
         getMetadata().put("maxConnections", Integer.valueOf(maxConcurrentConnections));        
     }
 
+    public int getReadTimeout() {
+        Integer readTimeout = getMetadata().get("readTimeout", Integer.class);
+        return readTimeout == null? 60 : readTimeout;
+    }
+
+    public void setReadTimeout(int timeoutSeconds) {
+        getMetadata().put("readTimeout", Integer.valueOf(timeoutSeconds));        
+    }
+
+    public int getConnectTimeout() {
+        Integer connectTimeout = getMetadata().get("connectTimeout", Integer.class);
+        return connectTimeout == null? 30 : connectTimeout;
+    }
+
+    public void setConnectTimeout(int timeoutSeconds) {
+        getMetadata().put("connectTimeout", Integer.valueOf(timeoutSeconds));        
+    }
+
     public void accept(CatalogVisitor visitor) {
         visitor.visit(this);
     }
diff --git a/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSStoreInfo.java b/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSStoreInfo.java
index 951b375..f80f4f3 100644
--- a/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSStoreInfo.java
+++ b/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSStoreInfo.java
@@ -143,4 +143,20 @@ public class DecoratingWMSStoreInfo extends AbstractDecorator<WMSStoreInfo> impl
         delegate.setMaxConnections(maxConcurrentConnections);        
     }
 
+    public int getReadTimeout() {
+        return delegate.getReadTimeout();
+    }
+
+    public void setReadTimeout(int timeoutSeconds) {
+        delegate.setReadTimeout(timeoutSeconds);
+    }
+
+    public int getConnectTimeout() {
+        return delegate.getConnectTimeout();
+    }
+
+    public void setConnectTimeout(int timeoutSeconds) {
+        delegate.setConnectTimeout(timeoutSeconds);
+    }
+
 }
diff --git a/web/core/src/main/java/org/geoserver/web/data/store/AbstractWMSStorePage.html b/web/core/src/main/java/org/geoserver/web/data/store/AbstractWMSStorePage.html
index 0c42a8c..bd5713c 100644
--- a/web/core/src/main/java/org/geoserver/web/data/store/AbstractWMSStorePage.html
+++ b/web/core/src/main/java/org/geoserver/web/data/store/AbstractWMSStorePage.html
@@ -19,6 +19,8 @@
         <div><span wicket:id="userNamePanel"></span></div>
         <div><span wicket:id="passwordPanel"></span></div>
         <div><span wicket:id="maxConnectionsPanel"></span></div>
+        <div><span wicket:id="connectTimeoutPanel"></span></div>
+        <div><span wicket:id="readTimeoutPanel"></span></div>
       </fieldset>
     </li>
   </ul>
diff --git a/web/core/src/main/java/org/geoserver/web/data/store/AbstractWMSStorePage.java b/web/core/src/main/java/org/geoserver/web/data/store/AbstractWMSStorePage.java
index c3e59c0..fc0e7b1 100644
--- a/web/core/src/main/java/org/geoserver/web/data/store/AbstractWMSStorePage.java
+++ b/web/core/src/main/java/org/geoserver/web/data/store/AbstractWMSStorePage.java
@@ -94,6 +94,16 @@ abstract class AbstractWMSStorePage extends GeoServerSecuredPage {
         form.add(new TextParamPanel("maxConnectionsPanel", connectionsModel, new ResourceModel(
                 "AbstractWMSStorePage.maxConnections"), false));
         
+        // connect timeout
+        PropertyModel<Integer> connectTimeoutModel = new PropertyModel<Integer>(model, "connectTimeout");
+        form.add(new TextParamPanel("connectTimeoutPanel", connectTimeoutModel, new ResourceModel(
+                "AbstractWMSStorePage.connectTimeout"), false));
+
+        // read timeout
+        PropertyModel<Integer> readTimeoutModel = new PropertyModel<Integer>(model, "readTimeout");
+        form.add(new TextParamPanel("readTimeoutPanel", readTimeoutModel, new ResourceModel(
+                "AbstractWMSStorePage.readTimeout"), false));
+
         // cancel/submit buttons
         form.add(new BookmarkablePageLink("cancel", StorePage.class));
         form.add(saveLink());
diff --git a/web/core/src/main/resources/GeoServerApplication.properties b/web/core/src/main/resources/GeoServerApplication.properties
index 057557e..89b4c2a 100644
--- a/web/core/src/main/resources/GeoServerApplication.properties
+++ b/web/core/src/main/resources/GeoServerApplication.properties
@@ -61,7 +61,9 @@ AbstractWMSStorePage.capabilitiesURL         = Capabilities URL
 AbstractWMSStorePage.connectionInfo          = Connection Info
 AbstractWMSStorePage.userName                = User Name
 AbstractWMSStorePage.password                = Password
-AbstractWMSStorePage.maxConnections          = Max concurrent connections 
+AbstractWMSStorePage.maxConnections          = Max concurrent connections
+AbstractWMSStorePage.readTimeout             = Read timeout in seconds
+AbstractWMSStorePage.connectTimeout          = Connect timeout in seconds 
 
 BaseServiceAdminPage.accessConstraints    = Access Constraints
 BaseServiceAdminPage.fees                 = Fees

