You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2019/05/15 06:49:49 UTC

[syncope] branch master updated (e6a1202 -> 07303b4)

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git.


    from e6a1202  Upgrading CXF
     new 9a63628  Upgrading Tomcat and cargo-maven2-plugin
     new 07303b4  [SYNCOPE-1460] Console support for domain management

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 client/idrepo/common-ui/pom.xml                    |  12 +-
 .../syncope/client/ui/commons/BaseApplication.java |  26 ---
 .../syncope/client/ui/commons/BaseLogin.java       |  27 ++-
 .../syncope/client/ui/commons/DomainDropDown.java  |   8 +-
 .../markup/html/form/AbstractFieldPanel.html       |   0
 .../markup/html/form/AjaxCheckBoxPanel.html        |   0
 .../markup/html/form/AjaxDropDownChoicePanel.html  |   0
 .../commons/markup/html/form/AjaxPalettePanel.html |   0
 .../markup/html/form/AjaxPasswordFieldPanel.html   |   0
 .../markup/html/form/AjaxSpinnerFieldPanel.html    |   0
 .../markup/html/form/AjaxTextFieldPanel.html       |   0
 .../markup/html/form/EncryptedFieldPanel.html      |   0
 .../html/form/EncryptedFieldPanel.properties       |   0
 .../html/form/EncryptedFieldPanel_it.properties    |   0
 .../html/form/EncryptedFieldPanel_ja.properties    |   0
 .../html/form/EncryptedFieldPanel_pt_BR.properties |   0
 .../html/form/EncryptedFieldPanel_ru.properties    |   0
 .../commons/markup/html/form/NonI18nPalette.html   |   0
 .../html/form/preview/AbstractBinaryPreviewer.html |   0
 .../markup/html/form/preview/DefaultPreviewer.html |   0
 .../client/ui/commons/panels/LabelPanel.html       |   0
 .../ui/commons/panels/NotificationPanel.html       |   0
 .../markup/html/bootstrap/tabs/Accordion.html      |   0
 .../client/ui/commons/wizards/AjaxWizard.html      |   0
 .../ui/commons/wizards/AjaxWizard.properties       |   0
 .../ui/commons/wizards/AjaxWizardMgtButtonBar.html |   0
 .../ui/commons/wizards/AjaxWizard_it.properties    |   0
 .../ui/commons/wizards/AjaxWizard_ja.properties    |   0
 .../ui/commons/wizards/AjaxWizard_pt_BR.properties |   0
 .../ui/commons/wizards/AjaxWizard_ru.properties    |   0
 .../ui/commons/wizards/any/PasswordPanel.html      |   0
 client/idrepo/console/pom.xml                      |  44 ----
 .../client/console/SyncopeWebApplication.java      |  25 +--
 .../client/console/commons/IdRepoConstants.java    |   2 +
 .../syncope/client/console/pages/BasePage.java     |  78 +++++--
 .../syncope/client/console/pages/Domains.java}     |  13 +-
 .../apache/syncope/client/console/pages/Login.java |   6 -
 .../client/console/pages/NetworkServices.java      |   2 +-
 .../client/console/panels/AbstractModalPanel.java  |   6 +-
 ...Panel.java => DomainAdminCredentialsPanel.java} |  69 +++---
 .../console/panels/DomainDirectoryPanel.java       | 208 ++++++++++++++++++
 ...onModalPanel.java => DomainPoolModalPanel.java} |  66 +++---
 .../client/console/panels/DomainWizardBuilder.java | 233 +++++++++++++++++++++
 .../syncope/client/console/panels/TogglePanel.java |   3 +
 .../reports/ReportTemplateDirectoryPanel.java      |   6 +-
 .../console/reports/ReportWizardBuilder.java       |   1 -
 .../markup/html/form/ActionLinksTogglePanel.java   |   5 +-
 .../console/SyncopeWebApplication.properties       |   4 +-
 .../console/SyncopeWebApplication_it.properties    |   4 +-
 .../console/SyncopeWebApplication_ja.properties    |   4 +-
 .../console/SyncopeWebApplication_pt_BR.properties |   4 +-
 .../console/SyncopeWebApplication_ru.properties    |   4 +-
 .../syncope/client/console/pages/BasePage.html     |  10 +-
 .../syncope/client/console/pages/Domains.html      |   7 +-
 .../client/console/pages/NetworkServices.html      |   4 +-
 .../syncope/client/console/pages/Parameters.html   |   2 +-
 .../DomainAdminCredentialsPanel.html}              |   3 +-
 .../panels/DomainDirectoryPanel.properties}        |  35 +++-
 .../panels/DomainDirectoryPanel_it.properties      |  40 ++++
 .../panels/DomainDirectoryPanel_ja.properties}     |  35 +++-
 .../panels/DomainDirectoryPanel_pt_BR.properties}  |  35 +++-
 .../panels/DomainDirectoryPanel_ru.properties}     |  35 +++-
 .../DomainPoolModalPanel.html}                     |   3 +-
 .../DomainWizardBuilder$AdminCredentials.html}     |   3 +-
 .../panels/DomainWizardBuilder$Content.html}       |   3 +-
 .../DomainWizardBuilder$KeymasterConfParams.html}  |   3 +-
 .../panels/DomainWizardBuilder$Storage.html}       |  19 +-
 .../markup/html/form/AbstractFieldPanel.html       |  34 ---
 .../markup/html/form/AjaxDropDownChoicePanel.html  |  29 ---
 .../commons/markup/html/form/AjaxPalettePanel.html |  38 ----
 .../markup/html/form/AjaxSpinnerFieldPanel.html    |  39 ----
 .../markup/html/form/AjaxTextFieldPanel.html       |  30 ---
 .../markup/html/form/EncryptedFieldPanel.html      |  66 ------
 .../html/form/EncryptedFieldPanel.properties       |  17 --
 .../html/form/EncryptedFieldPanel_it.properties    |  17 --
 .../html/form/EncryptedFieldPanel_ja.properties    |  17 --
 .../html/form/EncryptedFieldPanel_pt_BR.properties |  17 --
 .../html/form/EncryptedFieldPanel_ru.properties    |  19 --
 .../commons/markup/html/form/NonI18nPalette.html   |  57 -----
 .../html/form/preview/AbstractBinaryPreviewer.html |  23 --
 .../markup/html/form/preview/DefaultPreviewer.html |  25 ---
 .../client/ui/commons/panels/LabelPanel.html       |  23 --
 .../ui/commons/panels/NotificationPanel.html       |  60 ------
 .../markup/html/bootstrap/tabs/Accordion.html      |  32 ---
 .../ui/commons/wizards/AjaxWizard.properties       |  23 --
 .../ui/commons/wizards/AjaxWizard_it.properties    |  23 --
 .../ui/commons/wizards/AjaxWizard_ja.properties    |  23 --
 .../ui/commons/wizards/AjaxWizard_pt_BR.properties |  23 --
 .../ui/commons/wizards/AjaxWizard_ru.properties    |  30 ---
 .../ui/commons/wizards/any/PasswordPanel.html      |  33 ---
 client/idrepo/enduser/pom.xml                      |  66 ------
 .../client/enduser/SyncopeWebApplication.java      |  21 +-
 .../apache/syncope/client/enduser/pages/Login.java |   6 -
 .../enduser/pages/SelfConfirmPasswordReset.java    |  26 ++-
 .../client/enduser/panels/SelfPwdResetPanel.java   |  26 ++-
 .../markup/html/form/AjaxCheckBoxPanel.html        |  34 ---
 .../markup/html/form/AjaxPasswordFieldPanel.html   |  36 ----
 .../client/ui/commons/wizards/AjaxWizard.html      |  46 ----
 .../ui/commons/wizards/AjaxWizardMgtButtonBar.html |  38 ----
 .../common/lib/types/IdRepoEntitlement.java        |   2 +-
 .../common/keymaster/client/api/DomainOps.java     |   2 +-
 .../common/keymaster/client/api/model/Domain.java  |  40 ++--
 .../client/zookeper/ZookeeperDomainOps.java        |   6 +-
 .../client/zookeper/ZookeeperDomainOpsITCase.java  |  16 +-
 .../apache/syncope/core/logic/SyncopeLogic.java    |   2 +-
 .../core/persistence/jpa/DomainConfFactory.java    |   4 +-
 .../core/persistence/jpa/StartupDomainLoader.java  |   4 +-
 .../org/apache/syncope/core/logic/DomainLogic.java |  11 +-
 .../self/keymaster/api/service/DomainService.java  |   4 +-
 .../keymaster/cxf/service/DomainServiceImpl.java   |   4 +-
 .../syncope/fit/console/ParametersITCase.java      |   2 +-
 .../apache/syncope/fit/core/KeymasterITCase.java   |  15 +-
 pom.xml                                            |   4 +-
 113 files changed, 929 insertions(+), 1281 deletions(-)
 delete mode 100644 client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseApplication.java
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html (100%)
 rename client/idrepo/{console => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html (100%)
 rename client/idrepo/{console => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html (100%)
 rename client/idrepo/{console => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties (100%)
 rename client/idrepo/{console => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties (100%)
 rename client/idrepo/{enduser => common-ui}/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html (100%)
 copy client/{idm/console/src/main/java/org/apache/syncope/client/console/pages/Remediations.java => idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Domains.java} (78%)
 copy client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/{ApplicationModalPanel.java => DomainAdminCredentialsPanel.java} (53%)
 create mode 100644 client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
 copy client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/{ApplicationModalPanel.java => DomainPoolModalPanel.java} (55%)
 create mode 100644 client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainWizardBuilder.java
 copy ext/oidcclient/client-console/src/main/resources/org/apache/syncope/client/console/pages/OIDCClient.html => client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/Domains.html (86%)
 copy client/idrepo/console/src/main/resources/org/apache/syncope/client/console/{wizards/any/AnyObjectDetails.html => panels/DomainAdminCredentialsPanel.html} (91%)
 copy client/{idm/console/src/main/resources/org/apache/syncope/client/console/pages/Remediations_it.properties => idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel.properties} (50%)
 create mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_it.properties
 copy client/{idm/console/src/main/resources/org/apache/syncope/client/console/pages/Remediations_it.properties => idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_ja.properties} (50%)
 copy client/{idm/console/src/main/resources/org/apache/syncope/client/console/pages/Remediations_it.properties => idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_pt_BR.properties} (50%)
 copy client/{idm/console/src/main/resources/org/apache/syncope/client/console/pages/Remediations_it.properties => idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_ru.properties} (50%)
 copy client/idrepo/console/src/main/resources/org/apache/syncope/client/console/{wizards/any/AnyObjectDetails.html => panels/DomainPoolModalPanel.html} (92%)
 copy client/{idm/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyNodePanel.html => idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$AdminCredentials.html} (91%)
 copy client/{idm/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyNodePanel.html => idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$Content.html} (92%)
 copy client/{idm/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyNodePanel.html => idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$KeymasterConfParams.html} (91%)
 copy client/{idm/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails.html => idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$Storage.html} (68%)
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties
 delete mode 100644 client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html
 delete mode 100644 client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html
 delete mode 100644 client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html
 delete mode 100644 client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html
 delete mode 100644 client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html


[syncope] 02/02: [SYNCOPE-1460] Console support for domain management

Posted by il...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit 07303b494ea41e2f85c7758c60fad5f8327eb200
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Wed May 15 08:49:33 2019 +0200

    [SYNCOPE-1460] Console support for domain management
---
 client/idrepo/common-ui/pom.xml                    |  12 +-
 .../syncope/client/ui/commons/BaseApplication.java |  26 ---
 .../syncope/client/ui/commons/BaseLogin.java       |  27 ++-
 .../syncope/client/ui/commons/DomainDropDown.java  |   8 +-
 .../markup/html/form/AbstractFieldPanel.html       |   0
 .../markup/html/form/AjaxCheckBoxPanel.html        |   0
 .../markup/html/form/AjaxDropDownChoicePanel.html  |   0
 .../commons/markup/html/form/AjaxPalettePanel.html |   0
 .../markup/html/form/AjaxPasswordFieldPanel.html   |   0
 .../markup/html/form/AjaxSpinnerFieldPanel.html    |   0
 .../markup/html/form/AjaxTextFieldPanel.html       |   0
 .../markup/html/form/EncryptedFieldPanel.html      |   0
 .../html/form/EncryptedFieldPanel.properties       |   0
 .../html/form/EncryptedFieldPanel_it.properties    |   0
 .../html/form/EncryptedFieldPanel_ja.properties    |   0
 .../html/form/EncryptedFieldPanel_pt_BR.properties |   0
 .../html/form/EncryptedFieldPanel_ru.properties    |   0
 .../commons/markup/html/form/NonI18nPalette.html   |   0
 .../html/form/preview/AbstractBinaryPreviewer.html |   0
 .../markup/html/form/preview/DefaultPreviewer.html |   0
 .../client/ui/commons/panels/LabelPanel.html       |   0
 .../ui/commons/panels/NotificationPanel.html       |   0
 .../markup/html/bootstrap/tabs/Accordion.html      |   0
 .../client/ui/commons/wizards/AjaxWizard.html      |   0
 .../ui/commons/wizards/AjaxWizard.properties       |   0
 .../ui/commons/wizards/AjaxWizardMgtButtonBar.html |   0
 .../ui/commons/wizards/AjaxWizard_it.properties    |   0
 .../ui/commons/wizards/AjaxWizard_ja.properties    |   0
 .../ui/commons/wizards/AjaxWizard_pt_BR.properties |   0
 .../ui/commons/wizards/AjaxWizard_ru.properties    |   0
 .../ui/commons/wizards/any/PasswordPanel.html      |   0
 client/idrepo/console/pom.xml                      |  44 ----
 .../client/console/SyncopeWebApplication.java      |  25 +--
 .../client/console/commons/IdRepoConstants.java    |   2 +
 .../syncope/client/console/pages/BasePage.java     |  78 +++++--
 .../pages/{NetworkServices.java => Domains.java}   |  34 +--
 .../apache/syncope/client/console/pages/Login.java |   6 -
 .../client/console/pages/NetworkServices.java      |   2 +-
 .../client/console/panels/AbstractModalPanel.java  |   6 +-
 .../panels/DomainAdminCredentialsPanel.java        |  85 ++++++++
 .../console/panels/DomainDirectoryPanel.java       | 208 ++++++++++++++++++
 .../console/panels/DomainPoolModalPanel.java       |  78 +++++++
 .../client/console/panels/DomainWizardBuilder.java | 233 +++++++++++++++++++++
 .../syncope/client/console/panels/TogglePanel.java |   3 +
 .../reports/ReportTemplateDirectoryPanel.java      |   6 +-
 .../console/reports/ReportWizardBuilder.java       |   1 -
 .../markup/html/form/ActionLinksTogglePanel.java   |   5 +-
 .../console/SyncopeWebApplication.properties       |   4 +-
 .../console/SyncopeWebApplication_it.properties    |   4 +-
 .../console/SyncopeWebApplication_ja.properties    |   4 +-
 .../console/SyncopeWebApplication_pt_BR.properties |   4 +-
 .../console/SyncopeWebApplication_ru.properties    |   4 +-
 .../syncope/client/console/pages/BasePage.html     |  10 +-
 .../pages/Domains.html}                            |  24 ++-
 .../client/console/pages/NetworkServices.html      |   4 +-
 .../syncope/client/console/pages/Parameters.html   |   2 +-
 .../panels/DomainAdminCredentialsPanel.html}       |   7 +-
 .../panels/DomainDirectoryPanel.properties}        |  25 ++-
 .../panels/DomainDirectoryPanel_it.properties      |  40 ++++
 .../panels/DomainDirectoryPanel_ja.properties}     |  25 ++-
 .../panels/DomainDirectoryPanel_pt_BR.properties}  |  25 ++-
 .../panels/DomainDirectoryPanel_ru.properties}     |  25 ++-
 .../console/panels/DomainPoolModalPanel.html}      |   9 +-
 .../DomainWizardBuilder$AdminCredentials.html}     |   5 +-
 .../panels/DomainWizardBuilder$Content.html}       |   3 +-
 .../DomainWizardBuilder$KeymasterConfParams.html}  |   3 +-
 .../panels/DomainWizardBuilder$Storage.html}       |  23 +-
 .../markup/html/form/AbstractFieldPanel.html       |  34 ---
 .../markup/html/form/AjaxDropDownChoicePanel.html  |  29 ---
 .../commons/markup/html/form/AjaxPalettePanel.html |  38 ----
 .../markup/html/form/AjaxSpinnerFieldPanel.html    |  39 ----
 .../markup/html/form/EncryptedFieldPanel.html      |  66 ------
 .../html/form/EncryptedFieldPanel_ru.properties    |  19 --
 .../commons/markup/html/form/NonI18nPalette.html   |  57 -----
 .../ui/commons/panels/NotificationPanel.html       |  60 ------
 .../markup/html/bootstrap/tabs/Accordion.html      |  32 ---
 .../ui/commons/wizards/AjaxWizard.properties       |  23 --
 .../ui/commons/wizards/AjaxWizard_it.properties    |  23 --
 .../ui/commons/wizards/AjaxWizard_ja.properties    |  23 --
 .../ui/commons/wizards/AjaxWizard_pt_BR.properties |  23 --
 .../ui/commons/wizards/AjaxWizard_ru.properties    |  30 ---
 client/idrepo/enduser/pom.xml                      |  66 ------
 .../client/enduser/SyncopeWebApplication.java      |  21 +-
 .../apache/syncope/client/enduser/pages/Login.java |   6 -
 .../enduser/pages/SelfConfirmPasswordReset.java    |  26 ++-
 .../client/enduser/panels/SelfPwdResetPanel.java   |  26 ++-
 .../markup/html/form/AjaxCheckBoxPanel.html        |  34 ---
 .../markup/html/form/AjaxPasswordFieldPanel.html   |  36 ----
 .../client/ui/commons/wizards/AjaxWizard.html      |  46 ----
 .../ui/commons/wizards/AjaxWizardMgtButtonBar.html |  38 ----
 .../common/lib/types/IdRepoEntitlement.java        |   2 +-
 .../common/keymaster/client/api/DomainOps.java     |   2 +-
 .../common/keymaster/client/api/model/Domain.java  |  40 ++--
 .../client/zookeper/ZookeeperDomainOps.java        |   6 +-
 .../client/zookeper/ZookeeperDomainOpsITCase.java  |  16 +-
 .../apache/syncope/core/logic/SyncopeLogic.java    |   2 +-
 .../core/persistence/jpa/DomainConfFactory.java    |   4 +-
 .../core/persistence/jpa/StartupDomainLoader.java  |   4 +-
 .../org/apache/syncope/core/logic/DomainLogic.java |  11 +-
 .../self/keymaster/api/service/DomainService.java  |   4 +-
 .../keymaster/cxf/service/DomainServiceImpl.java   |   4 +-
 .../syncope/fit/console/ParametersITCase.java      |   2 +-
 .../apache/syncope/fit/core/KeymasterITCase.java   |  15 +-
 103 files changed, 1050 insertions(+), 996 deletions(-)

diff --git a/client/idrepo/common-ui/pom.xml b/client/idrepo/common-ui/pom.xml
index ce6baac..1dcbb01 100644
--- a/client/idrepo/common-ui/pom.xml
+++ b/client/idrepo/common-ui/pom.xml
@@ -48,6 +48,10 @@ under the License.
     </dependency>
     <dependency>
       <groupId>org.apache.wicket</groupId>
+      <artifactId>wicket-spring</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.wicket</groupId>
       <artifactId>wicket-extensions</artifactId>
     </dependency>
     <dependency>
@@ -82,7 +86,13 @@ under the License.
       <groupId>de.agilecoders.wicket</groupId>
       <artifactId>wicket-bootstrap-extensions</artifactId>
     </dependency>
-    
+
+    <dependency>
+      <groupId>org.apache.syncope.common.keymaster</groupId>
+      <artifactId>syncope-common-keymaster-client-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
     <dependency>
       <groupId>org.apache.syncope.client.idrepo</groupId>
       <artifactId>syncope-client-idrepo-lib</artifactId>
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseApplication.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseApplication.java
deleted file mode 100644
index 499113a..0000000
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseApplication.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.ui.commons;
-
-import java.util.List;
-
-public interface BaseApplication {
-
-    List<String> getDomains();
-}
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseLogin.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseLogin.java
index 197e9aa..8244cf0 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseLogin.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseLogin.java
@@ -21,10 +21,15 @@ package org.apache.syncope.client.ui.commons;
 import com.googlecode.wicket.kendo.ui.widget.notification.Notification;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.select.BootstrapSelect;
 import java.security.AccessControlException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.ui.commons.panels.NotificationPanel;
+import org.apache.syncope.common.keymaster.client.api.DomainOps;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -40,8 +45,10 @@ import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -51,6 +58,9 @@ public abstract class BaseLogin extends WebPage {
 
     protected static final Logger LOG = LoggerFactory.getLogger(BaseLogin.class);
 
+    @SpringBean
+    private DomainOps domainOps;
+
     protected final NotificationPanel notificationPanel;
 
     protected final StatelessForm<Void> form;
@@ -63,6 +73,19 @@ public abstract class BaseLogin extends WebPage {
 
     protected String notificationLevel;
 
+    private final LoadableDetachableModel<List<String>> domains = new LoadableDetachableModel<List<String>>() {
+
+        private static final long serialVersionUID = 4659376149825914247L;
+
+        @Override
+        protected List<String> load() {
+            List<String> current = new ArrayList<>();
+            current.addAll(domainOps.list().stream().map(Domain::getKey).sorted().collect(Collectors.toList()));
+            current.add(0, SyncopeConstants.MASTER_DOMAIN);
+            return current;
+        }
+    };
+
     public BaseLogin(final PageParameters parameters) {
         super(parameters);
         setStatelessHint(true);
@@ -116,7 +139,7 @@ public abstract class BaseLogin extends WebPage {
         });
         form.add(languageSelect);
 
-        DomainDropDown domainSelect = new DomainDropDown("domain");
+        DomainDropDown domainSelect = new DomainDropDown("domain", domains);
         domainSelect.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) {
 
             private static final long serialVersionUID = -1107858522700306810L;
@@ -175,8 +198,6 @@ public abstract class BaseLogin extends WebPage {
         }
     }
 
-    protected abstract BaseApplication getBaseApplication();
-
     protected abstract BaseSession getBaseSession();
 
     protected abstract List<Panel> getSSOLoginFormPanels();
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/DomainDropDown.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/DomainDropDown.java
index 38a6914..17a9de7 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/DomainDropDown.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/DomainDropDown.java
@@ -19,8 +19,8 @@
 package org.apache.syncope.client.ui.commons;
 
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.select.BootstrapSelect;
+import java.util.List;
 import org.apache.syncope.common.lib.SyncopeConstants;
-import org.apache.wicket.Application;
 import org.apache.wicket.Session;
 import org.apache.wicket.model.IModel;
 
@@ -31,8 +31,8 @@ public class DomainDropDown extends BootstrapSelect<String> {
 
     private static final long serialVersionUID = -7401167913360133325L;
 
-    public DomainDropDown(final String id) {
-        super(id, BaseApplication.class.cast(Application.get()).getDomains());
+    public DomainDropDown(final String id, final IModel<List<String>> domains) {
+        super(id, domains);
         setModel(new IModel<String>() {
 
             private static final long serialVersionUID = -1124206668056084806L;
@@ -55,7 +55,7 @@ public class DomainDropDown extends BootstrapSelect<String> {
         // set default value to Master Domain
         getModel().setObject(SyncopeConstants.MASTER_DOMAIN);
 
-        if (BaseApplication.class.cast(Application.get()).getDomains().size() == 1) {
+        if (domains.getObject().size() == 1) {
             setOutputMarkupPlaceholderTag(true);
         }
     }
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html
similarity index 100%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html
similarity index 100%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
similarity index 100%
copy from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
copy to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html
similarity index 100%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html
similarity index 100%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html b/client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html
similarity index 100%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html
rename to client/idrepo/common-ui/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html
diff --git a/client/idrepo/console/pom.xml b/client/idrepo/console/pom.xml
index 150d4f6..aefa2ac 100644
--- a/client/idrepo/console/pom.xml
+++ b/client/idrepo/console/pom.xml
@@ -57,46 +57,6 @@ under the License.
       <groupId>org.apache.wicket</groupId>
       <artifactId>wicket-auth-roles</artifactId>
     </dependency>
-    <dependency>
-      <groupId>com.googlecode.wicket-jquery-ui</groupId>
-      <artifactId>wicket-jquery-ui</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.wicket-jquery-ui</groupId>
-      <artifactId>wicket-kendo-ui</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.wicket-jquery-ui</groupId>
-      <artifactId>wicket-kendo-ui-culture</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.wicket-jquery-ui</groupId>
-      <artifactId>wicket-kendo-ui-theme-bootstrap</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.wicket</groupId>
-      <artifactId>wicket-native-websocket-javax</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>de.agilecoders.wicket</groupId>
-      <artifactId>wicket-bootstrap-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>de.agilecoders.wicket</groupId>
-      <artifactId>wicket-bootstrap-extensions</artifactId>
-    </dependency>
-    
-    <dependency>
-      <groupId>org.apache.syncope.common.keymaster</groupId>
-      <artifactId>syncope-common-keymaster-client-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.syncope.client.idrepo</groupId>
-      <artifactId>syncope-client-idrepo-lib</artifactId>
-      <version>${project.version}</version>
-    </dependency>
 
     <dependency>
       <groupId>org.apache.syncope.client.idrepo</groupId>
@@ -148,10 +108,6 @@ under the License.
     </dependency>
     <dependency>
       <groupId>org.webjars</groupId>
-      <artifactId>jquery-ui</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.webjars</groupId>
       <artifactId>jQuery-slimScroll</artifactId>
     </dependency>
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
index dbf4854..368b0a6 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
@@ -31,7 +31,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
-import java.util.stream.Collectors;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -58,7 +57,6 @@ import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.resource.JQueryResourceReference;
 import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -68,23 +66,20 @@ import org.apache.syncope.client.console.commons.PolicyTabProvider;
 import org.apache.syncope.client.console.commons.StatusProvider;
 import org.apache.syncope.client.console.commons.VirSchemaDetailsPanelProvider;
 import org.apache.syncope.client.console.pages.MustChangePassword;
-import org.apache.syncope.client.ui.commons.BaseApplication;
 import org.apache.syncope.client.ui.commons.SyncopeUIRequestCycleListener;
 import org.apache.syncope.client.ui.commons.Constants;
-import org.apache.syncope.common.keymaster.client.api.DomainOps;
 import org.apache.syncope.common.keymaster.client.api.model.NetworkService;
 import org.apache.syncope.common.keymaster.client.api.ServiceOps;
-import org.apache.syncope.common.keymaster.client.api.model.Domain;
-import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.IRequestCycleListener;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.resource.JQueryResourceReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 @Component
-public class SyncopeWebApplication extends WicketBootSecuredWebApplication implements BaseApplication {
+public class SyncopeWebApplication extends WicketBootSecuredWebApplication {
 
     private static final Logger LOG = LoggerFactory.getLogger(SyncopeWebApplication.class);
 
@@ -105,9 +100,6 @@ public class SyncopeWebApplication extends WicketBootSecuredWebApplication imple
     @Autowired
     private ServiceOps serviceOps;
 
-    @Autowired
-    private DomainOps domainOps;
-
     @Value("${service.discovery.address}")
     private String address;
 
@@ -129,8 +121,6 @@ public class SyncopeWebApplication extends WicketBootSecuredWebApplication imple
 
     private Integer queueCapacity;
 
-    private List<String> domains;
-
     private ExternalResourceProvider resourceProvider;
 
     private AnyWizardBuilderAdditionalSteps anyWizardBuilderAdditionalSteps;
@@ -365,17 +355,6 @@ public class SyncopeWebApplication extends WicketBootSecuredWebApplication imple
                 setUseCompression(useGZIPCompression);
     }
 
-    @Override
-    public List<String> getDomains() {
-        synchronized (LOG) {
-            if (domains == null) {
-                domains = domainOps.list().stream().map(Domain::getKey).sorted().collect(Collectors.toList());
-                domains.add(0, SyncopeConstants.MASTER_DOMAIN);
-            }
-        }
-        return domains;
-    }
-
     public ExternalResourceProvider getResourceProvider() {
         return resourceProvider;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoConstants.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoConstants.java
index fd2819d..52c9932 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoConstants.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoConstants.java
@@ -72,6 +72,8 @@ public final class IdRepoConstants {
 
     public static final String PREF_NETWORK_SERVICE_PAGINATOR_ROWS = "network.service.paginator.rows";
 
+    public static final String PREF_DOMAIN_PAGINATOR_ROWS = "domain.paginator.rows";
+
     public static final String PREF_MAIL_TEMPLATE_PAGINATOR_ROWS = "mail.template.paginator.rows";
 
     public static final String PREF_PROPAGATION_TASKS_PAGINATOR_ROWS = "proagationtasks.paginator.rows";
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index a2379a3..3e55ccf 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -34,6 +34,7 @@ import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.Bas
 import org.apache.syncope.client.console.widgets.ExtAlertWidget;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.info.PlatformInfo;
 import org.apache.syncope.common.lib.info.SystemInfo;
 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
@@ -135,8 +136,7 @@ public class BasePage extends BaseWebPage {
                 }
             }
         };
-        MetaDataRoleAuthorizationStrategy.authorize(
-                dbExportLink, WebPage.RENDER, IdRepoEntitlement.INTERNAL_STORAGE_EXPORT);
+        MetaDataRoleAuthorizationStrategy.authorize(dbExportLink, WebPage.RENDER, IdRepoEntitlement.KEYMASTER);
         body.add(dbExportLink);
 
         // menu
@@ -199,6 +199,31 @@ public class BasePage extends BaseWebPage {
         idmPages.setOutputMarkupId(true);
         body.add(idmPages);
 
+        WebMarkupContainer keymasterLIContainer = new WebMarkupContainer(getLIContainerId("keymaster"));
+        body.add(keymasterLIContainer);
+        WebMarkupContainer keymasterULContainer = new WebMarkupContainer(getULContainerId("keymaster"));
+        keymasterLIContainer.add(keymasterULContainer);
+
+        if (SyncopeConstants.MASTER_DOMAIN.equals(SyncopeConsoleSession.get().getDomain())) {
+            liContainer = new WebMarkupContainer(getLIContainerId("domains"));
+            keymasterULContainer.add(liContainer);
+            link = BookmarkablePageLinkBuilder.build("domains", Domains.class);
+            MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.KEYMASTER);
+            liContainer.add(link);
+
+            liContainer = new WebMarkupContainer(getLIContainerId("networkservices"));
+            keymasterULContainer.add(liContainer);
+            link = BookmarkablePageLinkBuilder.build("networkservices", NetworkServices.class);
+            MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.KEYMASTER);
+            liContainer.add(link);
+        }
+
+        liContainer = new WebMarkupContainer(getLIContainerId("parameters"));
+        keymasterULContainer.add(liContainer);
+        link = BookmarkablePageLinkBuilder.build("parameters", Parameters.class);
+        MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.KEYMASTER);
+        liContainer.add(link);
+
         WebMarkupContainer confLIContainer = new WebMarkupContainer(getLIContainerId("configuration"));
         body.add(confLIContainer);
         WebMarkupContainer confULContainer = new WebMarkupContainer(getULContainerId("configuration"));
@@ -222,12 +247,6 @@ public class BasePage extends BaseWebPage {
         MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.LOG_LIST);
         liContainer.add(link);
 
-        liContainer = new WebMarkupContainer(getLIContainerId("networkServices"));
-        confULContainer.add(liContainer);
-        link = BookmarkablePageLinkBuilder.build("networkServices", NetworkServices.class);
-        MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.INTERNAL_STORAGE_EXPORT);
-        liContainer.add(link);
-
         liContainer = new WebMarkupContainer(getLIContainerId("types"));
         confULContainer.add(liContainer);
         link = BookmarkablePageLinkBuilder.build("types", Types.class);
@@ -255,12 +274,6 @@ public class BasePage extends BaseWebPage {
         MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.NOTIFICATION_LIST);
         liContainer.add(link);
 
-        liContainer = new WebMarkupContainer(getLIContainerId("parameters"));
-        confULContainer.add(liContainer);
-        link = BookmarkablePageLinkBuilder.build("parameters", Parameters.class);
-        MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, IdRepoEntitlement.INTERNAL_STORAGE_EXPORT);
-        liContainer.add(link);
-
         body.add(new AjaxLink<Void>("collapse") {
 
             private static final long serialVersionUID = -7978723352517770644L;
@@ -273,6 +286,7 @@ public class BasePage extends BaseWebPage {
                         : !(Boolean) SyncopeConsoleSession.get().getAttribute(Constants.MENU_COLLAPSE));
             }
         });
+
         body.add(new Label("domain", SyncopeConsoleSession.get().getDomain()));
 
         @SuppressWarnings("unchecked")
@@ -304,11 +318,15 @@ public class BasePage extends BaseWebPage {
         // set 'active' menu item for everything but extensions
         // 1. check if current class is set to top-level menu
         Component containingLI = body.get(getLIContainerId(getClass().getSimpleName().toLowerCase()));
-        // 2. if not, check if it is under 'Configuration'
+        // 2. if not, check if it is under 'Keymaster'
+        if (containingLI == null) {
+            containingLI = keymasterULContainer.get(getLIContainerId(getClass().getSimpleName().toLowerCase()));
+        }
+        // 3. if not, check if it is under 'Configuration'
         if (containingLI == null) {
             containingLI = confULContainer.get(getLIContainerId(getClass().getSimpleName().toLowerCase()));
         }
-        // 3. when found, set CSS coordinates for menu
+        // 4. when found, set CSS coordinates for menu
         if (containingLI != null) {
             containingLI.add(new Behavior() {
 
@@ -320,7 +338,29 @@ public class BasePage extends BaseWebPage {
                 }
             });
 
-            if (confULContainer.getId().equals(containingLI.getParent().getId())) {
+            if (keymasterULContainer.getId().equals(containingLI.getParent().getId())) {
+                keymasterULContainer.add(new Behavior() {
+
+                    private static final long serialVersionUID = -5775607340182293596L;
+
+                    @Override
+                    public void onComponentTag(final Component component, final ComponentTag tag) {
+                        tag.put("class", "treeview-menu menu-open");
+                        tag.put("style", "display: block;");
+                    }
+
+                });
+
+                keymasterLIContainer.add(new Behavior() {
+
+                    private static final long serialVersionUID = -5775607340182293596L;
+
+                    @Override
+                    public void onComponentTag(final Component component, final ComponentTag tag) {
+                        tag.put("class", "treeview active");
+                    }
+                });
+            } else if (confULContainer.getId().equals(containingLI.getParent().getId())) {
                 confULContainer.add(new Behavior() {
 
                     private static final long serialVersionUID = 3109256773218160485L;
@@ -376,8 +416,8 @@ public class BasePage extends BaseWebPage {
         extensionsLI.setVisible(!extPageClasses.isEmpty());
         body.add(extensionsLI);
 
-        ListView<Class<? extends BaseExtPage>> extPages = new ListView<Class<? extends BaseExtPage>>(
-                "extPages", extPageClasses) {
+        ListView<Class<? extends BaseExtPage>> extPages =
+                new ListView<Class<? extends BaseExtPage>>("extPages", extPageClasses) {
 
             private static final long serialVersionUID = 4949588177564901031L;
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Domains.java
similarity index 50%
copy from client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java
copy to client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Domains.java
index d0cc73d..a337a92 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Domains.java
@@ -18,46 +18,24 @@
  */
 package org.apache.syncope.client.console.pages;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.panels.NetworkServiceDirectoryPanel;
-import org.apache.syncope.common.keymaster.client.api.model.NetworkService;
-import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
-import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.syncope.client.console.panels.DomainDirectoryPanel;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
-public class NetworkServices extends BasePage {
+public class Domains extends BasePage {
 
-    private static final long serialVersionUID = -4562707092152823781L;
+    private static final long serialVersionUID = -4144386092487209655L;
 
-    public NetworkServices(final PageParameters parameters) {
+    public Domains(final PageParameters parameters) {
         super(parameters);
 
         body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
 
         WebMarkupContainer content = new WebMarkupContainer("content");
         content.setOutputMarkupId(true);
-        content.setMarkupId("networkServices");
-        content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()));
+        content.setMarkupId("domains");
+        content.add(new DomainDirectoryPanel("domainPanel", getPageReference()));
         body.add(content);
     }
-
-    private List<ITab> buildTabList() {
-        return Stream.of(NetworkService.Type.values()).
-                sorted().
-                map(type -> new AbstractTab(Model.of(type.name())) {
-
-            private static final long serialVersionUID = -5861786415855103549L;
-
-            @Override
-            public WebMarkupContainer getPanel(final String panelId) {
-                return new NetworkServiceDirectoryPanel(panelId, type, getPageReference());
-            }
-        }).collect(Collectors.toList());
-    }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Login.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
index bba025d..b78c793 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
@@ -25,7 +25,6 @@ import java.util.Locale;
 import org.apache.syncope.client.console.SyncopeWebApplication;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
-import org.apache.syncope.client.ui.commons.BaseApplication;
 import org.apache.syncope.client.ui.commons.BaseLogin;
 import org.apache.syncope.client.ui.commons.BaseSession;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -47,11 +46,6 @@ public class Login extends BaseLogin {
     }
 
     @Override
-    protected BaseApplication getBaseApplication() {
-        return SyncopeWebApplication.get();
-    }
-
-    @Override
     protected BaseSession getBaseSession() {
         return SyncopeConsoleSession.get();
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java
index d0cc73d..15422d8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/NetworkServices.java
@@ -42,7 +42,7 @@ public class NetworkServices extends BasePage {
 
         WebMarkupContainer content = new WebMarkupContainer("content");
         content.setOutputMarkupId(true);
-        content.setMarkupId("networkServices");
+        content.setMarkupId("networkservices");
         content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()));
         body.add(content);
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java
index 586cc54..2d7dee8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java
@@ -55,7 +55,11 @@ public class AbstractModalPanel<T extends Serializable> extends Panel
     protected final HeaderItem meta = new MetaHeaderItem("X-UA-Compatible", "IE=edge");
 
     public AbstractModalPanel(final BaseModal<T> modal, final PageReference pageRef) {
-        super(BaseModal.getContentId());
+        this(BaseModal.getContentId(), modal, pageRef);
+    }
+
+    public AbstractModalPanel(final String id, final BaseModal<T> modal, final PageReference pageRef) {
+        super(id);
         this.pageRef = pageRef;
         this.modal = modal;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.java
new file mode 100644
index 0000000..324eae7
--- /dev/null
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import java.util.Arrays;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.ui.commons.markup.html.form.EncryptedFieldPanel;
+import org.apache.syncope.common.keymaster.client.api.DomainOps;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
+import org.apache.syncope.common.lib.types.CipherAlgorithm;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+
+public class DomainAdminCredentialsPanel extends AbstractModalPanel<Domain> {
+
+    private static final long serialVersionUID = 2893133457496751451L;
+
+    @SpringBean
+    private DomainOps domainOps;
+
+    private final Domain domain;
+
+    public DomainAdminCredentialsPanel(
+            final Domain domain, final BaseModal<Domain> modal, final PageReference pageRef) {
+
+        super(modal, pageRef);
+        this.domain = domain;
+
+        AjaxDropDownChoicePanel<CipherAlgorithm> adminCipherAlgorithm = new AjaxDropDownChoicePanel<>(
+                "adminCipherAlgorithm", "adminCipherAlgorithm",
+                new PropertyModel<>(domain, "adminCipherAlgorithm"), false);
+        adminCipherAlgorithm.setChoices(Arrays.asList(CipherAlgorithm.values()));
+        adminCipherAlgorithm.addRequiredLabel();
+        adminCipherAlgorithm.setNullValid(false);
+        add(adminCipherAlgorithm);
+
+        EncryptedFieldPanel adminPassword = new EncryptedFieldPanel(
+                "adminPassword", "adminPassword", new PropertyModel<>(domain, "adminPassword"), false);
+        adminPassword.setRequired(true);
+        add(adminPassword);
+    }
+
+    @Override
+    public Domain getItem() {
+        return domain;
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target) {
+        try {
+            domainOps.changeAdminPassword(domain.getKey(), domain.getAdminPassword(), domain.getAdminCipherAlgorithm());
+
+            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+            this.modal.close(target);
+        } catch (Exception e) {
+            LOG.error("While updating domain", e);
+            SyncopeConsoleSession.get().error(
+                    StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
+        }
+        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+    }
+}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
new file mode 100644
index 0000000..597449f
--- /dev/null
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.IdRepoConstants;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.DomainDirectoryPanel.DomainProvider;
+import org.apache.syncope.client.console.rest.SyncopeRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.common.keymaster.client.api.DomainOps;
+import org.apache.syncope.common.keymaster.client.api.KeymasterException;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
+import org.apache.syncope.common.lib.types.IdRepoEntitlement;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+
+public class DomainDirectoryPanel extends DirectoryPanel<Domain, Domain, DomainProvider, SyncopeRestClient> {
+
+    private static final long serialVersionUID = -1039907608594680220L;
+
+    @SpringBean
+    private DomainOps domainOps;
+
+    private final BaseModal<Domain> utilityModal = new BaseModal<>("outer");
+
+    public DomainDirectoryPanel(final String id, final PageReference pageRef) {
+        super(id, pageRef);
+        disableCheckBoxes();
+
+        modal.size(Modal.Size.Large);
+
+        modal.setWindowClosedCallback(target -> {
+            updateResultTable(target);
+            modal.show(false);
+        });
+
+        addOuterObject(utilityModal);
+        utilityModal.setWindowClosedCallback(target -> {
+            updateResultTable(target);
+            modal.show(false);
+        });
+        utilityModal.size(Modal.Size.Small);
+        utilityModal.addSubmitButton();
+
+        addNewItemPanelBuilder(new DomainWizardBuilder(domainOps, new Domain(), pageRef), true);
+
+        initResultTable();
+
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, IdRepoEntitlement.KEYMASTER);
+    }
+
+    @Override
+    protected List<IColumn<Domain, String>> getColumns() {
+        List<IColumn<Domain, String>> columns = new ArrayList<>();
+        columns.add(new PropertyColumn<>(new StringResourceModel("key", this), "key", "key"));
+        columns.add(new PropertyColumn<>(
+                new StringResourceModel("jdbcURL", this), "jdbcURL", "jdbcURL"));
+        columns.add(new PropertyColumn<>(
+                new StringResourceModel("poolMaxActive", this), "poolMaxActive", "poolMaxActive"));
+        columns.add(new PropertyColumn<>(
+                new StringResourceModel("poolMinIdle", this), "poolMinIdle", "poolMinIdle"));
+        return columns;
+    }
+
+    @Override
+    protected ActionsPanel<Domain> getActions(final IModel<Domain> model) {
+        final ActionsPanel<Domain> panel = super.getActions(model);
+
+        panel.add(new ActionLink<Domain>() {
+
+            private static final long serialVersionUID = 7610801302168867641L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final Domain ignore) {
+                utilityModal.header(new ResourceModel("adjust.pool.size"));
+                utilityModal.setContent(new DomainPoolModalPanel(model.getObject(), utilityModal, pageRef));
+                utilityModal.show(true);
+                target.add(utilityModal);
+            }
+        }, ActionLink.ActionType.EDIT, IdRepoEntitlement.KEYMASTER);
+
+        panel.add(new ActionLink<Domain>() {
+
+            private static final long serialVersionUID = 7610801302168867641L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final Domain ignore) {
+                utilityModal.header(new ResourceModel("set.admin.credentials"));
+                utilityModal.setContent(new DomainAdminCredentialsPanel(model.getObject(), utilityModal, pageRef));
+                utilityModal.show(true);
+                target.add(utilityModal);
+            }
+        }, ActionLink.ActionType.PASSWORD_MANAGEMENT, IdRepoEntitlement.KEYMASTER);
+
+        panel.add(new ActionLink<Domain>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final Domain ignore) {
+                final Domain domain = model.getObject();
+                try {
+                    domainOps.delete(domain.getKey());
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (KeymasterException e) {
+                    LOG.error("While deleting {}", domain.getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, IdRepoEntitlement.KEYMASTER, true);
+
+        return panel;
+    }
+
+    @Override
+    protected DomainProvider dataProvider() {
+        return new DomainProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return IdRepoConstants.PREF_DOMAIN_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBatches() {
+        return Collections.<ActionLink.ActionType>emptyList();
+
+    }
+
+    protected final class DomainProvider extends DirectoryDataProvider<Domain> {
+
+        private static final long serialVersionUID = 8668261951640646188L;
+
+        private final SortableDataProviderComparator<Domain> comparator;
+
+        public DomainProvider(final int paginatorRows) {
+            super(paginatorRows);
+            setSort("key", SortOrder.ASCENDING);
+            comparator = new SortableDataProviderComparator<>(this);
+        }
+
+        @Override
+        public Iterator<? extends Domain> iterator(final long first, final long count) {
+            List<Domain> list = domainOps.list();
+            Collections.sort(list, comparator);
+            return list.subList((int) first, (int) first + (int) count).iterator();
+        }
+
+        @Override
+        public long size() {
+            return domainOps.list().size();
+        }
+
+        @Override
+        public IModel<Domain> model(final Domain object) {
+            return new IModel<Domain>() {
+
+                private static final long serialVersionUID = 8093553921710742624L;
+
+                @Override
+                public Domain getObject() {
+                    return object;
+                }
+            };
+        }
+    }
+}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainPoolModalPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainPoolModalPanel.java
new file mode 100644
index 0000000..ab6d303
--- /dev/null
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainPoolModalPanel.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.ui.commons.markup.html.form.AjaxSpinnerFieldPanel;
+import org.apache.syncope.common.keymaster.client.api.DomainOps;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+
+public class DomainPoolModalPanel extends AbstractModalPanel<Domain> {
+
+    private static final long serialVersionUID = -2676426626979352532L;
+
+    @SpringBean
+    private DomainOps domainOps;
+
+    private final Domain domain;
+
+    public DomainPoolModalPanel(final Domain domain, final BaseModal<Domain> modal, final PageReference pageRef) {
+        super(modal, pageRef);
+        this.domain = domain;
+
+        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).build(
+                "poolMaxActive",
+                "poolMaxActive",
+                Integer.class,
+                new PropertyModel<>(domain, "poolMaxActive")).setRequired(true));
+        add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).build(
+                "poolMinIdle",
+                "poolMinIdle",
+                Integer.class,
+                new PropertyModel<>(domain, "poolMinIdle")).setRequired(true));
+    }
+
+    @Override
+    public Domain getItem() {
+        return domain;
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target) {
+        try {
+            domainOps.adjustPoolSize(domain.getKey(), domain.getPoolMaxActive(), domain.getPoolMinIdle());
+
+            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+            this.modal.close(target);
+        } catch (Exception e) {
+            LOG.error("While updating domain", e);
+            SyncopeConsoleSession.get().error(
+                    StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
+        }
+        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+    }
+}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainWizardBuilder.java
new file mode 100644
index 0000000..84b8874
--- /dev/null
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainWizardBuilder.java
@@ -0,0 +1,233 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.syncope.client.console.wicket.markup.html.form.JsonEditorPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.XMLEditorPanel;
+import org.apache.syncope.client.console.wizards.BaseAjaxWizardBuilder;
+import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.ui.commons.markup.html.form.AjaxCheckBoxPanel;
+import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.ui.commons.markup.html.form.AjaxSpinnerFieldPanel;
+import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.client.ui.commons.markup.html.form.EncryptedFieldPanel;
+import org.apache.syncope.common.keymaster.client.api.DomainOps;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
+import org.apache.syncope.common.lib.types.CipherAlgorithm;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.extensions.wizard.WizardModel;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+
+public class DomainWizardBuilder extends BaseAjaxWizardBuilder<Domain> {
+
+    private static final long serialVersionUID = -6731030158762705250L;
+
+    private static final List<String> JDBC_DRIVERS = Arrays.asList(
+            "org.postgresql.Driver",
+            "com.mysql.cj.jdbc.Driver",
+            "org.mariadb.jdbc.Driver",
+            "com.microsoft.sqlserver.jdbc.SQLServerDriver",
+            "oracle.jdbc.OracleDriver",
+            "org.h2.Driver");
+
+    private static final List<String> DATABASE_PLATFORMS = Arrays.asList(
+            "org.apache.openjpa.jdbc.sql.PostgresDictionary",
+            "org.apache.openjpa.jdbc.sql.MySQLDictionary(blobTypeName=LONGBLOB,dateFractionDigits=3)",
+            "org.apache.openjpa.jdbc.sql.MariaDBDictionary(blobTypeName=LONGBLOB,dateFractionDigits=3)",
+            "org.apache.openjpa.jdbc.sql.SQLServerDictionary",
+            "org.apache.openjpa.jdbc.sql.OracleDictionary",
+            "org.apache.openjpa.jdbc.sql.H2Dictionary");
+
+    private final DomainOps domainOps;
+
+    public DomainWizardBuilder(final DomainOps domainOps, final Domain domain, final PageReference pageRef) {
+        super(domain, pageRef);
+        this.domainOps = domainOps;
+    }
+
+    @Override
+    protected Serializable onApplyInternal(final Domain domain) {
+        domainOps.create(domain);
+        return domain;
+    }
+
+    @Override
+    protected WizardModel buildModelSteps(final Domain domain, final WizardModel wizardModel) {
+        wizardModel.add(new Storage(domain));
+        wizardModel.add(new AdminCredentials(domain));
+        wizardModel.add(new Content(domain));
+        wizardModel.add(new KeymasterConfParams(domain));
+        return wizardModel;
+    }
+
+    public class Storage extends WizardStep {
+
+        private static final long serialVersionUID = 3671044119870133102L;
+
+        public Storage(final Domain domain) {
+            add(new AjaxTextFieldPanel(
+                    "key",
+                    "key",
+                    new PropertyModel<>(domain, "key")).setRequired(true));
+
+            AjaxDropDownChoicePanel<String> jdbcDriver = new AjaxDropDownChoicePanel<>(
+                    "jdbcDriver", "jdbcDriver", new PropertyModel<>(domain, "jdbcDriver"), false);
+            jdbcDriver.setChoices(JDBC_DRIVERS);
+            jdbcDriver.addRequiredLabel();
+            jdbcDriver.setNullValid(false);
+            add(jdbcDriver);
+
+            add(new AjaxTextFieldPanel(
+                    "jdbcURL",
+                    "jdbcURL",
+                    new PropertyModel<>(domain, "jdbcURL")).setRequired(true));
+
+            add(new AjaxTextFieldPanel(
+                    "dbSchema",
+                    "dbSchema",
+                    new PropertyModel<>(domain, "dbSchema")).setRequired(false));
+
+            add(new AjaxTextFieldPanel(
+                    "dbUsername",
+                    "dbUsername",
+                    new PropertyModel<>(domain, "dbUsername")).setRequired(true));
+            add(new EncryptedFieldPanel(
+                    "dbPassword", "dbPassword", new PropertyModel<>(domain, "dbPassword"), false));
+
+            AjaxDropDownChoicePanel<Domain.TransactionIsolation> transactionIsolation = new AjaxDropDownChoicePanel<>(
+                    "transactionIsolation", "transactionIsolation",
+                    new PropertyModel<>(domain, "transactionIsolation"), false);
+            transactionIsolation.setChoices(Arrays.asList(Domain.TransactionIsolation.values()));
+            transactionIsolation.addRequiredLabel();
+            transactionIsolation.setNullValid(false);
+            add(transactionIsolation);
+
+            add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).build(
+                    "poolMaxActive",
+                    "poolMaxActive",
+                    Integer.class,
+                    new PropertyModel<>(domain, "poolMaxActive")).setRequired(true));
+            add(new AjaxSpinnerFieldPanel.Builder<Integer>().min(0).build(
+                    "poolMinIdle",
+                    "poolMinIdle",
+                    Integer.class,
+                    new PropertyModel<>(domain, "poolMinIdle")).setRequired(true));
+
+            add(new AjaxTextFieldPanel(
+                    "auditSql",
+                    "auditSql",
+                    new PropertyModel<>(domain, "auditSql")).setRequired(true));
+
+            add(new AjaxTextFieldPanel(
+                    "orm",
+                    "orm",
+                    new PropertyModel<>(domain, "orm")).setRequired(true));
+
+            AjaxDropDownChoicePanel<String> databasePlatform = new AjaxDropDownChoicePanel<>(
+                    "databasePlatform", "databasePlatform", new PropertyModel<>(domain, "databasePlatform"), false);
+            databasePlatform.setChoices(DATABASE_PLATFORMS);
+            databasePlatform.addRequiredLabel();
+            databasePlatform.setNullValid(false);
+            add(databasePlatform);
+        }
+    }
+
+    public class AdminCredentials extends WizardStep {
+
+        private static final long serialVersionUID = -7472243942630790243L;
+
+        public AdminCredentials(final Domain domain) {
+            AjaxDropDownChoicePanel<CipherAlgorithm> adminCipherAlgorithm = new AjaxDropDownChoicePanel<>(
+                    "adminCipherAlgorithm", "adminCipherAlgorithm",
+                    new PropertyModel<>(domain, "adminCipherAlgorithm"), false);
+            adminCipherAlgorithm.setChoices(Arrays.asList(CipherAlgorithm.values()));
+            adminCipherAlgorithm.addRequiredLabel();
+            adminCipherAlgorithm.setNullValid(false);
+            add(adminCipherAlgorithm);
+
+            EncryptedFieldPanel adminPassword = new EncryptedFieldPanel(
+                    "adminPassword", "adminPassword", new PropertyModel<>(domain, "adminPassword"), false);
+            adminPassword.setRequired(true);
+            add(adminPassword);
+        }
+    }
+
+    public class Content extends WizardStep {
+
+        private static final long serialVersionUID = -4214163958296844853L;
+
+        public Content(final Domain domain) {
+            XMLEditorPanel content = new XMLEditorPanel(
+                    null, new PropertyModel<>(domain, "content"), false, pageRef);
+            content.setOutputMarkupPlaceholderTag(true);
+            content.setVisible(false);
+            add(content);
+
+            AjaxCheckBoxPanel defaultContent = new AjaxCheckBoxPanel(
+                    "defaultContent", "defaultContent", Model.of(true), true);
+            defaultContent.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                private static final long serialVersionUID = -1107858522700306810L;
+
+                @Override
+                protected void onUpdate(final AjaxRequestTarget target) {
+                    content.setVisible(!BooleanUtils.toBoolean(defaultContent.getField().getConvertedInput()));
+                    target.add(content);
+                }
+            });
+            add(defaultContent);
+        }
+    }
+
+    public class KeymasterConfParams extends WizardStep {
+
+        private static final long serialVersionUID = -8448363577805933925L;
+
+        public KeymasterConfParams(final Domain domain) {
+            JsonEditorPanel keymasterConfParams = new JsonEditorPanel(
+                    null, new PropertyModel<>(domain, "keymasterConfParams"), false, pageRef);
+            keymasterConfParams.setOutputMarkupPlaceholderTag(true);
+            keymasterConfParams.setVisible(false);
+            add(keymasterConfParams);
+
+            AjaxCheckBoxPanel defaultKeymasterConfParams = new AjaxCheckBoxPanel(
+                    "defaultKeymasterConfParams", "defaultKeymasterConfParams", Model.of(true), true);
+            defaultKeymasterConfParams.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                private static final long serialVersionUID = -6139318907146065915L;
+
+                @Override
+                protected void onUpdate(final AjaxRequestTarget target) {
+                    keymasterConfParams.setVisible(
+                            !BooleanUtils.toBoolean(defaultKeymasterConfParams.getField().getConvertedInput()));
+                    target.add(keymasterConfParams);
+                }
+            });
+            add(defaultKeymasterConfParams);
+        }
+    }
+}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
index 85e31dd..17f7af5 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
@@ -28,6 +28,7 @@ import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import org.apache.syncope.client.console.wizards.any.GroupWrapper;
 import org.apache.syncope.client.ui.commons.wizards.any.UserWrapper;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.Attr;
 import org.apache.syncope.common.lib.to.EntityTO;
@@ -190,6 +191,8 @@ public abstract class TogglePanel<T extends Serializable> extends WizardMgtPanel
                     ? ((JobTO) modelObject).getRefDesc() : ((JobTO) modelObject).getRefKey();
         } else if (modelObject instanceof ToggleableTarget) {
             key = ((ToggleableTarget) modelObject).getKey();
+        } else if (modelObject instanceof Domain) {
+            key = ((Domain) modelObject).getKey();
         } else {
             key = new ResourceModel("actions", StringUtils.EMPTY).getObject();
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
index 3174c62..868d9e1 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
@@ -66,8 +66,8 @@ public class ReportTemplateDirectoryPanel
 
     protected final BaseModal<String> utilityModal = new BaseModal<>("outer");
 
-    public ReportTemplateDirectoryPanel(final String id, final PageReference pageReference) {
-        super(id, pageReference, true);
+    public ReportTemplateDirectoryPanel(final String id, final PageReference pageRef) {
+        super(id, pageRef);
         disableCheckBoxes();
 
         modal.size(Modal.Size.Small);
@@ -99,7 +99,7 @@ public class ReportTemplateDirectoryPanel
             public WizardModalPanel<ReportTemplateTO> build(
                     final String id, final int index, final AjaxWizard.Mode mode) {
 
-                return new TemplateModal<>(modal, restClient, new ReportTemplateTO(), pageReference);
+                return new TemplateModal<>(modal, restClient, new ReportTemplateTO(), pageRef);
             }
         }, true);
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
index 3ceb127..3c86969 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
@@ -68,7 +68,6 @@ public class ReportWizardBuilder extends BaseAjaxWizardBuilder<ReportTO> {
         private static final long serialVersionUID = -3043839139187792810L;
 
         public Profile(final ReportTO reportTO) {
-
             AjaxTextFieldPanel name = new AjaxTextFieldPanel(
                     "name", "name", new PropertyModel<>(reportTO, "name"), false);
             name.addRequiredLabel();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
index 50ff530..9c434a5 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
@@ -50,6 +50,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.syncope.client.console.panels.ToggleableTarget;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
 
 public class ActionLinksTogglePanel<T extends Serializable> extends TogglePanel<Serializable> {
 
@@ -118,8 +119,8 @@ public class ActionLinksTogglePanel<T extends Serializable> extends TogglePanel<
                     ? ((JobTO) modelObject).getRefDesc() : ((JobTO) modelObject).getRefKey();
         } else if (modelObject instanceof ToggleableTarget) {
             header = ((ToggleableTarget) modelObject).getAnyType();
-        } else if (modelObject instanceof EntityTO) {
-            header = ((EntityTO) modelObject).getKey();
+        } else if (modelObject instanceof Domain) {
+            header = ((Domain) modelObject).getKey();
         } else {
             header = new ResourceModel("actions", StringUtils.EMPTY).getObject();
         }
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
index c6ec2c3..b9826b3 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
@@ -74,4 +74,6 @@ timeout=Operation is taking too long: it will be executed in background. Please
 security=Security
 before=Before
 after=After
-networkServices=Network Services
+networkservices=Network Services
+keymaster=Keymaster
+domains=Domains
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
index cb11db3..5dbcbe1 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
@@ -74,4 +74,6 @@ timeout=L'operazione sta durando troppo: sar\u00e0 eseguita in background. Verif
 security=Sicurezza
 before=Prima
 after=Dopo
-networkServices=Servizi di Rete
+networkservices=Servizi di Rete
+keymaster=Keymaster
+domains=Domini
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
index 8ea9b6b..d6874c3 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
@@ -72,4 +72,6 @@ timeout=\u64cd\u4f5c\u306b\u9577\u6642\u9593\u304b\u304b\u3063\u3066\u3044\u307e
 security=Security
 before=Before
 after=After
-networkServices=Network Services
+networkservices=Network Services
+keymaster=Keymaster
+domains=Domains
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
index 0fe6396..4da4f99 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
@@ -74,4 +74,6 @@ timeout=Operation is taking too long: it will be executed in background. Please
 security=Security
 before=Before
 after=After
-networkServices=Network Services
+networkservices=Network Services
+keymaster=Keymaster
+domains=Domains
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
index d19cc40..6d3c060 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
@@ -73,4 +73,6 @@ timeout=Operation is taking too long: it will be executed in background. Please
 security=Security
 before=Before
 after=After
-networkServices=Network Services
+networkservices=Network Services
+keymaster=Keymaster
+domains=Domains
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
index 13dc038..c38ee0d 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
@@ -117,15 +117,21 @@ under the License.
                 <a href="#" wicket:id="idmPage"><i wicket:id="idmPageIcon"></i><span wicket:id="idmPageLabel"/></a>
               </li>
             </wicket:container>
+            <li wicket:id="keymasterLI" class="treeview">
+              <a href="#"><i class="fa fa-magic"></i><span><wicket:message key="keymaster"/></span> <span class="pull-right-container"><i class="fa fa-angle-left pull-right"></i></span></a>
+              <ul wicket:id="keymasterUL" class="treeview-menu">
+                <li wicket:id="domainsLI"><a href="#" wicket:id="domains"><i class="fa fa-code-fork"></i><wicket:message key="domains"/></a></li>
+                <li wicket:id="networkservicesLI"><a href="#" wicket:id="networkservices"><i class="fa fa-server"></i><wicket:message key="networkservices"/></a></li>
+                <li wicket:id="parametersLI"><a href="#" wicket:id="parameters"><i class="fa fa-cog"></i><wicket:message key="parameters"/></a></li>
+              </ul>
+            </li>
             <li wicket:id="configurationLI" class="treeview">
               <a href="#"><i class="fa fa-edit"></i><span><wicket:message key="configuration"/></span> <span class="pull-right-container"><i class="fa fa-angle-left pull-right"></i></span></a>
               <ul wicket:id="configurationUL" class="treeview-menu">
                 <li wicket:id="auditLI"><a href="#" wicket:id="audit"><i class="fa fa-check-square-o"></i><wicket:message key="audit"/></a></li>
                 <li wicket:id="implementationsLI"><a href="#" wicket:id="implementations"><i class="fa fa-file-code-o"></i><wicket:message key="implementations"/></a></li>
                 <li wicket:id="logsLI"><a href="#" wicket:id="logs"><i class="fa fa-file-text-o"></i><wicket:message key="logs"/></a></li>
-                <li wicket:id="networkServicesLI"><a href="#" wicket:id="networkServices"><i class="fa fa-server"></i><wicket:message key="networkServices"/></a></li>
                 <li wicket:id="notificationsLI"><a href="#" wicket:id="notifications"><i class="fa fa-envelope-o"></i><wicket:message key="notifications"/></a></li>
-                <li wicket:id="parametersLI"><a href="#" wicket:id="parameters"><i class="fa fa-cog"></i><wicket:message key="parameters"/></a></li>
                 <li wicket:id="policiesLI"><a href="#" wicket:id="policies"><i class="fa fa-list"></i><wicket:message key="policies"/></a></li>
                 <li wicket:id="securityLI"><a href="#" wicket:id="security"><i class="fa fa-lock"></i><wicket:message key="security"/></a></li>
                 <li wicket:id="typesLI"><a href="#" wicket:id="types"><i class="fa fa-wrench"></i><wicket:message key="types"/></a></li>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/Domains.html
similarity index 62%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/Domains.html
index 2c1b7bb..1c6fa24 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/Domains.html
@@ -18,13 +18,19 @@ under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:extend>
-    <wicket:enclosure child="field-label">
-      <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
-      <span wicket:id="jexlInfo" class="glyphicon glyphicon-info-sign" style="cursor: pointer"></span>
-      <span wicket:id="externalAction"/>
-    </wicket:enclosure>
-    <fieldset class="input-group">
-      <input type="text" class="form-control" wicket:id="textField" placeholder=""/>
-    </fieldset>
+    <section class="content-header">
+      <h1>&nbsp;</h1>
+      <ol class="breadcrumb">
+        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"/></a></li>
+        <li class="active"><wicket:message key="keymaster"/></li>
+        <li class="active"><wicket:message key="domains"/></li>
+      </ol>
+    </section>
+
+    <section class="content" wicket:id="content">
+      <div class="box">
+        <div class="box-body" wicket:id="domainPanel"/>
+      </div>
+    </section>
   </wicket:extend>
-</html>
+</html>
\ No newline at end of file
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/NetworkServices.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/NetworkServices.html
index 4645abf..da05fe8 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/NetworkServices.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/NetworkServices.html
@@ -22,8 +22,8 @@ under the License.
       <h1>&nbsp;</h1>
       <ol class="breadcrumb">
         <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"></wicket:message></a></li>
-        <li class="active"><wicket:message key="configuration"/></li>
-        <li class="active"><wicket:message key="networkServices"></wicket:message></li>
+        <li class="active"><wicket:message key="keymaster"/></li>
+        <li class="active"><wicket:message key="networkservices"></wicket:message></li>
       </ol>
     </section>
 
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/Parameters.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/Parameters.html
index 08fa4ba..ef3003f 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/Parameters.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/pages/Parameters.html
@@ -22,7 +22,7 @@ under the License.
       <h1>&nbsp;</h1>
       <ol class="breadcrumb">
         <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"/></a></li>
-        <li class="active"><wicket:message key="configuration"/></li>
+        <li class="active"><wicket:message key="keymaster"/></li>
         <li class="active"><wicket:message key="parameters"/></li>
       </ol>
     </section>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.html
similarity index 80%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.html
index 7471fed..f243622 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/DefaultPreviewer.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.html
@@ -16,10 +16,11 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:extend>
-    <div style="padding: 8px 0px 1px 10px">
-      <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
+    <div class="form-group">
+      <span wicket:id="adminCipherAlgorithm"/>
+      <span wicket:id="adminPassword"/>
     </div>
   </wicket:extend>
 </html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel.properties
similarity index 50%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel.properties
index 193287d..2b3d928 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_pt_BR.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel.properties
@@ -14,4 +14,27 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-confirmMessage=This will remove the current value. Continue?
+jdbcURL=JDBC URL
+maxPoolSize=Pool size: Max
+minIdle=Pool size: Min
+adjust.pool.size=Adjust pool size
+set.admin.credentials=Set admin credentials
+edit.title=adjust pool size
+password_management.title=set admin credentials
+poolMaxActive=Pool: Max active connections
+poolMinIdle=Pool: Min idle connections
+adminCipherAlgorithm=Cipher Algorithm
+adminPassword=Password (encoded)
+any.new=New domain
+jdbcDriver=JDBC Driver
+dbSchema=Database schema
+dbUsername=Database username
+dbPassword=Database password
+transactionIsolation=Transaction isolation
+auditSql=Audit SQL init
+orm=ORM
+databasePlatform=Database platform
+content=Initial content
+keymasterConfParams=Initial conf params
+defaultContent=Leave default content
+defaultKeymasterConfParams=Leave default conf params
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_it.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_it.properties
new file mode 100644
index 0000000..a84d8d6
--- /dev/null
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_it.properties
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+jdbcURL=URL JDBC
+maxPoolSize=Pool size: Max
+minIdle=Pool size: Min
+adjust.pool.size=Imposta la dimensione del pool
+set.admin.credentials=Imposta le credenziali di admin
+edit.title=imposta la dimensione del pool
+password_management.title=Imposta le credenziali di admin
+poolMaxActive=Pool: Max active connections
+poolMinIdle=Pool: Min idle connections
+adminCipherAlgorithm=Algoritmo di cifratura
+adminPassword=Password (codificata)
+any.new=Nuovo dominio
+jdbcDriver=Driver JDBC
+dbSchema=Schema database
+dbUsername=Username database
+dbPassword=Password database
+transactionIsolation=Isolamento transazioni
+auditSql=Audit SQL init
+orm=ORM
+databasePlatform=Piattaforma database
+content=Contenuto iniziale
+keymasterConfParams=Parametri iniziali
+defaultContent=Contenuto iniziale predefinito
+defaultKeymasterConfParams=Parametri iniziali predefiniti
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_ja.properties
similarity index 50%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_ja.properties
index 807c589..2b3d928 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ja.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_ja.properties
@@ -14,4 +14,27 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-confirmMessage=\u3053\u308c\u306f\u73fe\u5728\u306e\u5024\u3092\u524a\u9664\u3057\u307e\u3059\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b?
+jdbcURL=JDBC URL
+maxPoolSize=Pool size: Max
+minIdle=Pool size: Min
+adjust.pool.size=Adjust pool size
+set.admin.credentials=Set admin credentials
+edit.title=adjust pool size
+password_management.title=set admin credentials
+poolMaxActive=Pool: Max active connections
+poolMinIdle=Pool: Min idle connections
+adminCipherAlgorithm=Cipher Algorithm
+adminPassword=Password (encoded)
+any.new=New domain
+jdbcDriver=JDBC Driver
+dbSchema=Database schema
+dbUsername=Database username
+dbPassword=Database password
+transactionIsolation=Transaction isolation
+auditSql=Audit SQL init
+orm=ORM
+databasePlatform=Database platform
+content=Initial content
+keymasterConfParams=Initial conf params
+defaultContent=Leave default content
+defaultKeymasterConfParams=Leave default conf params
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_pt_BR.properties
similarity index 50%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_pt_BR.properties
index 193287d..2b3d928 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_pt_BR.properties
@@ -14,4 +14,27 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-confirmMessage=This will remove the current value. Continue?
+jdbcURL=JDBC URL
+maxPoolSize=Pool size: Max
+minIdle=Pool size: Min
+adjust.pool.size=Adjust pool size
+set.admin.credentials=Set admin credentials
+edit.title=adjust pool size
+password_management.title=set admin credentials
+poolMaxActive=Pool: Max active connections
+poolMinIdle=Pool: Min idle connections
+adminCipherAlgorithm=Cipher Algorithm
+adminPassword=Password (encoded)
+any.new=New domain
+jdbcDriver=JDBC Driver
+dbSchema=Database schema
+dbUsername=Database username
+dbPassword=Database password
+transactionIsolation=Transaction isolation
+auditSql=Audit SQL init
+orm=ORM
+databasePlatform=Database platform
+content=Initial content
+keymasterConfParams=Initial conf params
+defaultContent=Leave default content
+defaultKeymasterConfParams=Leave default conf params
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_ru.properties
similarity index 50%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_ru.properties
index 13be74d..2b3d928 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_it.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainDirectoryPanel_ru.properties
@@ -14,4 +14,27 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-confirmMessage=Questa azione rimuover\u00e0 il valore corrente. Continuare?
+jdbcURL=JDBC URL
+maxPoolSize=Pool size: Max
+minIdle=Pool size: Min
+adjust.pool.size=Adjust pool size
+set.admin.credentials=Set admin credentials
+edit.title=adjust pool size
+password_management.title=set admin credentials
+poolMaxActive=Pool: Max active connections
+poolMinIdle=Pool: Min idle connections
+adminCipherAlgorithm=Cipher Algorithm
+adminPassword=Password (encoded)
+any.new=New domain
+jdbcDriver=JDBC Driver
+dbSchema=Database schema
+dbUsername=Database username
+dbPassword=Database password
+transactionIsolation=Transaction isolation
+auditSql=Audit SQL init
+orm=ORM
+databasePlatform=Database platform
+content=Initial content
+keymasterConfParams=Initial conf params
+defaultContent=Leave default content
+defaultKeymasterConfParams=Leave default conf params
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainPoolModalPanel.html
similarity index 84%
rename from client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainPoolModalPanel.html
index c2ec0a9..a82bd45 100644
--- a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainPoolModalPanel.html
@@ -17,7 +17,10 @@ specific language governing permissions and limitations
 under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <label wicket:id="label"/>
-  </wicket:panel>
+  <wicket:extend>
+    <div class="form-group">
+      <span wicket:id="poolMaxActive"/>
+      <span wicket:id="poolMinIdle"/>
+    </div>
+  </wicket:extend>
 </html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$AdminCredentials.html
similarity index 83%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$AdminCredentials.html
index 249ac51..8cbf977 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/preview/AbstractBinaryPreviewer.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$AdminCredentials.html
@@ -16,8 +16,9 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" >
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:panel>
-    <wicket:child/>
+    <div wicket:id="adminCipherAlgorithm"/>
+    <div wicket:id="adminPassword"/>
   </wicket:panel>
 </html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$Content.html
similarity index 92%
copy from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
copy to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$Content.html
index c2ec0a9..28df851 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$Content.html
@@ -18,6 +18,7 @@ under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:panel>
-    <label wicket:id="label"/>
+    <div wicket:id="defaultContent"/>
+    <div wicket:id="content"/>
   </wicket:panel>
 </html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$KeymasterConfParams.html
similarity index 91%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$KeymasterConfParams.html
index c2ec0a9..ce9e935 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/LabelPanel.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$KeymasterConfParams.html
@@ -18,6 +18,7 @@ under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:panel>
-    <label wicket:id="label"/>
+    <div wicket:id="defaultKeymasterConfParams"/>
+    <div wicket:id="content"/>
   </wicket:panel>
 </html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$Storage.html
similarity index 68%
rename from client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html
rename to client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$Storage.html
index 7adf2a0..2ad3372 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/any/PasswordPanel.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/DomainWizardBuilder$Storage.html
@@ -18,16 +18,17 @@ under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:panel>
-    <form wicket:id="passwordInnerForm">
-      <div class="form-group">
-        <span wicket:id="password"/>
-      </div>
-      <div class="form-group">
-        <span wicket:id="confirmPassword"/>
-      </div>
-      <div class="form-group">
-        <span wicket:id="storePasswordInSyncope"/>
-      </div>
-    </form>
+    <div wicket:id="key"/>
+    <div wicket:id="jdbcDriver"/>
+    <div wicket:id="jdbcURL"/>
+    <div wicket:id="dbSchema"/>
+    <div wicket:id="dbUsername"/>
+    <div wicket:id="dbPassword"/>
+    <div wicket:id="transactionIsolation"/>
+    <div wicket:id="poolMaxActive"/>
+    <div wicket:id="poolMinIdle"/>
+    <div wicket:id="auditSql"/>
+    <div wicket:id="orm"/>
+    <div wicket:id="databasePlatform"/>
   </wicket:panel>
 </html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html
deleted file mode 100644
index 1fd3275..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AbstractFieldPanel.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <wicket:fragment wicket:id="requiredFragment">
-      <span wicket:id="requiredLabel"/>
-    </wicket:fragment>
-
-    <wicket:fragment wicket:id="externalActionFragment">
-      <span wicket:id="externalAction"/>
-    </wicket:fragment>
-
-    <wicket:fragment wicket:id="emptyFragment">
-    </wicket:fragment>
-
-    <wicket:child/>
-  </wicket:panel>
-</html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html
deleted file mode 100644
index c4b3da7..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:extend>
-    <wicket:enclosure child="field-label">
-      <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
-      <span wicket:id="externalAction"/>
-    </wicket:enclosure>
-    <fieldset class="input-group">
-      <select wicket:id="dropDownChoiceField" />
-    </fieldset>
-  </wicket:extend>
-</html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html
deleted file mode 100644
index 633a310..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:extend>
-    <form wicket:id="form">
-      <div class="form-group input-group">
-        <span wicket:id="filter">[FILTER]</span>
-        <span class="input-group-addon">
-          <a href="#" wicket:id="search"><i class="glyphicon glyphicon-search"></i></a>
-        </span>
-      </div>
-    </form>
-    <wicket:enclosure child="field-label">
-      <div><label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/></div>
-      <span wicket:id="externalAction"/>
-    </wicket:enclosure>
-    <fieldset class="input-group">
-      <span wicket:id="paletteField">[Palette]</span>
-    </fieldset>
-  </wicket:extend>
-</html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html
deleted file mode 100644
index 56c60a8..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxSpinnerFieldPanel.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:head>
-    <style type="text/css">
-      .input-group .ui-spinner {
-        width: 100%;
-      }
-      .ui-state-default .ui-icon {
-        background-image: url("../../webjars/jquery-ui/${jquery-ui.version}/images/ui-icons_222222_256x240.png");
-      }
-    </style>
-  </wicket:head>
-  <wicket:extend>
-    <wicket:enclosure child="field-label">
-      <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
-      <span wicket:id="externalAction"/>
-    </wicket:enclosure>
-    <fieldset class="input-group">
-      <input wicket:id="spinner"/>
-    </fieldset>
-  </wicket:extend>
-</html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html
deleted file mode 100644
index 632307d..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:extend>
-    <wicket:enclosure child="field-label">
-      <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
-      <span wicket:id="externalAction"/>
-    </wicket:enclosure>
-    <div class="input-group input-group-sm">
-      <span class="input-group-btn">  
-        <button type="button" class="btn btn-warning btn-flat"
-                wicket:message="confirm:confirmMessage"
-                onclick="var pwd = $(this).parent().next('input');
-                    var children = $(this).children();
-                    var confirmMessage = $(this).attr('confirm');
-                    if (pwd.is('[readonly]')) {
-                      if (pwd.val() === '') {
-                        pwd.removeAttr('readonly');
-                        children.attr('class', 'fa fa-unlock');
-                      } else {
-                        bootbox.confirm(confirmMessage, function (result) {
-                          if (result === true) {
-                            pwd.removeAttr('readonly');
-                            pwd.val('');
-                            children.attr('class', 'fa fa-unlock');
-                          }
-                          return true;
-                        });
-                      }
-                    }
-                "><i class="fa fa-lock"></i></button>
-      </span>
-      <input type="password" class="form-control" wicket:id="encryptedField" readonly="true"/>
-      <span class="input-group-btn">  
-        <button type="button" class="btn btn-primary btn-flat"
-                onmousedown="var pwd = $(this).parent().prev('input');
-                    if (!pwd.is('[readonly]')) {
-                      pwd.attr('type', 'text');
-                      $(this).children().attr('class', 'fa fa-eye-slash');
-                    }"
-                onmouseup="var pwd = $(this).parent().prev('input');
-                    if (!pwd.is('[readonly]')) {
-                      pwd.attr('type', 'password');
-                      $(this).children().attr('class', 'fa fa-eye');
-                    }"
-                ><i class="fa fa-eye"></i></button>
-      </span>
-    </div>
-  </wicket:extend>
-</html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties
deleted file mode 100644
index 1c45ef7..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/EncryptedFieldPanel_ru.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# field.DateTimeFieldPanel$DateTimeFormValidator=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d0\u00b5 '${label0}' \u00d0\u00b4\u00d0\u00be\u00d0\u00bb\u00d0\u00b6\u00d0\u00bd\u00d0\u00be \u00d0\u00b1\u00d1\u008b\u00d1\u0082\u00d1\u008c \u00d0\u00b7\u00d0\u00b0\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d1\u008c\u00d1\u008e
-confirmMessage=This will remove the current value. Continue?
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html
deleted file mode 100644
index 79728da..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <input type="hidden" wicket:id="recorder"/>
-    <div class="col-md-5">
-      <div class="form-group">
-        <label>
-          <span wicket:id="availableHeader">[available header]</span>
-        </label>
-        <select class="form-control" style="min-width: 100px;" wicket:id="choices">[choices]</select>
-      </div>
-    </div>
-    <div style="width: 20px; float: left; padding-top: 30px; text-align: center">
-      <div style="padding-top: 2px;">
-        <a wicket:id="addAllButton"><i class="glyphicon glyphicon-forward"></i></a>
-      </div>
-      <div style="padding-top: 2px;">
-        <a wicket:id="removeAllButton"><i class="glyphicon glyphicon-backward"></i></a>
-      </div>
-      <div style="padding-top: 2px;">
-        <a wicket:id="addButton"><i class="glyphicon glyphicon-triangle-right"></i></a>
-      </div>
-      <div style="padding-top: 2px;">
-        <a wicket:id="removeButton"><i class="glyphicon glyphicon-triangle-left"></i></a>
-      </div>
-      <div style="padding-top: 2px;">
-        <a wicket:id="moveUpButton"><i class="glyphicon glyphicon-triangle-top"></i></a>
-      </div>
-      <div style="padding-top: 2px;">
-        <a wicket:id="moveDownButton"><i class="glyphicon glyphicon-triangle-bottom"></i></a>
-      </div>          
-    </div>
-    <div class="col-md-5">
-      <div class="form-group">
-        <label>
-          <span wicket:id="selectedHeader">[selected header]</span>
-        </label>
-        <select class="form-control" style="min-width: 100px;" wicket:id="selection">[selection]</select>	
-      </div>
-    </div>
-  </wicket:panel>
-</html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html
deleted file mode 100644
index 1d5a8a2..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/panels/NotificationPanel.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:head>
-    <style type="text/css">
-      div.position {
-        position: fixed;
-        right: 5px;
-        bottom: 20px;
-        width: auto;
-        z-index: 999999;
-      }
-    </style>
-  </wicket:head>
-  <wicket:panel>
-
-    <div id="appendto" class="position"></div>
-    <span wicket:id="feedback"></span>
-
-    <script id="errorTemplate" type="text/x-kendo-template">
-      <div class="alert alert-danger alert-dismissible" style="margin-bottom: 0px; min-width: 370px">
-      <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
-      <h4><i class="icon fa fa-ban"></i> Error!</h4>
-      #= message #     
-      </div>
-    </script>
-    
-    <script id="warningTemplate" type="text/x-kendo-template">
-      <div class="alert alert-warning alert-dismissible" style="margin-bottom: 0px; min-width: 370px">
-      <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
-      <h4><i class="icon fa fa-ban"></i> Warning!</h4>
-      #= message #     
-      </div>
-    </script>
-
-    <script id="successTemplate" type="text/x-kendo-template">
-      <div class="alert alert-success alert-dismissible" style="margin-bottom: 0px; min-width: 370px">
-      <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
-      <h4><i class="icon fa fa-check"></i> Success!</h4>
-      #= message #
-      </div>
-    </script>
-  </wicket:panel>
-</html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html
deleted file mode 100644
index 76ba597..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wicket/markup/html/bootstrap/tabs/Accordion.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <div class="panel box box-primary" wicket:id="tabs">
-      <div class="box-header with-border">
-        <h4  class="box-title">
-          <a wicket:id="title" class="accordion-toggle" data-toggle="collapse">Title</a>
-        </h4>
-      </div>
-      <div wicket:id="body" class="panel-collapse collapse">
-        <div class="box-body" wicket:id="content">Content</div>
-      </div>
-    </div>
-  </wicket:panel>
-</html>
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties
deleted file mode 100644
index cafa9d6..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-wizard.cancel.error = Wizard error on cancel
-wizard.apply.error = Wizard error on apply changes
-next=Next >
-previous=< Prev
-finish=Finish
-last=Last
-cancel=Cancel
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties
deleted file mode 100644
index 3230f79..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_it.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-wizard.cancel.error = Errore wizard in annullamento operazione
-wizard.apply.error = Errore wizard in fase di commit
-next=Succ >
-previous=< Prec
-finish=Termina
-last=Ultimo
-cancel=Annulla
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties
deleted file mode 100644
index 8c1969a..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ja.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-wizard.cancel.error = \u30ad\u30e3\u30f3\u30bb\u30eb\u6642\u306b\u30a6\u30a3\u30b6\u30fc\u30c9\u30a8\u30e9\u30fc
-wizard.apply.error = \u5909\u66f4\u306e\u9069\u7528\u6642\u306b\u30a6\u30a3\u30b6\u30fc\u30c9\u30a8\u30e9\u30fc
-next=\u6b21\u3078 >
-previous=< \u524d\u3078
-finish=\u5b8c\u4e86
-last=\u6700\u5f8c
-cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties
deleted file mode 100644
index 6cca386..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_pt_BR.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-wizard.cancel.error = Erro em assistente de cancelar
-wizard.apply.error = Assistente de erro em aplicar as altera\u00e7\u00f5es
-next=Segu >
-previous=< Prec
-finish=Terminar
-last=\u00daltimo
-cancel=Cancelar
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties
deleted file mode 100644
index af93f5a..0000000
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard_ru.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# wizard.cancel.error = Во время отмены произошла ошибка
-wizard.cancel.error = \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043c\u0435\u043d\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430
-# wizard.apply.error = Во время применения изменений произошла ошибка
-wizard.apply.error = \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430
-# next=Далее >
-next=\u0414\u0430\u043b\u0435\u0435 >
-# previous=< Назад
-previous=< \u041d\u0430\u0437\u0430\u0434
-# finish=Завершить
-finish=\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c
-# last=В конец
-last=\u0412 \u043a\u043e\u043d\u0435\u0446
-# cancel=Отмена
-cancel=\u041e\u0442\u043c\u0435\u043d\u0430
diff --git a/client/idrepo/enduser/pom.xml b/client/idrepo/enduser/pom.xml
index cda2a38..cfa8351 100644
--- a/client/idrepo/enduser/pom.xml
+++ b/client/idrepo/enduser/pom.xml
@@ -52,51 +52,6 @@ under the License.
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-log4j2</artifactId>
     </dependency>
-      
-    <dependency>
-      <groupId>org.apache.wicket</groupId>
-      <artifactId>wicket-auth-roles</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.wicket-jquery-ui</groupId>
-      <artifactId>wicket-jquery-ui</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.wicket-jquery-ui</groupId>
-      <artifactId>wicket-kendo-ui</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.wicket-jquery-ui</groupId>
-      <artifactId>wicket-kendo-ui-culture</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.wicket-jquery-ui</groupId>
-      <artifactId>wicket-kendo-ui-theme-bootstrap</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.wicket</groupId>
-      <artifactId>wicket-native-websocket-javax</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>de.agilecoders.wicket</groupId>
-      <artifactId>wicket-bootstrap-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>de.agilecoders.wicket</groupId>
-      <artifactId>wicket-bootstrap-extensions</artifactId>
-    </dependency>
-    
-    <dependency>
-      <groupId>org.apache.syncope.common.keymaster</groupId>
-      <artifactId>syncope-common-keymaster-client-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.syncope.client.idrepo</groupId>
-      <artifactId>syncope-client-idrepo-lib</artifactId>
-      <version>${project.version}</version>
-    </dependency>
     
     <dependency>
       <groupId>org.apache.syncope.client.idrepo</groupId>
@@ -105,11 +60,6 @@ under the License.
     </dependency>
 
     <dependency>
-      <groupId>org.apache.cxf</groupId>
-      <artifactId>cxf-rt-rs-security-jose</artifactId>
-    </dependency>
-
-    <dependency>
       <groupId>org.apache.pdfbox</groupId>
       <artifactId>pdfbox</artifactId>
     </dependency>
@@ -128,30 +78,14 @@ under the License.
     </dependency>
     <dependency>
       <groupId>org.webjars</groupId>
-      <artifactId>codemirror</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.webjars</groupId>
-      <artifactId>google-diff-match-patch</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.webjars</groupId>
       <artifactId>jsplumb</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.webjars.bower</groupId>
-      <artifactId>chart.js</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.webjars</groupId>
       <artifactId>jquery-cookie</artifactId>
     </dependency>
     <dependency>
       <groupId>org.webjars</groupId>
-      <artifactId>jquery-ui</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.webjars</groupId>
       <artifactId>jQuery-slimScroll</artifactId>
     </dependency>
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
index d1c2a2b..34dce75 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
@@ -34,7 +34,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
-import java.util.stream.Collectors;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.monitor.FileAlterationListener;
 import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
@@ -50,14 +49,10 @@ import org.apache.syncope.client.enduser.pages.MustChangePassword;
 import org.apache.syncope.client.enduser.pages.Self;
 import org.apache.syncope.client.enduser.pages.SelfConfirmPasswordReset;
 import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
-import org.apache.syncope.client.ui.commons.BaseApplication;
 import org.apache.syncope.client.ui.commons.SyncopeUIRequestCycleListener;
-import org.apache.syncope.common.keymaster.client.api.DomainOps;
 import org.apache.syncope.common.keymaster.client.api.model.NetworkService;
 import org.apache.syncope.common.keymaster.client.api.ServiceOps;
-import org.apache.syncope.common.keymaster.client.api.model.Domain;
 import org.apache.syncope.common.lib.PropertyUtils;
-import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.wicket.Page;
 import org.apache.wicket.Session;
 import org.apache.wicket.WicketRuntimeException;
@@ -80,7 +75,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 @Component
-public class SyncopeWebApplication extends WicketBootStandardWebApplication implements BaseApplication {
+public class SyncopeWebApplication extends WicketBootStandardWebApplication {
 
     private static final Logger LOG = LoggerFactory.getLogger(SyncopeWebApplication.class);
 
@@ -105,9 +100,6 @@ public class SyncopeWebApplication extends WicketBootStandardWebApplication impl
     @Autowired
     private ServiceOps serviceOps;
 
-    @Autowired
-    private DomainOps domainOps;
-
     @Value("${service.discovery.address}")
     private String address;
 
@@ -334,17 +326,6 @@ public class SyncopeWebApplication extends WicketBootStandardWebApplication impl
                 setUseCompression(useGZIPCompression);
     }
 
-    @Override
-    public List<String> getDomains() {
-        synchronized (LOG) {
-            if (domains == null) {
-                domains = domainOps.list().stream().map(Domain::getKey).sorted().collect(Collectors.toList());
-                domains.add(0, SyncopeConstants.MASTER_DOMAIN);
-            }
-        }
-        return domains;
-    }
-
     protected Class<? extends WebPage> getSignInPageClass() {
         return Login.class;
     }
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/Login.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/Login.java
index 2e4a0c7..f86ccdf 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/Login.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/Login.java
@@ -25,7 +25,6 @@ import java.util.Locale;
 import org.apache.syncope.client.enduser.SyncopeWebApplication;
 import org.apache.syncope.client.enduser.SyncopeEnduserSession;
 import org.apache.syncope.client.enduser.init.ClassPathScanImplementationLookup;
-import org.apache.syncope.client.ui.commons.BaseApplication;
 import org.apache.syncope.client.ui.commons.BaseLogin;
 import org.apache.syncope.client.ui.commons.BaseSession;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -49,11 +48,6 @@ public class Login extends BaseLogin {
     }
 
     @Override
-    protected BaseApplication getBaseApplication() {
-        return SyncopeWebApplication.get();
-    }
-
-    @Override
     protected BaseSession getBaseSession() {
         return SyncopeEnduserSession.get();
     }
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/SelfConfirmPasswordReset.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/SelfConfirmPasswordReset.java
index 5600a8d..6a6cb36 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/SelfConfirmPasswordReset.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/SelfConfirmPasswordReset.java
@@ -18,13 +18,19 @@
  */
 package org.apache.syncope.client.enduser.pages;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.enduser.SyncopeEnduserSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.DomainDropDown;
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxPasswordFieldPanel;
 import org.apache.syncope.client.ui.commons.markup.html.form.FieldPanel;
+import org.apache.syncope.common.keymaster.client.api.DomainOps;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
 import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.rest.api.service.UserSelfService;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
@@ -35,13 +41,31 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.PasswordTextField;
 import org.apache.wicket.markup.html.form.StatelessForm;
 import org.apache.wicket.markup.html.form.validation.EqualPasswordInputValidator;
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 
 public class SelfConfirmPasswordReset extends BaseEnduserWebPage {
 
     private static final long serialVersionUID = -2166782304542750726L;
 
+    @SpringBean
+    private DomainOps domainOps;
+
+    private final LoadableDetachableModel<List<String>> domains = new LoadableDetachableModel<List<String>>() {
+
+        private static final long serialVersionUID = 4659376149825914247L;
+
+        @Override
+        protected List<String> load() {
+            List<String> current = new ArrayList<>();
+            current.addAll(domainOps.list().stream().map(Domain::getKey).sorted().collect(Collectors.toList()));
+            current.add(0, SyncopeConstants.MASTER_DOMAIN);
+            return current;
+        }
+    };
+
     public SelfConfirmPasswordReset(final PageParameters parameters) {
         super(parameters);
 
@@ -62,7 +86,7 @@ public class SelfConfirmPasswordReset extends BaseEnduserWebPage {
         form.setOutputMarkupId(true);
         content.add(form);
 
-        DomainDropDown domainSelect = new DomainDropDown("domain");
+        DomainDropDown domainSelect = new DomainDropDown("domain", domains);
         domainSelect.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) {
 
             private static final long serialVersionUID = -1107858522700306810L;
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.java
index cc996cd..94a6ae0 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.java
@@ -18,6 +18,9 @@
  */
 package org.apache.syncope.client.enduser.panels;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.enduser.SyncopeEnduserSession;
 import org.apache.syncope.client.enduser.SyncopeWebApplication;
@@ -27,7 +30,10 @@ import org.apache.syncope.client.enduser.wizards.any.CaptchaPanel;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.DomainDropDown;
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.common.keymaster.client.api.DomainOps;
+import org.apache.syncope.common.keymaster.client.api.model.Domain;
 import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.SecurityQuestionTO;
 import org.apache.syncope.common.rest.api.service.SecurityQuestionService;
 import org.apache.syncope.common.rest.api.service.UserSelfService;
@@ -40,9 +46,11 @@ import org.apache.wicket.event.IEventSource;
 import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,6 +60,22 @@ public class SelfPwdResetPanel extends Panel implements IEventSource {
 
     private static final Logger LOG = LoggerFactory.getLogger(SelfPwdResetPanel.class);
 
+    @SpringBean
+    private DomainOps domainOps;
+
+    private final LoadableDetachableModel<List<String>> domains = new LoadableDetachableModel<List<String>>() {
+
+        private static final long serialVersionUID = 4659376149825914247L;
+
+        @Override
+        protected List<String> load() {
+            List<String> current = new ArrayList<>();
+            current.addAll(domainOps.list().stream().map(Domain::getKey).sorted().collect(Collectors.toList()));
+            current.add(0, SyncopeConstants.MASTER_DOMAIN);
+            return current;
+        }
+    };
+
     private String usernameText;
 
     private final TextField<String> securityQuestion;
@@ -63,7 +87,7 @@ public class SelfPwdResetPanel extends Panel implements IEventSource {
     public SelfPwdResetPanel(final String id, final PageReference pageRef) {
         super(id);
 
-        DomainDropDown domainSelect = new DomainDropDown("domain");
+        DomainDropDown domainSelect = new DomainDropDown("domain", domains);
         domainSelect.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) {
 
             private static final long serialVersionUID = -1107858522700306810L;
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html b/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html
deleted file mode 100644
index 54e63c3..0000000
--- a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxCheckBoxPanel.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head>
-    <title>Ajax checkbox panel</title>
-  </head>
-  <body>
-    <wicket:extend>
-      <div class="checkbox">
-        <input type="checkbox" wicket:id="checkboxField" />
-        <wicket:enclosure child="field-label">
-          <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
-          <span wicket:id="externalAction"/>
-        </wicket:enclosure>
-      </div>
-    </wicket:extend>
-  </body>
-</html>
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html b/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html
deleted file mode 100644
index bddd03a..0000000
--- a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPasswordFieldPanel.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head>
-    <title>Ajaxt password field panel</title>
-  </head>
-  <body>
-    <wicket:extend>
-      <wicket:enclosure child="field-label">
-        <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
-        <span wicket:id="externalAction"/>
-      </wicket:enclosure>
-      <!--to be restored and merged with password strength meter-->
-      <!--<fieldset class="input-group">-->
-      <fieldset>
-        <input type="password" class="form-control" wicket:id="passwordField" />
-      </fieldset>
-    </wicket:extend>
-  </body>
-</html>
\ No newline at end of file
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html b/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html
deleted file mode 100644
index 96f296e..0000000
--- a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizard.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head>
-    <title></title>
-  </head>
-  <body>
-    <wicket:panel>
-      <div class="wizard-form">
-        <form wicket:id="form">
-          <div class="wizard-overview">
-            <div wicket:id="overview"></div> 
-          </div>
-          <div class="wizard-header">
-            <div wicket:id="header"></div>
-          </div>
-          <div class="wizard-view">
-            <div wicket:id="view"></div>
-          </div>
-          <div class="wizard-buttons">
-            <div wicket:id="buttons"></div>
-          </div>
-        </form>
-      </div>
-      <span wicket:id="outerObjectsRepeater">
-        <div wicket:id="outer"/>
-      </span>
-    </wicket:panel>
-  </body>
-</html>
diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html b/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html
deleted file mode 100644
index 8b51391..0000000
--- a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/ui/commons/wizards/AjaxWizardMgtButtonBar.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head>
-    <title></title>
-  </head>
-  <body>
-    <wicket:panel xmlns:wicket="http://wicket.apache.org">
-
-      <span class="pull-left">
-        <input wicket:id="cancel" type="submit" wicket:message="value:cancel" class="btn btn-default"/>
-      </span>
-      <span class="pull-right">
-        <input wicket:id="previous" type="submit" wicket:message="value:previous" class="btn btn-default"/>
-        <input wicket:id="next" type="submit" wicket:message="value:next" class="btn btn-default"/>
-        <input wicket:id="last" type="submit" wicket:message="value:last" class="btn btn-default"/>
-        <input wicket:id="finish" type="submit" wicket:message="value:finish" class="btn btn-primary"/>
-      </span>
-
-    </wicket:panel>
-  </body>
-</html>
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/IdRepoEntitlement.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/IdRepoEntitlement.java
index 56850cc..63cf758 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/IdRepoEntitlement.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/IdRepoEntitlement.java
@@ -132,7 +132,7 @@ public final class IdRepoEntitlement {
 
     public static final String GROUP_DELETE = "GROUP_DELETE";
 
-    public static final String INTERNAL_STORAGE_EXPORT = "INTERNAL_STORAGE_EXPORT";
+    public static final String KEYMASTER = "KEYMASTER";
 
     public static final String TASK_LIST = "TASK_LIST";
 
diff --git a/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/DomainOps.java b/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/DomainOps.java
index 00224b2..b7ec18a 100644
--- a/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/DomainOps.java
+++ b/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/DomainOps.java
@@ -35,7 +35,7 @@ public interface DomainOps {
 
     void changeAdminPassword(String key, String password, CipherAlgorithm cipherAlgorithm);
 
-    void adjustPoolSize(String key, int maxPoolSize, int minIdle);
+    void adjustPoolSize(String key, int poolMaxActive, int poolMinIdle);
 
     void delete(String key);
 }
diff --git a/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/model/Domain.java b/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/model/Domain.java
index 3e659ac..2c156ec 100644
--- a/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/model/Domain.java
+++ b/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/model/Domain.java
@@ -84,13 +84,13 @@ public class Domain implements Serializable {
             return this;
         }
 
-        public Builder maxPoolSize(final int maxPoolSize) {
-            this.domain.maxPoolSize = maxPoolSize;
+        public Builder poolMaxActive(final int poolMaxActive) {
+            this.domain.poolMaxActive = poolMaxActive;
             return this;
         }
 
-        public Builder minIdle(final int minIdle) {
-            this.domain.minIdle = minIdle;
+        public Builder poolMinIdle(final int poolMinIdle) {
+            this.domain.poolMinIdle = poolMinIdle;
             return this;
         }
 
@@ -148,9 +148,9 @@ public class Domain implements Serializable {
 
     private TransactionIsolation transactionIsolation = TransactionIsolation.TRANSACTION_READ_COMMITTED;
 
-    private int maxPoolSize = 10;
+    private int poolMaxActive = 10;
 
-    private int minIdle = 2;
+    private int poolMinIdle = 2;
 
     private String auditSql = "audit.sql";
 
@@ -194,20 +194,20 @@ public class Domain implements Serializable {
         return transactionIsolation;
     }
 
-    public int getMaxPoolSize() {
-        return maxPoolSize;
+    public int getPoolMaxActive() {
+        return poolMaxActive;
     }
 
-    public void setMaxPoolSize(final int maxPoolSize) {
-        this.maxPoolSize = maxPoolSize;
+    public void setPoolMaxActive(final int poolMaxActive) {
+        this.poolMaxActive = poolMaxActive;
     }
 
-    public int getMinIdle() {
-        return minIdle;
+    public int getPoolMinIdle() {
+        return poolMinIdle;
     }
 
-    public void setMinIdle(final int minIdle) {
-        this.minIdle = minIdle;
+    public void setPoolMinIdle(final int poolMinIdle) {
+        this.poolMinIdle = poolMinIdle;
     }
 
     public String getAuditSql() {
@@ -275,8 +275,8 @@ public class Domain implements Serializable {
                 append(dbUsername).
                 append(dbPassword).
                 append(transactionIsolation).
-                append(maxPoolSize).
-                append(minIdle).
+                append(poolMaxActive).
+                append(poolMinIdle).
                 append(auditSql).
                 append(orm).
                 append(databasePlatform).
@@ -307,8 +307,8 @@ public class Domain implements Serializable {
                 append(dbUsername, other.dbUsername).
                 append(dbPassword, other.dbPassword).
                 append(transactionIsolation, other.transactionIsolation).
-                append(maxPoolSize, other.maxPoolSize).
-                append(minIdle, other.minIdle).
+                append(poolMaxActive, other.poolMaxActive).
+                append(poolMinIdle, other.poolMinIdle).
                 append(auditSql, other.auditSql).
                 append(orm, other.orm).
                 append(databasePlatform, other.databasePlatform).
@@ -329,8 +329,8 @@ public class Domain implements Serializable {
                 + ", dbUsername=" + dbUsername
                 + ", dbPassword=" + dbPassword
                 + ", transactionIsolation=" + transactionIsolation
-                + ", maxPoolSize=" + maxPoolSize
-                + ", minIdle=" + minIdle
+                + ", poolMaxSize=" + poolMaxActive
+                + ", poolMinIdle=" + poolMinIdle
                 + ", auditSql=" + auditSql
                 + ", orm=" + orm
                 + ", databasePlatform=" + databasePlatform
diff --git a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOps.java b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOps.java
index 2ff4726..1fd2ce6 100644
--- a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOps.java
+++ b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOps.java
@@ -165,12 +165,12 @@ public class ZookeeperDomainOps implements DomainOps, InitializingBean {
     }
 
     @Override
-    public void adjustPoolSize(final String key, final int maxPoolSize, final int minIdle) {
+    public void adjustPoolSize(final String key, final int poolMaxActive, final int poolMinIdle) {
         try {
             Domain domain = read(key);
 
-            domain.setMaxPoolSize(maxPoolSize);
-            domain.setMinIdle(minIdle);
+            domain.setPoolMaxActive(poolMaxActive);
+            domain.setPoolMinIdle(poolMinIdle);
             client.setData().forPath(buildDomainPath(key), MAPPER.writeValueAsBytes(domain));
         } catch (KeymasterException e) {
             throw e;
diff --git a/common/keymaster/client-zookeeper/src/test/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOpsITCase.java b/common/keymaster/client-zookeeper/src/test/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOpsITCase.java
index ed53738..1741f29 100644
--- a/common/keymaster/client-zookeeper/src/test/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOpsITCase.java
+++ b/common/keymaster/client-zookeeper/src/test/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOpsITCase.java
@@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.List;
 import java.util.UUID;
@@ -59,13 +60,20 @@ public class ZookeeperDomainOpsITCase {
         assertEquals(Domain.TransactionIsolation.TRANSACTION_READ_UNCOMMITTED, domain.getTransactionIsolation());
         assertEquals("password", domain.getAdminPassword());
         assertEquals(CipherAlgorithm.BCRYPT, domain.getAdminCipherAlgorithm());
-        assertEquals(10, domain.getMaxPoolSize());
-        assertEquals(2, domain.getMinIdle());
+        assertEquals(10, domain.getPoolMaxActive());
+        assertEquals(2, domain.getPoolMinIdle());
 
         List<Domain> list = domainOps.list();
         assertNotNull(list);
         assertEquals(domain, list.get(0));
 
+        try {
+            domainOps.create(new Domain.Builder(domain.getKey()).build());
+            fail();
+        } catch (KeymasterException e) {
+            assertNotNull(e);
+        }
+
         domainOps.changeAdminPassword(key, "newpassword", CipherAlgorithm.SSHA512);
 
         domain = domainOps.read(key);
@@ -75,8 +83,8 @@ public class ZookeeperDomainOpsITCase {
         domainOps.adjustPoolSize(key, 100, 23);
 
         domain = domainOps.read(key);
-        assertEquals(100, domain.getMaxPoolSize());
-        assertEquals(23, domain.getMinIdle());
+        assertEquals(100, domain.getPoolMaxActive());
+        assertEquals(23, domain.getPoolMinIdle());
 
         domainOps.delete(key);
 
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 338671a..e76aa59 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -493,7 +493,7 @@ public class SyncopeLogic extends AbstractLogic<EntityTO> {
         return groupDataBinder.getTypeExtensionTO(typeExt.get());
     }
 
-    @PreAuthorize("hasRole('" + IdRepoEntitlement.INTERNAL_STORAGE_EXPORT + "')")
+    @PreAuthorize("hasRole('" + IdRepoEntitlement.KEYMASTER + "')")
     @Transactional(readOnly = true)
     public void exportInternalStorageContent(final OutputStream os) {
         try {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
index 68a6982..1718a87 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
@@ -90,8 +90,8 @@ public class DomainConfFactory implements DomainRegistry, EnvironmentAware {
         hikariConfig.setPassword(domain.getDbPassword());
         hikariConfig.setSchema(domain.getDbSchema());
         hikariConfig.setTransactionIsolation(domain.getTransactionIsolation().name());
-        hikariConfig.setMaximumPoolSize(domain.getMaxPoolSize());
-        hikariConfig.setMinimumIdle(domain.getMinIdle());
+        hikariConfig.setMaximumPoolSize(domain.getPoolMaxActive());
+        hikariConfig.setMinimumIdle(domain.getPoolMinIdle());
 
         HikariDataSource localDomainDataSource = new HikariDataSource(hikariConfig);
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/StartupDomainLoader.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/StartupDomainLoader.java
index c933ff5..6364dd2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/StartupDomainLoader.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/StartupDomainLoader.java
@@ -112,9 +112,9 @@ public class StartupDomainLoader implements SyncopeCoreLoader {
                             } else if (prop.endsWith(".orm")) {
                                 builder.orm(props.getProperty(prop));
                             } else if (prop.endsWith(".pool.maxActive")) {
-                                builder.maxPoolSize(Integer.parseInt(props.getProperty(prop)));
+                                builder.poolMaxActive(Integer.parseInt(props.getProperty(prop)));
                             } else if (prop.endsWith(".pool.minIdle")) {
-                                builder.minIdle(Integer.parseInt(props.getProperty(prop)));
+                                builder.poolMinIdle(Integer.parseInt(props.getProperty(prop)));
                             } else if (prop.endsWith(".audit.sql")) {
                                 builder.auditSql(props.getProperty(prop));
                             }
diff --git a/ext/self-keymaster/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java b/ext/self-keymaster/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java
index 789f39d..61d4ad8 100644
--- a/ext/self-keymaster/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java
+++ b/ext/self-keymaster/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java
@@ -29,6 +29,7 @@ import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.core.persistence.api.dao.DomainDAO;
+import org.apache.syncope.core.persistence.api.dao.DuplicateException;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.entity.DomainEntity;
 import org.apache.syncope.core.persistence.api.entity.SelfKeymasterEntityFactory;
@@ -69,6 +70,10 @@ public class DomainLogic extends AbstractTransactionalLogic<EntityTO> {
             throw new KeymasterException("Cannot create domain " + SyncopeConstants.MASTER_DOMAIN);
         }
 
+        if (domainDAO.find(domain.getKey()) != null) {
+            throw new DuplicateException("Domain " + domain.getKey() + " already existing");
+        }
+
         DomainEntity domainEntity = entityFactory.newDomainEntity();
         domainEntity.setKey(domain.getKey());
         domainEntity.set(domain);
@@ -94,15 +99,15 @@ public class DomainLogic extends AbstractTransactionalLogic<EntityTO> {
     }
 
     @PreAuthorize("@environment.getProperty('keymaster.username') == authentication.name and not(isAnonymous())")
-    public void adjustPoolSize(final String key, final int maxPoolSize, final int minIdle) {
+    public void adjustPoolSize(final String key, final int poolMaxActive, final int poolMinIdle) {
         DomainEntity domain = domainDAO.find(key);
         if (domain == null) {
             throw new NotFoundException("Domain " + key);
         }
 
         Domain domainObj = domain.get();
-        domainObj.setMaxPoolSize(maxPoolSize);
-        domainObj.setMinIdle(minIdle);
+        domainObj.setPoolMaxActive(poolMaxActive);
+        domainObj.setPoolMinIdle(poolMinIdle);
         domain.set(domainObj);
         domainDAO.save(domain);
     }
diff --git a/ext/self-keymaster/rest-api/src/main/java/org/apache/syncope/ext/self/keymaster/api/service/DomainService.java b/ext/self-keymaster/rest-api/src/main/java/org/apache/syncope/ext/self/keymaster/api/service/DomainService.java
index 40a390d..85e3479 100644
--- a/ext/self-keymaster/rest-api/src/main/java/org/apache/syncope/ext/self/keymaster/api/service/DomainService.java
+++ b/ext/self-keymaster/rest-api/src/main/java/org/apache/syncope/ext/self/keymaster/api/service/DomainService.java
@@ -67,8 +67,8 @@ public interface DomainService extends Serializable {
     @Produces({ MediaType.APPLICATION_JSON })
     Response adjustPoolSize(
             @NotNull @PathParam("key") String key,
-            @QueryParam("maxPoolSize") int maxPoolSize,
-            @QueryParam("minIdle") int minIdle);
+            @QueryParam("poolMaxActive") int poolMaxActive,
+            @QueryParam("poolMinIdle") int poolMinIdle);
 
     @DELETE
     @Path("{key}")
diff --git a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/service/DomainServiceImpl.java b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/service/DomainServiceImpl.java
index a181c20..2440922 100644
--- a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/service/DomainServiceImpl.java
+++ b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/service/DomainServiceImpl.java
@@ -70,8 +70,8 @@ public class DomainServiceImpl implements DomainService {
     }
 
     @Override
-    public Response adjustPoolSize(final String key, final int maxPoolSize, final int minIdle) {
-        logic.adjustPoolSize(key, maxPoolSize, minIdle);
+    public Response adjustPoolSize(final String key, final int poolMaxActive, final int poolMinIdle) {
+        logic.adjustPoolSize(key, poolMaxActive, poolMinIdle);
         return Response.noContent().build();
     }
 
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java
index ef7f3aa..c0fa456 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/ParametersITCase.java
@@ -34,7 +34,7 @@ public class ParametersITCase extends AbstractConsoleITCase {
     @BeforeEach
     public void login() {
         doLogin(ADMIN_UNAME, ADMIN_PWD);
-        TESTER.clickLink("body:configurationLI:configurationUL:parametersLI:parameters");
+        TESTER.clickLink("body:keymasterLI:keymasterUL:parametersLI:parameters");
         TESTER.assertRenderedPage(Parameters.class);
     }
 
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
index caf836d..a07760e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
@@ -237,8 +237,8 @@ public class KeymasterITCase extends AbstractITCase {
         Domain domain = domainOps.read(key);
         assertEquals(Domain.TransactionIsolation.TRANSACTION_READ_UNCOMMITTED, domain.getTransactionIsolation());
         assertEquals(CipherAlgorithm.BCRYPT, domain.getAdminCipherAlgorithm());
-        assertEquals(10, domain.getMaxPoolSize());
-        assertEquals(2, domain.getMinIdle());
+        assertEquals(10, domain.getPoolMaxActive());
+        assertEquals(2, domain.getPoolMinIdle());
 
         assertEquals(domain, domainOps.read(key));
 
@@ -246,8 +246,8 @@ public class KeymasterITCase extends AbstractITCase {
         domainOps.adjustPoolSize(key, 100, 23);
 
         domain = domainOps.read(key);
-        assertEquals(100, domain.getMaxPoolSize());
-        assertEquals(23, domain.getMinIdle());
+        assertEquals(100, domain.getPoolMaxActive());
+        assertEquals(23, domain.getPoolMinIdle());
 
         // 3. work with new domain - create user
         clientFactory = new SyncopeClientFactoryBean().setAddress(ADDRESS).setDomain(key);
@@ -294,6 +294,13 @@ public class KeymasterITCase extends AbstractITCase {
     }
 
     @Test
+    public void domainCreateDuplicateKey() {
+        assertThrows(KeymasterException.class, () -> {
+            domainOps.create(new Domain.Builder("Two").build());
+        });
+    }
+
+    @Test
     public void domainUpdateAdminPassword() throws Exception {
         assumeFalse(domainOps.list().isEmpty());
 


[syncope] 01/02: Upgrading Tomcat and cargo-maven2-plugin

Posted by il...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit 9a6362890f85b270418fc67b270cd63b314e2be0
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Wed May 15 08:21:52 2019 +0200

    Upgrading Tomcat and cargo-maven2-plugin
---
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index d5ec8e9..7acd633 100644
--- a/pom.xml
+++ b/pom.xml
@@ -515,7 +515,7 @@ under the License.
     <cargo.log>${log.directory}/cargo.log</cargo.log>
     <cargo.output>${log.directory}/cargo-output.log</cargo.output>
 
-    <tomcat.version>9.0.19</tomcat.version>
+    <tomcat.version>9.0.20</tomcat.version>
 
     <docker.postgresql.version>11.2</docker.postgresql.version>
     <docker.mysql.version>8.0</docker.mysql.version>
@@ -2074,7 +2074,7 @@ under the License.
         <plugin>
           <groupId>org.codehaus.cargo</groupId>
           <artifactId>cargo-maven2-plugin</artifactId>
-          <version>1.7.3</version>
+          <version>1.7.4</version>
           <configuration>
             <configuration>
               <type>standalone</type>