diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
index ee230b7..e5ff149 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
@@ -76,7 +76,7 @@
     }
 
     protected void setConfPropertyListView(final IModel<List<ConnConfProperty>> model, final boolean withOverridable) {
-        propertiesContainer.add(new ConnConfPropertyListView(
+        propertiesContainer.addOrReplace(new ConnConfPropertyListView(
                 "connectorProperties", model, withOverridable).setOutputMarkupId(true));
     }
 
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
index 207be00..f4e04df 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
@@ -25,6 +25,7 @@
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.PropertyModel;
 
@@ -107,4 +108,12 @@
 
         return props;
     }
+
+    public LoadableDetachableModel<List<ConnConfProperty>> getModel() {
+        return model;
+    }
+
+    public AjaxButton getCheck() {
+        return check;
+    }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
index b4bf9c8..232cd05 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
@@ -50,6 +50,8 @@
 
     private static final long serialVersionUID = -7982691107029848579L;
 
+    private AjaxDropDownChoicePanel<String> connector;
+
     private final IModel<List<String>> propagationActions = new LoadableDetachableModel<>() {
 
         private static final long serialVersionUID = 5275935387613157437L;
@@ -151,7 +153,7 @@
                     new Model<>(resourceTO.getConnectorDisplayName()),
                     false).addRequiredLabel().setEnabled(false));
         } else {
-            final AjaxDropDownChoicePanel<String> connector = new AjaxDropDownChoicePanel<>(
+            connector = new AjaxDropDownChoicePanel<>(
                     "connector",
                     new ResourceModel("connector", "connector").getObject(),
                     new PropertyModel<>(resourceTO, "connector"), false);
@@ -186,4 +188,8 @@
             container.add(connector);
         }
     }
+
+    public AjaxDropDownChoicePanel<String> getConnector() {
+        return connector;
+    }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
index 229dd50..1fd2642 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
@@ -19,17 +19,24 @@
 package org.apache.syncope.client.console.wizards.resources;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.console.rest.ResourceRestClient;
 import org.apache.syncope.client.console.topology.TopologyNode;
+import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.wizard.WizardModel;
 import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
 
 /**
  * Resource wizard builder.
@@ -53,8 +60,9 @@
     @Override
     protected WizardModel buildModelSteps(final Serializable modelObject, final WizardModel wizardModel) {
         ResourceTO resourceTO = ResourceTO.class.cast(modelObject);
-        wizardModel.add(new ResourceDetailsPanel(resourceTO, createFlag));
-        wizardModel.add(new ResourceConnConfPanel(resourceTO, createFlag) {
+        ResourceDetailsPanel resourceDetailsPanel = new ResourceDetailsPanel(resourceTO, createFlag);
+
+        ResourceConnConfPanel resourceConnConfPanel = new ResourceConnConfPanel(resourceTO, createFlag) {
 
             private static final long serialVersionUID = -1128269449868933504L;
 
@@ -68,7 +76,59 @@
                 tag.append("class", "scrollable-tab-content", " ");
             }
 
-        });
+        };
+
+        if (createFlag && resourceDetailsPanel.getConnector() != null) {
+            resourceDetailsPanel.getConnector().getField().add(
+                new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                    private static final long serialVersionUID = 4600298808455564695L;
+
+                    @Override
+                    protected void onUpdate(final AjaxRequestTarget target) {
+                        resourceTO.setConnector(resourceDetailsPanel.getConnector().getModelObject());
+
+                        LoadableDetachableModel<List<ConnConfProperty>> model =
+                                new LoadableDetachableModel<>() {
+
+                                    private static final long serialVersionUID = -2965284931860212687L;
+
+                                    @Override
+                                    protected List<ConnConfProperty> load() {
+                                        List<ConnConfProperty> confOverride =
+                                                resourceConnConfPanel.getConnProperties(resourceTO);
+                                        resourceTO.getConfOverride().clear();
+                                        resourceTO.getConfOverride().addAll(confOverride);
+
+                                        return new PropertyModel<List<ConnConfProperty>>(modelObject, "confOverride") {
+
+                                            private static final long serialVersionUID = -7809699384012595307L;
+
+                                            @Override
+                                            public List<ConnConfProperty> getObject() {
+                                                List<ConnConfProperty> res = new ArrayList<>(super.getObject());
+
+                                                // re-order properties
+                                                Collections.sort(res, (left, right) -> {
+                                                    if (left == null) {
+                                                        return -1;
+                                                    } else {
+                                                        return left.compareTo(right);
+                                                    }
+                                                });
+
+                                                return res;
+                                            }
+                                        }.getObject();
+                                    }
+                                };
+                        resourceConnConfPanel.setConfPropertyListView(model, true);
+                        target.add(resourceConnConfPanel.getCheck().setVisible(true).setEnabled(true));
+                    }
+                });
+        }
+        wizardModel.add(resourceDetailsPanel);
+        wizardModel.add(resourceConnConfPanel);
         if (resourceTO.getConnector() != null) {
             wizardModel.add(new ResourceConnCapabilitiesPanel(
                     resourceTO, ConnectorRestClient.read(resourceTO.getConnector()).getCapabilities()));
