diff --git a/main/src/main/java/org/geoserver/catalog/ResourcePool.java b/main/src/main/java/org/geoserver/catalog/ResourcePool.java
index b3f20a7..7ec40aa 100644
--- a/main/src/main/java/org/geoserver/catalog/ResourcePool.java
+++ b/main/src/main/java/org/geoserver/catalog/ResourcePool.java
@@ -58,6 +58,7 @@ import org.geotools.data.DataStore;
 import org.geotools.data.DataUtilities;
 import org.geotools.data.FeatureSource;
 import org.geotools.data.ows.Layer;
+import org.geotools.data.ows.MultithreadedHttpClient;
 import org.geotools.data.ows.WMSCapabilities;
 import org.geotools.data.simple.SimpleFeatureSource;
 import org.geotools.data.wms.WebMapServer;
@@ -1147,8 +1148,19 @@ public class ResourcePool {
                 synchronized (wmsCache) {
                     wms = (WebMapServer) wmsCache.get(id);
                     if (wms == null) {
-                        wms = new WebMapServer(new URL(info.getCapabilitiesURL()));
+                        MultithreadedHttpClient client = new MultithreadedHttpClient();
+                        if(info.getMaxConnections() > 0){
+                            client.setMaxConnections(info.getMaxConnections());
+                        }
+                        String username = info.getUsername();
+                        String password = info.getPassword();
+
+                        client.setUser(username);
+                        client.setPassword(password);
 
+                        URL serverURL = new URL(info.getCapabilitiesURL());
+                        wms = new WebMapServer(serverURL, client);
+                        
                         wmsCache.put(id, wms);
                     }
                 }
diff --git a/main/src/main/java/org/geoserver/catalog/WMSStoreInfo.java b/main/src/main/java/org/geoserver/catalog/WMSStoreInfo.java
index de2f29b..ad0a99c 100644
--- a/main/src/main/java/org/geoserver/catalog/WMSStoreInfo.java
+++ b/main/src/main/java/org/geoserver/catalog/WMSStoreInfo.java
@@ -45,5 +45,17 @@ public interface WMSStoreInfo extends StoreInfo {
      * @uml.property name="url"
      */
     void setCapabilitiesURL(String url);
-
+    
+    String getUsername();
+    
+    void setUsername(String user);
+    
+    String getPassword();
+    
+    void setPassword(String password);
+    
+    int getMaxConnections();
+    
+    void setMaxConnections(int maxConcurrentConnections);
+    
 }
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 deea114..1595d03 100644
--- a/main/src/main/java/org/geoserver/catalog/impl/WMSStoreInfoImpl.java
+++ b/main/src/main/java/org/geoserver/catalog/impl/WMSStoreInfoImpl.java
@@ -15,6 +15,9 @@ import org.opengis.util.ProgressListener;
 public class WMSStoreInfoImpl extends StoreInfoImpl implements WMSStoreInfo {
 
     String capabilitiesURL;
+    private String user;
+    private String password;
+    private int maxConnections;
 
     protected WMSStoreInfoImpl() {
     }
@@ -31,6 +34,36 @@ public class WMSStoreInfoImpl extends StoreInfoImpl implements WMSStoreInfo {
         this.capabilitiesURL = capabilitiesURL;
     }
 
+    @Override
+    public String getUsername() {
+        return user;
+    }
+
+    @Override
+    public void setUsername(String user) {
+        this.user = user;
+    }
+
+    @Override
+    public String getPassword() {
+        return password;
+    }
+
+    @Override
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    @Override
+    public int getMaxConnections() {
+        return maxConnections;
+    }
+
+    @Override
+    public void setMaxConnections(int maxConcurrentConnections) {
+        this.maxConnections = maxConcurrentConnections;        
+    }
+
     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 37e33cf..3e58632 100644
--- a/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSStoreInfo.java
+++ b/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSStoreInfo.java
@@ -113,4 +113,34 @@ public class DecoratingWMSStoreInfo extends AbstractDecorator<WMSStoreInfo> impl
         delegate.setWorkspace(workspace);
     }
 
+    @Override
+    public String getUsername() {
+        return delegate.getUsername();
+    }
+
+    @Override
+    public void setUsername(String user) {
+        delegate.setUsername(user);
+    }
+
+    @Override
+    public String getPassword() {
+        return delegate.getPassword();
+    }
+
+    @Override
+    public void setPassword(String password) {
+        delegate.setPassword(password);
+    }
+
+    @Override
+    public int getMaxConnections() {
+        return delegate.getMaxConnections();
+    }
+
+    @Override
+    public void setMaxConnections(int maxConcurrentConnections) {
+        delegate.setMaxConnections(maxConcurrentConnections);        
+    }
+
 }
diff --git a/main/src/main/java/org/geoserver/security/decorators/SecuredGetFeatureInfoRequest.java b/main/src/main/java/org/geoserver/security/decorators/SecuredGetFeatureInfoRequest.java
index f88eece..e236cb4 100644
--- a/main/src/main/java/org/geoserver/security/decorators/SecuredGetFeatureInfoRequest.java
+++ b/main/src/main/java/org/geoserver/security/decorators/SecuredGetFeatureInfoRequest.java
@@ -16,6 +16,7 @@ import java.util.Set;
 import org.geoserver.security.SecureCatalogImpl;
 import org.geoserver.security.WMSAccessLimits;
 import org.geoserver.security.WrapperPolicy;
+import org.geotools.data.ows.HTTPResponse;
 import org.geotools.data.ows.Layer;
 import org.geotools.data.ows.Response;
 import org.geotools.data.wms.request.GetFeatureInfoRequest;
@@ -95,9 +96,9 @@ public class SecuredGetFeatureInfoRequest implements GetFeatureInfoRequest {
     // Pure delegate methods
     // ----------------------------------------------------------------------------------------
 
-    public Response createResponse(String contentType, InputStream inputStream)
+    public Response createResponse(HTTPResponse response)
             throws ServiceException, IOException {
-        return delegate.createResponse(contentType, inputStream);
+        return delegate.createResponse(response);
     }
 
     public String getPostContentType() {
diff --git a/main/src/main/java/org/geoserver/security/decorators/SecuredGetMapRequest.java b/main/src/main/java/org/geoserver/security/decorators/SecuredGetMapRequest.java
index f583ef2..5e87703 100644
--- a/main/src/main/java/org/geoserver/security/decorators/SecuredGetMapRequest.java
+++ b/main/src/main/java/org/geoserver/security/decorators/SecuredGetMapRequest.java
@@ -19,6 +19,7 @@ import org.geoserver.security.SecureCatalogImpl;
 import org.geoserver.security.WMSAccessLimits;
 import org.geoserver.security.WrapperPolicy;
 import org.geotools.data.ows.CRSEnvelope;
+import org.geotools.data.ows.HTTPResponse;
 import org.geotools.data.ows.Layer;
 import org.geotools.data.ows.Response;
 import org.geotools.data.ows.StyleImpl;
@@ -239,9 +240,9 @@ public class SecuredGetMapRequest implements GetMapRequest {
         delegate.setVersion(version);
     }
 
-    public Response createResponse(String contentType, InputStream inputStream)
+    public Response createResponse(HTTPResponse response)
             throws ServiceException, IOException {
-        return delegate.createResponse(contentType, inputStream);
+        return delegate.createResponse(response);
     }
     
     
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 de98a97..e12084c 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
@@ -13,7 +13,16 @@
       </fieldset>
     </li>
     <li>
+      <fieldset>
         <div><span wicket:id="capabilitiesURL"></span></div>
+      </fieldset>
+    </li>
+    <li>
+      <fieldset>
+        <div><span wicket:id="userNamePanel"></span></div>
+        <div><span wicket:id="passwordPanel"></span></div>
+        <div><span wicket:id="maxConnectionsPanel"></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 07e0949..6928aeb 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
@@ -4,9 +4,6 @@
  */
 package org.geoserver.web.data.store;
 
-import java.net.URL;
-import java.util.Collections;
-
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.markup.html.form.Form;
@@ -16,16 +13,14 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.ResourceModel;
-import org.apache.wicket.validation.IValidatable;
-import org.apache.wicket.validation.validator.AbstractValidator;
 import org.geoserver.catalog.WMSStoreInfo;
 import org.geoserver.web.GeoServerSecuredPage;
 import org.geoserver.web.data.store.panel.CheckBoxParamPanel;
+import org.geoserver.web.data.store.panel.PasswordParamPanel;
 import org.geoserver.web.data.store.panel.TextParamPanel;
 import org.geoserver.web.data.store.panel.WorkspacePanel;
 import org.geoserver.web.wicket.GeoServerDialog;
 import org.geoserver.web.wicket.ParamResourceModel;
-import org.geotools.data.wms.WebMapServer;
 
 /**
  * Supports coverage store configuration
@@ -71,10 +66,27 @@ abstract class AbstractWMSStorePage extends GeoServerSecuredPage {
                 true);
         form.add(workspacePanel);
         
-        capabilitiesURL = new TextParamPanel("capabilitiesURL", new PropertyModel(form.getModelObject(), "capabilitiesURL"),
+        capabilitiesURL = new TextParamPanel("capabilitiesURL", new PropertyModel(model, "capabilitiesURL"),
                 new ParamResourceModel("capabilitiesURL", AbstractWMSStorePage.this), true);
         form.add(capabilitiesURL);
 
+        // user name
+        PropertyModel userModel = new PropertyModel(model, "username");
+        final TextParamPanel usernamePanel = new TextParamPanel("userNamePanel", userModel,
+                new ResourceModel("AbstractWMSStorePage.userName"), false);
+
+        form.add(usernamePanel);
+
+        // password
+        PropertyModel passwordModel = new PropertyModel(model, "password");
+        form.add(new PasswordParamPanel("passwordPanel", passwordModel, new ResourceModel(
+                "AbstractWMSStorePage.password"), false));
+        
+        // max concurrent connections
+        PropertyModel connectionsModel = new PropertyModel(model, "maxConnections");
+        form.add(new TextParamPanel("maxConnectionsPanel", connectionsModel, new ResourceModel(
+                "AbstractWMSStorePage.maxConnections"), false));
+        
         // cancel/submit buttons
         form.add(new BookmarkablePageLink("cancel", StorePage.class));
         form.add(saveLink());
@@ -99,6 +111,7 @@ abstract class AbstractWMSStorePage extends GeoServerSecuredPage {
 
             @Override
             protected void onSubmit(AjaxRequestTarget target, Form form) {
+                form.process();
                 WMSStoreInfo info = (WMSStoreInfo) form.getModelObject();
                 try {
                     onSave(info, target);
diff --git a/web/core/src/main/java/org/geoserver/web/data/store/WMSStoreEditPage.java b/web/core/src/main/java/org/geoserver/web/data/store/WMSStoreEditPage.java
index b1ea147..12cf1fa 100644
--- a/web/core/src/main/java/org/geoserver/web/data/store/WMSStoreEditPage.java
+++ b/web/core/src/main/java/org/geoserver/web/data/store/WMSStoreEditPage.java
@@ -9,6 +9,7 @@ import org.apache.wicket.PageParameters;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.geoserver.catalog.WMSStoreInfo;
 import org.geoserver.web.wicket.GeoServerDialog;
+import org.geotools.data.wms.WebMapServer;
 
 public class WMSStoreEditPage extends AbstractWMSStorePage {
     
@@ -35,7 +36,11 @@ public class WMSStoreEditPage extends AbstractWMSStorePage {
             try {
                 // try to see if we can connect
                 getCatalog().getResourcePool().clear(info);
-                info.getWebMapServer(null).getCapabilities();
+                // do not call info.getWebMapServer cause it ends up calling
+                // resourcepool.getWebMapServer with the unproxied instance (old values)
+                //info.getWebMapServer(null).getCapabilities();
+                WebMapServer webMapServer = getCatalog().getResourcePool().getWebMapServer(info);
+                webMapServer.getCapabilities();
                 doSaveStore(info);
             } catch(Exception e) {
                 confirmSaveOnConnectionFailure(info, target, e);
diff --git a/web/core/src/main/resources/GeoServerApplication.properties b/web/core/src/main/resources/GeoServerApplication.properties
index 9741994..b16bcf2 100644
--- a/web/core/src/main/resources/GeoServerApplication.properties
+++ b/web/core/src/main/resources/GeoServerApplication.properties
@@ -61,6 +61,10 @@ AbstractWMSStorePage.dataSrcName             = WMS Source Name
 AbstractWMSStorePage.description             = WMS cascading store
 AbstractWMSStorePage.workspace               = Workspace
 AbstractWMSStorePage.capabilitiesURL         = Capabilities URL
+AbstractWMSStorePage.connectionInfo          = Capabilities URL
+AbstractWMSStorePage.userName                = User Name
+AbstractWMSStorePage.password                = Password
+AbstractWMSStorePage.maxConnections          = Max concurrent connections 
 
 BaseServiceAdminPage.accessConstraints    = Access Constraints
 BaseServiceAdminPage.fees                 = Fees

