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/12/20 13:11:37 UTC

[syncope] branch 2_1_X updated (961e5d8 -> b33cc14)

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

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


    from 961e5d8  Small fix
     new 2e35db1  Upgrading Elasticsearch
     new b33cc14  [SYNCOPE-1517] Initial changes

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/console/audit/AuditHistoryDetails.java  |  127 +
 .../console/audit/AuditHistoryDirectoryPanel.java  |  241 +-
 .../client/console/audit/AuditHistoryModal.java    |   42 +-
 .../client/console/audit/HistoryAuditDetails.java  |  232 --
 .../console/panels/AnyObjectDirectoryPanel.java    |   93 +-
 .../console/panels/AnyTypeClassDetailsPanel.java   |    7 -
 .../ConnInstanceHistoryConfDirectoryPanel.java     |  229 --
 .../client/console/panels/DirectoryPanel.java      |    5 +-
 .../client/console/panels/GroupDirectoryPanel.java |   79 +-
 .../client/console/panels/HistoryConfDetails.java  |  247 --
 .../client/console/panels/HistoryConfList.java     |   74 -
 .../console/panels/LinkedAccountModalPanel.java    |    6 +-
 .../panels/ResourceHistoryConfDirectoryPanel.java  |  230 --
 .../client/console/panels/UserDirectoryPanel.java  |  106 +-
 .../console/policies/PolicyRuleDirectoryPanel.java |    3 -
 .../console/policies/PolicyRuleWizardBuilder.java  |    3 +-
 .../policies/ProvisioningPolicyModalPanel.java     |    3 +-
 .../console/reports/ReportletDirectoryPanel.java   |    3 -
 .../console/reports/ReportletWizardBuilder.java    |    3 +-
 .../console/rest/AuditHistoryRestClient.java       |   60 +-
 .../console/rest/ConnectorHistoryRestClient.java   |   50 -
 .../console/rest/ResourceHistoryRestClient.java    |   50 -
 .../console/topology/TopologyTogglePanel.java      |   88 +-
 .../repeater/data/table/AjaxFallbackDataTable.java |   12 +-
 .../wicket/markup/html/form/ActionLink.java        |    1 -
 .../wicket/markup/html/form/ActionsPanel.java      |   12 +-
 .../syncope/client/console/wizards/AjaxWizard.java |    3 +-
 .../client/console/wizards/WizardMgtPanel.java     |    4 +-
 .../console/wizards/any/AnyObjectWrapper.java      |    1 -
 .../client/console/wizards/any/AnyWrapper.java     |    1 -
 .../AuditHistoryDetails.html}                      |    8 +-
 ...s.properties => AuditHistoryDetails.properties} |    4 +-
 ...erties => AuditHistoryDetails_fr_CA.properties} |    6 +-
 ...roperties => AuditHistoryDetails_it.properties} |    6 +-
 ...roperties => AuditHistoryDetails_ja.properties} |    4 +-
 ...erties => AuditHistoryDetails_pt_BR.properties} |    4 +-
 ...roperties => AuditHistoryDetails_ru.properties} |    4 +-
 .../console/audit/AuditHistoryModal.properties     |    2 +-
 ...operties => AuditHistoryModal_fr_CA.properties} |    2 +-
 .../console/audit/AuditHistoryModal_it.properties  |    2 +-
 .../console/audit/AuditHistoryModal_ja.properties  |    2 +-
 .../audit/AuditHistoryModal_pt_BR.properties       |    2 +-
 .../console/audit/AuditHistoryModal_ru.properties  |    2 +-
 .../client/console/audit/HistoryAuditDetails.html  |   29 -
 .../audit/HistoryAuditDetails_it.properties        |   19 -
 .../console/panels/HistoryConfDetails.properties   |   23 -
 .../panels/HistoryConfDetails_fr_CA.properties     |   23 -
 .../panels/HistoryConfDetails_it.properties        |   23 -
 .../panels/HistoryConfDetails_ja.properties        |   23 -
 .../panels/HistoryConfDetails_pt_BR.properties     |   23 -
 .../panels/HistoryConfDetails_ru.properties        |   23 -
 .../client/console/panels/HistoryConfList.html     |   23 -
 .../console/panels/HistoryConfList.properties      |   21 -
 .../panels/HistoryConfList_fr_CA.properties        |   21 -
 .../console/panels/HistoryConfList_it.properties   |   21 -
 .../console/panels/HistoryConfList_ja.properties   |   21 -
 .../panels/HistoryConfList_pt_BR.properties        |   21 -
 .../console/panels/HistoryConfList_ru.properties   |   21 -
 .../markup/html/form/ActionsPanel.properties       |   12 +-
 .../markup/html/form/ActionsPanel_fr_CA.properties |  196 +-
 .../markup/html/form/ActionsPanel_it.properties    |    9 +-
 .../markup/html/form/ActionsPanel_ja.properties    |   11 +-
 .../markup/html/form/ActionsPanel_pt_BR.properties |   15 +-
 .../markup/html/form/ActionsPanel_ru.properties    |   15 +-
 .../syncope/common/lib/to/AbstractHistoryConf.java |   70 -
 .../common/lib/to/ConnInstanceHistoryConfTO.java   |   40 -
 .../common/lib/to/ResourceHistoryConfTO.java       |   39 -
 .../common/lib/types/StandardEntitlement.java      |   12 -
 .../rest/api/service/ConnectorHistoryService.java  |   82 -
 .../rest/api/service/ResourceHistoryService.java   |   82 -
 .../syncope/core/logic/ConnectorHistoryLogic.java  |   98 -
 .../syncope/core/logic/ResourceHistoryLogic.java   |   98 -
 .../api/dao/ConnInstanceHistoryConfDAO.java        |   36 -
 .../api/dao/ExternalResourceHistoryConfDAO.java    |   36 -
 .../api/entity/ConnInstanceHistoryConf.java        |   24 -
 .../core/persistence/api/entity/HistoryConf.java   |   41 -
 .../resource/ExternalResourceHistoryConf.java      |   25 -
 .../src/main/resources/domains/MasterContent.xml   |   11 +-
 .../src/test/resources/domains/MasterContent.xml   |   26 +-
 .../persistence/jpa/dao/JPAConnInstanceDAO.java    |    6 -
 .../jpa/dao/JPAConnInstanceHistoryConfDAO.java     |   71 -
 .../jpa/dao/JPAExternalResourceDAO.java            |    6 -
 .../jpa/dao/JPAExternalResourceHistoryConfDAO.java |   71 -
 .../jpa/entity/AbstractHistoryConf.java            |   76 -
 .../jpa/entity/JPAConnInstanceHistoryConf.java     |   59 -
 .../persistence/jpa/entity/JPAEntityFactory.java   |    7 -
 .../resource/JPAExternalResourceHistoryConf.java   |   60 -
 .../src/main/resources/domains/MasterContent.xml   |   17 -
 .../persistence/jpa/inner/PlainSchemaTest.java     |    2 +-
 .../jpa/outer/ConnInstanceHistoryConfTest.java     |   74 -
 .../jpa/outer/ResourceHistoryConfTest.java         |   74 -
 .../src/test/resources/domains/MasterContent.xml   |   32 +-
 .../api/data/ConnInstanceDataBinder.java           |    5 -
 .../provisioning/api/data/ResourceDataBinder.java  |    4 -
 .../java/data/ConnInstanceDataBinderImpl.java      |   42 -
 .../java/data/ResourceDataBinderImpl.java          |   43 -
 .../cxf/service/ConnectorHistoryServiceImpl.java   |   49 -
 .../cxf/service/ResourceHistoryServiceImpl.java    |   49 -
 core/upgrade/src/main/resources/schema.xml         | 2537 +++++++++++---------
 .../main/resources/domains/MasterContent.xml.all   |   17 -
 .../resources/domains/MasterContent.xml.myjson     |   11 +-
 .../resources/domains/MasterContent.xml.pgjsonb    |   11 +-
 .../org/apache/syncope/fit/AbstractITCase.java     |   10 +-
 .../syncope/fit/console/AbstractTypesITCase.java   |    1 -
 .../syncope/fit/console/AnyObjectsITCase.java      |    2 +-
 .../apache/syncope/fit/console/BatchesITCase.java  |   10 +-
 .../apache/syncope/fit/console/GroupsITCase.java   |    4 +-
 .../apache/syncope/fit/console/PoliciesITCase.java |    2 +-
 .../apache/syncope/fit/console/UsersITCase.java    |    8 +-
 .../syncope/fit/core/AbstractTaskITCase.java       |    4 +-
 .../org/apache/syncope/fit/core/AuditITCase.java   |   78 +-
 .../syncope/fit/core/AuthenticationITCase.java     |    6 +-
 .../apache/syncope/fit/core/ConnectorITCase.java   |   38 -
 .../org/apache/syncope/fit/core/GroupITCase.java   |    3 +-
 .../syncope/fit/core/LinkedAccountITCase.java      |    9 +-
 .../apache/syncope/fit/core/MembershipITCase.java  |    4 +-
 .../syncope/fit/core/MultitenancyITCase.java       |    2 +-
 .../apache/syncope/fit/core/PullTaskITCase.java    |   72 +-
 .../apache/syncope/fit/core/PushTaskITCase.java    |   28 +-
 .../org/apache/syncope/fit/core/ReportITCase.java  |    9 +-
 .../apache/syncope/fit/core/SchedTaskITCase.java   |   11 +-
 .../apache/syncope/fit/core/UserIssuesITCase.java  |    2 +-
 .../apache/syncope/fit/core/UserSelfITCase.java    |   12 +-
 .../org/apache/syncope/fit/core/VirAttrITCase.java |   12 +-
 pom.xml                                            |    4 +-
 .../concepts/externalresources.adoc                |   15 -
 .../configurationparameters.adoc                   |    4 -
 127 files changed, 2229 insertions(+), 4820 deletions(-)
 create mode 100644 client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryDetails.java
 delete mode 100644 client/console/src/main/java/org/apache/syncope/client/console/audit/HistoryAuditDetails.java
 delete mode 100644 client/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
 delete mode 100644 client/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfDetails.java
 delete mode 100644 client/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfList.java
 delete mode 100644 client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
 delete mode 100644 client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
 delete mode 100644 client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
 rename client/console/src/main/resources/org/apache/syncope/client/console/{panels/HistoryConfDetails.html => audit/AuditHistoryDetails.html} (72%)
 rename client/console/src/main/resources/org/apache/syncope/client/console/audit/{HistoryAuditDetails.properties => AuditHistoryDetails.properties} (94%)
 copy client/console/src/main/resources/org/apache/syncope/client/console/audit/{AuditHistoryModal_it.properties => AuditHistoryDetails_fr_CA.properties} (92%)
 copy client/console/src/main/resources/org/apache/syncope/client/console/audit/{AuditHistoryModal_it.properties => AuditHistoryDetails_it.properties} (93%)
 rename client/console/src/main/resources/org/apache/syncope/client/console/audit/{HistoryAuditDetails_ja.properties => AuditHistoryDetails_ja.properties} (94%)
 rename client/console/src/main/resources/org/apache/syncope/client/console/audit/{HistoryAuditDetails_pt_BR.properties => AuditHistoryDetails_pt_BR.properties} (94%)
 rename client/console/src/main/resources/org/apache/syncope/client/console/audit/{HistoryAuditDetails_ru.properties => AuditHistoryDetails_ru.properties} (94%)
 copy client/console/src/main/resources/org/apache/syncope/client/console/audit/{AuditHistoryModal_it.properties => AuditHistoryModal_fr_CA.properties} (96%)
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails.html
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_it.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_fr_CA.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_it.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_ja.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_pt_BR.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_ru.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList.html
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_fr_CA.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_it.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_ja.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_pt_BR.properties
 delete mode 100644 client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_ru.properties
 delete mode 100644 common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractHistoryConf.java
 delete mode 100644 common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceHistoryConfTO.java
 delete mode 100644 common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceHistoryConfTO.java
 delete mode 100644 common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorHistoryService.java
 delete mode 100644 common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceHistoryService.java
 delete mode 100644 core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
 delete mode 100644 core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
 delete mode 100644 core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceHistoryConfDAO.java
 delete mode 100644 core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceHistoryConfDAO.java
 delete mode 100644 core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstanceHistoryConf.java
 delete mode 100644 core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/HistoryConf.java
 delete mode 100644 core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResourceHistoryConf.java
 delete mode 100644 core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceHistoryConfDAO.java
 delete mode 100644 core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceHistoryConfDAO.java
 delete mode 100644 core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractHistoryConf.java
 delete mode 100644 core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstanceHistoryConf.java
 delete mode 100644 core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResourceHistoryConf.java
 delete mode 100644 core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceHistoryConfTest.java
 delete mode 100644 core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceHistoryConfTest.java
 delete mode 100644 core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorHistoryServiceImpl.java
 delete mode 100644 core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceHistoryServiceImpl.java


[syncope] 02/02: [SYNCOPE-1517] Initial changes

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

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

commit b33cc1415e4fa4b8953a27c789888b94fe185331
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Fri Dec 20 14:11:19 2019 +0100

    [SYNCOPE-1517] Initial changes
---
 .../client/console/audit/AuditHistoryDetails.java  |  127 +
 .../console/audit/AuditHistoryDirectoryPanel.java  |  241 +-
 .../client/console/audit/AuditHistoryModal.java    |   42 +-
 .../client/console/audit/HistoryAuditDetails.java  |  232 --
 .../console/panels/AnyObjectDirectoryPanel.java    |   93 +-
 .../console/panels/AnyTypeClassDetailsPanel.java   |    7 -
 .../ConnInstanceHistoryConfDirectoryPanel.java     |  229 --
 .../client/console/panels/DirectoryPanel.java      |    5 +-
 .../client/console/panels/GroupDirectoryPanel.java |   79 +-
 .../client/console/panels/HistoryConfDetails.java  |  247 --
 .../client/console/panels/HistoryConfList.java     |   74 -
 .../console/panels/LinkedAccountModalPanel.java    |    6 +-
 .../panels/ResourceHistoryConfDirectoryPanel.java  |  230 --
 .../client/console/panels/UserDirectoryPanel.java  |  106 +-
 .../console/policies/PolicyRuleDirectoryPanel.java |    3 -
 .../console/policies/PolicyRuleWizardBuilder.java  |    3 +-
 .../policies/ProvisioningPolicyModalPanel.java     |    3 +-
 .../console/reports/ReportletDirectoryPanel.java   |    3 -
 .../console/reports/ReportletWizardBuilder.java    |    3 +-
 .../console/rest/AuditHistoryRestClient.java       |   60 +-
 .../console/rest/ConnectorHistoryRestClient.java   |   50 -
 .../console/rest/ResourceHistoryRestClient.java    |   50 -
 .../console/topology/TopologyTogglePanel.java      |   88 +-
 .../repeater/data/table/AjaxFallbackDataTable.java |   12 +-
 .../wicket/markup/html/form/ActionLink.java        |    1 -
 .../wicket/markup/html/form/ActionsPanel.java      |   12 +-
 .../syncope/client/console/wizards/AjaxWizard.java |    3 +-
 .../client/console/wizards/WizardMgtPanel.java     |    4 +-
 .../console/wizards/any/AnyObjectWrapper.java      |    1 -
 .../client/console/wizards/any/AnyWrapper.java     |    1 -
 ...yAuditDetails.html => AuditHistoryDetails.html} |    8 +-
 ...s.properties => AuditHistoryDetails.properties} |    4 +-
 ...erties => AuditHistoryDetails_fr_CA.properties} |    6 +-
 ...roperties => AuditHistoryDetails_it.properties} |    6 +-
 ...roperties => AuditHistoryDetails_ja.properties} |    4 +-
 ...erties => AuditHistoryDetails_pt_BR.properties} |    4 +-
 ...roperties => AuditHistoryDetails_ru.properties} |    4 +-
 .../console/audit/AuditHistoryModal.properties     |    2 +-
 ...operties => AuditHistoryModal_fr_CA.properties} |    2 +-
 .../console/audit/AuditHistoryModal_it.properties  |    2 +-
 .../console/audit/AuditHistoryModal_ja.properties  |    2 +-
 .../audit/AuditHistoryModal_pt_BR.properties       |    2 +-
 .../console/audit/AuditHistoryModal_ru.properties  |    2 +-
 .../audit/HistoryAuditDetails_it.properties        |   19 -
 .../client/console/panels/HistoryConfDetails.html  |   29 -
 .../console/panels/HistoryConfDetails.properties   |   23 -
 .../panels/HistoryConfDetails_fr_CA.properties     |   23 -
 .../panels/HistoryConfDetails_it.properties        |   23 -
 .../panels/HistoryConfDetails_ja.properties        |   23 -
 .../panels/HistoryConfDetails_pt_BR.properties     |   23 -
 .../panels/HistoryConfDetails_ru.properties        |   23 -
 .../client/console/panels/HistoryConfList.html     |   23 -
 .../console/panels/HistoryConfList.properties      |   21 -
 .../panels/HistoryConfList_fr_CA.properties        |   21 -
 .../console/panels/HistoryConfList_it.properties   |   21 -
 .../console/panels/HistoryConfList_ja.properties   |   21 -
 .../panels/HistoryConfList_pt_BR.properties        |   21 -
 .../console/panels/HistoryConfList_ru.properties   |   21 -
 .../markup/html/form/ActionsPanel.properties       |   12 +-
 .../markup/html/form/ActionsPanel_fr_CA.properties |  196 +-
 .../markup/html/form/ActionsPanel_it.properties    |    9 +-
 .../markup/html/form/ActionsPanel_ja.properties    |   11 +-
 .../markup/html/form/ActionsPanel_pt_BR.properties |   15 +-
 .../markup/html/form/ActionsPanel_ru.properties    |   15 +-
 .../syncope/common/lib/to/AbstractHistoryConf.java |   70 -
 .../common/lib/to/ConnInstanceHistoryConfTO.java   |   40 -
 .../common/lib/to/ResourceHistoryConfTO.java       |   39 -
 .../common/lib/types/StandardEntitlement.java      |   12 -
 .../rest/api/service/ConnectorHistoryService.java  |   82 -
 .../rest/api/service/ResourceHistoryService.java   |   82 -
 .../syncope/core/logic/ConnectorHistoryLogic.java  |   98 -
 .../syncope/core/logic/ResourceHistoryLogic.java   |   98 -
 .../api/dao/ConnInstanceHistoryConfDAO.java        |   36 -
 .../api/dao/ExternalResourceHistoryConfDAO.java    |   36 -
 .../api/entity/ConnInstanceHistoryConf.java        |   24 -
 .../core/persistence/api/entity/HistoryConf.java   |   41 -
 .../resource/ExternalResourceHistoryConf.java      |   25 -
 .../src/main/resources/domains/MasterContent.xml   |   11 +-
 .../src/test/resources/domains/MasterContent.xml   |   26 +-
 .../persistence/jpa/dao/JPAConnInstanceDAO.java    |    6 -
 .../jpa/dao/JPAConnInstanceHistoryConfDAO.java     |   71 -
 .../jpa/dao/JPAExternalResourceDAO.java            |    6 -
 .../jpa/dao/JPAExternalResourceHistoryConfDAO.java |   71 -
 .../jpa/entity/AbstractHistoryConf.java            |   76 -
 .../jpa/entity/JPAConnInstanceHistoryConf.java     |   59 -
 .../persistence/jpa/entity/JPAEntityFactory.java   |    7 -
 .../resource/JPAExternalResourceHistoryConf.java   |   60 -
 .../src/main/resources/domains/MasterContent.xml   |   17 -
 .../persistence/jpa/inner/PlainSchemaTest.java     |    2 +-
 .../jpa/outer/ConnInstanceHistoryConfTest.java     |   74 -
 .../jpa/outer/ResourceHistoryConfTest.java         |   74 -
 .../src/test/resources/domains/MasterContent.xml   |   32 +-
 .../api/data/ConnInstanceDataBinder.java           |    5 -
 .../provisioning/api/data/ResourceDataBinder.java  |    4 -
 .../java/data/ConnInstanceDataBinderImpl.java      |   42 -
 .../java/data/ResourceDataBinderImpl.java          |   43 -
 .../cxf/service/ConnectorHistoryServiceImpl.java   |   49 -
 .../cxf/service/ResourceHistoryServiceImpl.java    |   49 -
 core/upgrade/src/main/resources/schema.xml         | 2537 +++++++++++---------
 .../main/resources/domains/MasterContent.xml.all   |   17 -
 .../resources/domains/MasterContent.xml.myjson     |   11 +-
 .../resources/domains/MasterContent.xml.pgjsonb    |   11 +-
 .../org/apache/syncope/fit/AbstractITCase.java     |   10 +-
 .../syncope/fit/console/AbstractTypesITCase.java   |    1 -
 .../syncope/fit/console/AnyObjectsITCase.java      |    2 +-
 .../apache/syncope/fit/console/BatchesITCase.java  |   10 +-
 .../apache/syncope/fit/console/GroupsITCase.java   |    4 +-
 .../apache/syncope/fit/console/PoliciesITCase.java |    2 +-
 .../apache/syncope/fit/console/UsersITCase.java    |    8 +-
 .../syncope/fit/core/AbstractTaskITCase.java       |    4 +-
 .../org/apache/syncope/fit/core/AuditITCase.java   |   78 +-
 .../syncope/fit/core/AuthenticationITCase.java     |    6 +-
 .../apache/syncope/fit/core/ConnectorITCase.java   |   38 -
 .../org/apache/syncope/fit/core/GroupITCase.java   |    3 +-
 .../syncope/fit/core/LinkedAccountITCase.java      |    9 +-
 .../apache/syncope/fit/core/MembershipITCase.java  |    4 +-
 .../syncope/fit/core/MultitenancyITCase.java       |    2 +-
 .../apache/syncope/fit/core/PullTaskITCase.java    |   72 +-
 .../apache/syncope/fit/core/PushTaskITCase.java    |   28 +-
 .../org/apache/syncope/fit/core/ReportITCase.java  |    9 +-
 .../apache/syncope/fit/core/SchedTaskITCase.java   |   11 +-
 .../apache/syncope/fit/core/UserIssuesITCase.java  |    2 +-
 .../apache/syncope/fit/core/UserSelfITCase.java    |   12 +-
 .../org/apache/syncope/fit/core/VirAttrITCase.java |   12 +-
 .../concepts/externalresources.adoc                |   15 -
 .../configurationparameters.adoc                   |    4 -
 126 files changed, 2227 insertions(+), 4818 deletions(-)

diff --git a/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryDetails.java
new file mode 100644
index 0000000..cf37124
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryDetails.java
@@ -0,0 +1,127 @@
+/*
+ * 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.audit;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.Date;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.JsonDiffPanel;
+import org.apache.syncope.common.lib.to.AbstractAnnotatedBean;
+import org.apache.syncope.common.lib.to.AuditEntryTO;
+import org.apache.syncope.common.lib.to.EntityTO;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.Model;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AuditHistoryDetails<T extends EntityTO> extends MultilevelPanel.SecondLevel {
+
+    private static final long serialVersionUID = -7400543686272100483L;
+
+    private static final Logger LOG = LoggerFactory.getLogger(AuditHistoryDetails.class);
+
+    private static final ObjectMapper MAPPER = new ObjectMapper();
+
+    private static final String KEY_CURRENT = "current";
+
+    public AuditHistoryDetails(
+            final MultilevelPanel mlp,
+            final AuditEntryTO selected,
+            final T currentEntity,
+            final String auditRestoreEntitlement,
+            final PageReference pageRef) {
+
+        super();
+
+        AuditEntryTO current = new AuditEntryTO();
+        current.setKey(KEY_CURRENT);
+        if (currentEntity instanceof AbstractAnnotatedBean) {
+            current.setWho(((AbstractAnnotatedBean) currentEntity).getCreator());
+            current.setDate(((AbstractAnnotatedBean) currentEntity).getCreationDate());
+        } else {
+            current.setWho(SyncopeConsoleSession.get().getSelfTO().getUsername());
+            current.setDate(new Date());
+        }
+        try {
+            current.setBefore(MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(currentEntity));
+        } catch (JsonProcessingException e) {
+            LOG.error("While serializing current entity", e);
+            throw new WicketRuntimeException(e);
+        }
+
+        add(new Label("current", getString("current")));
+        add(new Label("previous", getString("previous")));
+
+        @SuppressWarnings("unchecked")
+        Class<T> reference = (Class<T>) currentEntity.getClass();
+        add(new JsonDiffPanel(null, toJSON(current, reference), toJSON(selected, reference), null) {
+
+            private static final long serialVersionUID = 2087989787864619493L;
+
+            @Override
+            public void onSubmit(final AjaxRequestTarget target) {
+                modal.close(target);
+            }
+        });
+
+        AjaxLink<Void> restore = new AjaxLink<Void>("restore") {
+
+            private static final long serialVersionUID = -817438685948164787L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target) {
+                restore(currentEntity, target);
+
+                mlp.prev(target);
+            }
+        };
+        MetaDataRoleAuthorizationStrategy.authorize(restore, RENDER, auditRestoreEntitlement);
+        add(restore);
+    }
+
+    protected abstract void restore(T entity, AjaxRequestTarget target);
+
+    private Model<String> toJSON(final AuditEntryTO auditEntry, final Class<T> reference) {
+        try {
+            String content = auditEntry.getBefore() == null
+                    ? MAPPER.readTree(auditEntry.getOutput()).get("entity").toPrettyString()
+                    : auditEntry.getBefore();
+
+            T entity = MAPPER.readValue(content, reference);
+            if (entity instanceof UserTO) {
+                UserTO userTO = (UserTO) entity;
+                userTO.setPassword(null);
+                userTO.setSecurityAnswer(null);
+            }
+
+            return Model.of(MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(entity));
+        } catch (Exception e) {
+            LOG.error("While (de)serializing entity {}", auditEntry, e);
+            throw new WicketRuntimeException(e);
+        }
+    }
+}
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryDirectoryPanel.java
index 62bb700..ee2066e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryDirectoryPanel.java
@@ -18,49 +18,30 @@
  */
 package org.apache.syncope.client.console.audit;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
-import java.util.stream.Collectors;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.audit.AuditHistoryDirectoryPanel.AuditHistoryProvider;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.AjaxDataTablePanel;
 import org.apache.syncope.client.console.panels.DirectoryPanel;
 import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
-import org.apache.syncope.client.console.rest.AnyObjectRestClient;
 import org.apache.syncope.client.console.rest.AuditHistoryRestClient;
-import org.apache.syncope.client.console.rest.GroupRestClient;
-import org.apache.syncope.client.console.rest.UserRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
 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.common.lib.AnyOperations;
-import org.apache.syncope.common.lib.patch.AnyObjectPatch;
-import org.apache.syncope.common.lib.patch.GroupPatch;
-import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.AnyObjectTO;
-import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.AuditEntryTO;
-import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.syncope.common.lib.to.ProvisioningResult;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+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.extensions.markup.html.repeater.util.SortParam;
@@ -68,92 +49,54 @@ import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.StringResourceModel;
 
-public class AuditHistoryDirectoryPanel extends
-        DirectoryPanel<AuditEntryTO, AuditEntryTO, AuditHistoryProvider, AuditHistoryRestClient>
+public abstract class AuditHistoryDirectoryPanel<T extends EntityTO> extends DirectoryPanel<
+        AuditEntryTO, AuditEntryTO, AuditHistoryDirectoryPanel<T>.AuditHistoryProvider, AuditHistoryRestClient>
         implements ModalPanel {
 
     private static final long serialVersionUID = -8248734710505211261L;
 
-    private static final int TOTAL_AUDIT_HISTORY_COMPARISONS = 25;
+    private static final List<String> EVENTS = Arrays.asList("create", "update");
 
-    protected static final ObjectMapper MAPPER = new ObjectMapper();
+    private static final SortParam<String> REST_SORT = new SortParam<>("event_date", false);
 
     private final BaseModal<?> baseModal;
 
-    private final MultilevelPanel multiLevelPanelRef;
+    private final MultilevelPanel mlp;
 
-    private final AnyTO anyTO;
+    private final AuditElements.EventCategoryType type;
 
-    private final AnyTypeKind anyTypeKind;
+    private final String category;
+
+    private final T entity;
+
+    private final String auditRestoreEntitlement;
 
     public AuditHistoryDirectoryPanel(
             final BaseModal<?> baseModal,
-            final MultilevelPanel multiLevelPanelRef,
-            final PageReference pageRef,
-            final AnyTO anyTO) {
+            final MultilevelPanel mlp,
+            final AuditElements.EventCategoryType type,
+            final String category,
+            final T entity,
+            final String auditRestoreEntitlement,
+            final PageReference pageRef) {
 
         super(MultilevelPanel.FIRST_LEVEL_ID, pageRef);
         disableCheckBoxes();
 
         this.baseModal = baseModal;
-        this.multiLevelPanelRef = multiLevelPanelRef;
-        this.anyTO = anyTO;
-        this.anyTypeKind = AnyTypeKind.fromTOClass(anyTO.getClass());
+        this.mlp = mlp;
+        this.type = type;
+        this.category = category;
+        this.entity = entity;
+        this.auditRestoreEntitlement = auditRestoreEntitlement;
+        this.pageRef = pageRef;
 
         this.restClient = new AuditHistoryRestClient();
         initResultTable();
     }
 
-    /**
-     * Restore an object based on the audit record.Note that for user objects, the original audit record masks
-     * the password and the security answer; so we cannot use the audit record to resurrect the entry based on mask
-     * data.
-     *
-     * The method behavior below will reset the audit record such that the current security answer and the password for
-     * the object are always maintained, and such properties for the user cannot be restored using audit records.
-     *
-     * @param json the object from audit
-     * @param anyTO the any to
-     * @return the response
-     * @throws JsonProcessingException if json value cannot be parsed
-     */
-    protected ProvisioningResult<? extends AnyTO> restore(final String json, final AnyTO anyTO)
-            throws JsonProcessingException {
-
-        if (anyTO instanceof UserTO) {
-            UserTO userTO = MAPPER.readValue(json, UserTO.class);
-            UserPatch userPatch = AnyOperations.diff(userTO, anyTO, false);
-            userPatch.setPassword(null);
-            userPatch.setSecurityAnswer(null);
-            return new UserRestClient().update(anyTO.getETagValue(), userPatch);
-        }
-        if (anyTO instanceof GroupTO) {
-            GroupTO groupTO = MAPPER.readValue(json, GroupTO.class);
-            GroupPatch groupPatch = AnyOperations.diff(groupTO, anyTO, false);
-            return new GroupRestClient().update(anyTO.getETagValue(), groupPatch);
-        }
-        if (anyTO instanceof AnyObjectTO) {
-            AnyObjectTO anyObjectTO = MAPPER.readValue(json, AnyObjectTO.class);
-            AnyObjectPatch anyObjectPatch = AnyOperations.diff(anyObjectTO, anyTO, false);
-            return new AnyObjectRestClient().update(anyTO.getETagValue(), anyObjectPatch);
-        }
-        throw new UnsupportedOperationException("Restore not supported for " + anyTO.getClass().getName());
-    }
-
-    private static SortParam<String> getSortParam() {
-        return new SortParam<>("event_date", false);
-    }
-
-    private static AuditElements.Result getQueryableAuditResult() {
-        return AuditElements.Result.SUCCESS;
-    }
-
-    private static List<String> getQueryableAuditEvents() {
-        return Arrays.asList("create", "update");
-    }
-
     @Override
-    protected AuditHistoryDirectoryPanel.AuditHistoryProvider dataProvider() {
+    protected AuditHistoryDirectoryPanel<T>.AuditHistoryProvider dataProvider() {
         return new AuditHistoryProvider(rows);
     }
 
@@ -164,20 +107,19 @@ public class AuditHistoryDirectoryPanel extends
 
     @Override
     protected List<IColumn<AuditEntryTO, String>> getColumns() {
-        final List<IColumn<AuditEntryTO, String>> columns = new ArrayList<>();
-        columns.add(new PropertyColumn<>(
-                new StringResourceModel("who", this), "who"));
-        columns.add(new DatePropertyColumn<>(
-                new StringResourceModel("date", this), null, "date"));
+        List<IColumn<AuditEntryTO, String>> columns = new ArrayList<>();
+        columns.add(new PropertyColumn<>(new StringResourceModel("who", this), "who"));
+        columns.add(new DatePropertyColumn<>(new StringResourceModel("date", this), null, "date"));
         return columns;
     }
 
     @Override
-    protected void resultTableCustomChanges(
-            final AjaxDataTablePanel.Builder<AuditEntryTO, String> resultTableBuilder) {
-        resultTableBuilder.setMultiLevelPanel(baseModal, multiLevelPanelRef);
+    protected void resultTableCustomChanges(final AjaxDataTablePanel.Builder<AuditEntryTO, String> resultTableBuilder) {
+        resultTableBuilder.setMultiLevelPanel(baseModal, mlp);
     }
 
+    protected abstract void restore(T entity, AjaxRequestTarget target);
+
     @Override
     protected ActionsPanel<AuditEntryTO> getActions(final IModel<AuditEntryTO> model) {
         final ActionsPanel<AuditEntryTO> panel = super.getActions(model);
@@ -189,48 +131,27 @@ public class AuditHistoryDirectoryPanel extends
             @Override
             public void onClick(final AjaxRequestTarget target, final AuditEntryTO modelObject) {
                 AuditHistoryDirectoryPanel.this.getTogglePanel().close(target);
-                viewAuditHistory(modelObject, target);
-                target.add(modal);
-            }
-        }, ActionLink.ActionType.VIEW, StandardEntitlement.AUDIT_READ);
 
-        final String auditRestoreEntitlement;
-        switch (this.anyTypeKind) {
-            case USER:
-                auditRestoreEntitlement = StandardEntitlement.USER_UPDATE;
-                break;
-            case GROUP:
-                auditRestoreEntitlement = StandardEntitlement.GROUP_UPDATE;
-                break;
-            default:
-                auditRestoreEntitlement = StandardEntitlement.ANYTYPE_UPDATE;
-                break;
-        }
+                mlp.next(
+                        new StringResourceModel("audit.diff.view", AuditHistoryDirectoryPanel.this).getObject(),
+                        new AuditHistoryDetails<T>(
+                                mlp,
+                                modelObject,
+                                entity,
+                                auditRestoreEntitlement,
+                                pageRef) {
 
-        panel.add(new ActionLink<AuditEntryTO>() {
+                    private static final long serialVersionUID = -5311898419151367494L;
 
-            private static final long serialVersionUID = -6745431735457245600L;
+                    @Override
+                    protected void restore(final T entity, final AjaxRequestTarget target) {
+                        AuditHistoryDirectoryPanel.this.restore(entity, target);
+                    }
+                }, target);
 
-            @Override
-            public void onClick(final AjaxRequestTarget target, final AuditEntryTO modelObject) {
-                try {
-                    AuditHistoryDirectoryPanel.this.getTogglePanel().close(target);
-
-                    String json = modelObject.getBefore() == null
-                            ? MAPPER.readTree(modelObject.getOutput()).get("entity").toPrettyString()
-                            : modelObject.getBefore();
-                    ProvisioningResult<? extends AnyTO> result = restore(json, anyTO);
-                    anyTO.setLastChangeDate(new Date(Long.parseLong(result.getEntity().getETagValue())));
-
-                    target.add(container);
-                } catch (Exception e) {
-                    LOG.error("While restoring {}", anyTO.getClass().getName(), e);
-                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                            ? e.getClass().getName() : e.getMessage());
-                }
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                target.add(modal);
             }
-        }, ActionLink.ActionType.RESTORE, auditRestoreEntitlement);
+        }, ActionLink.ActionType.VIEW, StandardEntitlement.AUDIT_READ);
 
         return panel;
     }
@@ -240,72 +161,38 @@ public class AuditHistoryDirectoryPanel extends
         return Collections.emptyList();
     }
 
-    private void viewAuditHistory(final AuditEntryTO auditEntryBean, final AjaxRequestTarget target) {
-        List<AuditEntryTO> search = restClient.search(anyTO.getKey(),
-                0,
-                TOTAL_AUDIT_HISTORY_COMPARISONS,
-                getSortParam(),
-                getQueryableAuditEvents(),
-                getQueryableAuditResult());
-
-        multiLevelPanelRef.next(
-                new StringResourceModel("audit.diff.view", this).getObject(),
-                new HistoryAuditDetails(modal, auditEntryBean,
-                        getPage().getPageReference(), toAuditEntryTOs(search), anyTO), target);
-    }
-
-    private List<AuditEntryTO> toAuditEntryTOs(final List<AuditEntryTO> search) {
-        return search
-                .stream()
-                .map(entry -> {
-                    AuditEntryTO bean = new AuditEntryTO();
-                    bean.setKey(anyTO.getKey());
-                    bean.setBefore(entry.getBefore());
-                    bean.setDate(entry.getDate());
-                    bean.setEvent(entry.getEvent());
-                    bean.getInputs().addAll(entry.getInputs());
-                    bean.setLoggerName(entry.getLoggerName());
-                    bean.setOutput(entry.getOutput());
-                    bean.setResult(entry.getResult());
-                    bean.setSubCategory(entry.getSubCategory());
-                    bean.setThrowable(entry.getThrowable());
-                    bean.setWho(entry.getWho());
-                    return bean;
-                })
-                .collect(Collectors.toList());
-    }
-
     protected class AuditHistoryProvider extends DirectoryDataProvider<AuditEntryTO> {
 
         private static final long serialVersionUID = 415113175628260864L;
 
         AuditHistoryProvider(final int paginatorRows) {
             super(paginatorRows);
+            setSort("date", SortOrder.DESCENDING);
         }
 
         @Override
-        public Iterator<? extends AuditEntryTO> iterator(final long first, final long count) {
-            return getAuditEntryBeans(first, count).iterator();
+        public long size() {
+            return restClient.count(entity.getKey(), type, category, EVENTS, AuditElements.Result.SUCCESS);
         }
 
         @Override
-        public long size() {
-            return restClient.count(anyTO.getKey(), getQueryableAuditEvents(), getQueryableAuditResult());
+        public Iterator<AuditEntryTO> iterator(final long first, final long count) {
+            int page = ((int) first / paginatorRows);
+            return restClient.search(
+                    entity.getKey(),
+                    (page < 0 ? 0 : page) + 1,
+                    paginatorRows,
+                    type,
+                    category,
+                    EVENTS,
+                    AuditElements.Result.SUCCESS,
+                    REST_SORT).
+                    iterator();
         }
 
         @Override
         public IModel<AuditEntryTO> model(final AuditEntryTO auditEntryBean) {
             return new CompoundPropertyModel<>(auditEntryBean);
         }
-
-        private List<AuditEntryTO> getAuditEntryBeans(final long first, final long count) {
-            int page = (int) first / paginatorRows;
-            return restClient.search(anyTO.getKey(),
-                    Math.max(page, 0) + 1,
-                    Long.valueOf(count).intValue(),
-                    getSortParam(),
-                    getQueryableAuditEvents(),
-                    getQueryableAuditResult());
-        }
     }
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryModal.java b/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryModal.java
index 7b42c6e..615cecd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/audit/AuditHistoryModal.java
@@ -21,35 +21,45 @@ package org.apache.syncope.client.console.audit;
 import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.EntityTO;
+import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.panel.Panel;
 
-public class AuditHistoryModal<T extends AnyTO> extends Panel implements ModalPanel {
+public abstract class AuditHistoryModal<T extends EntityTO> extends Panel implements ModalPanel {
 
     private static final long serialVersionUID = 1066124171682570080L;
 
-    protected final AuditHistoryDirectoryPanel directoryPanel;
-
     public AuditHistoryModal(
             final BaseModal<?> baseModal,
-            final PageReference pageReference,
-            final T entity) {
+            final AuditElements.EventCategoryType type,
+            final String category,
+            final T entity,
+            final String auditRestoreEntitlement,
+            final PageReference pageRef) {
 
         super(BaseModal.CONTENT_ID);
 
-        final MultilevelPanel mlp = new MultilevelPanel("history");
+        MultilevelPanel mlp = new MultilevelPanel("history");
         mlp.setOutputMarkupId(true);
-        this.directoryPanel = getDirectoryPanel(mlp, baseModal, pageReference, entity);
-        add(mlp.setFirstLevel(this.directoryPanel));
-    }
+        add(mlp.setFirstLevel(new AuditHistoryDirectoryPanel<T>(
+                baseModal,
+                mlp,
+                type,
+                category,
+                entity,
+                auditRestoreEntitlement,
+                pageRef) {
 
-    protected AuditHistoryDirectoryPanel getDirectoryPanel(
-            final MultilevelPanel mlp,
-            final BaseModal<?> baseModal,
-            final PageReference pageReference,
-            final T entity) {
+            private static final long serialVersionUID = 1952220682903768286L;
 
-        return new AuditHistoryDirectoryPanel(baseModal, mlp, pageReference, entity);
+            @Override
+            protected void restore(final T entity, final AjaxRequestTarget target) {
+                AuditHistoryModal.this.restore(entity, target);
+            }
+        }));
     }
+
+    protected abstract void restore(T entity, AjaxRequestTarget target);
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/audit/HistoryAuditDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/audit/HistoryAuditDetails.java
deleted file mode 100644
index a44fbbd..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/audit/HistoryAuditDetails.java
+++ /dev/null
@@ -1,232 +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.console.audit;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.panels.AbstractModalPanel;
-import org.apache.syncope.client.console.panels.MultilevelPanel;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.JsonDiffPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.JsonEditorPanel;
-import org.apache.syncope.common.lib.to.AnyTO;
-import org.apache.syncope.common.lib.to.AuditEntryTO;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.PropertyModel;
-
-public class HistoryAuditDetails extends MultilevelPanel.SecondLevel {
-
-    private static final long serialVersionUID = -7400543686272100483L;
-
-    private static final ObjectMapper MAPPER = new ObjectMapper();
-
-    private static final String KEY_CURRENT = "current";
-
-    private final AuditEntryTO selected;
-
-    private final List<AuditEntryTO> availableTOs;
-
-    private AbstractModalPanel<String> jsonPanel;
-
-    private final AnyTO currentTO;
-
-    public HistoryAuditDetails(
-            final BaseModal<?> baseModal,
-            final AuditEntryTO selected,
-            final PageReference pageRef,
-            final List<AuditEntryTO> availableTOs,
-            final AnyTO currentTO) {
-
-        super();
-        this.availableTOs = availableTOs.stream().
-                filter(object -> !selected.equals(object) && selected.getBefore() != null).
-                collect(Collectors.toList());
-        this.selected = selected;
-        this.currentTO = currentTO;
-
-        addCurrentInstanceConf();
-        Form<?> form = initDropdownDiffConfForm();
-        add(form);
-        form.setVisible(!this.availableTOs.isEmpty());
-
-        showConfigurationSinglePanel();
-    }
-
-    private void showConfigurationSinglePanel() {
-        Pair<String, String> info = getJSONInfo(selected);
-
-        jsonPanel = new JsonEditorPanel(null, new PropertyModel<>(info, "right"), true, null) {
-
-            private static final long serialVersionUID = -8927036362466990179L;
-
-            @Override
-            public void onSubmit(final AjaxRequestTarget target) {
-                modal.close(target);
-            }
-        };
-        jsonPanel.setOutputMarkupId(true);
-
-        addOrReplace(jsonPanel);
-    }
-
-    private void showConfigurationDiffPanel(final List<AuditEntryTO> entries) {
-        List<Pair<String, String>> infos = new ArrayList<>();
-        entries.forEach(entry -> infos.add(getJSONInfo(entry)));
-
-        jsonPanel = new JsonDiffPanel(null, new PropertyModel<>(infos.get(0), "value"),
-                new PropertyModel<>(infos.get(1), "value"), null) {
-
-            private static final long serialVersionUID = -8927036362466990179L;
-
-            @Override
-            public void onSubmit(final AjaxRequestTarget target) {
-                modal.close(target);
-            }
-        };
-
-        replace(jsonPanel);
-    }
-
-    private String getSanitizedTOAsJSON(final AnyTO anyTO) throws Exception {
-        if (anyTO instanceof UserTO) {
-            UserTO userTO = (UserTO) anyTO;
-            userTO.setPassword(null);
-            userTO.setSecurityAnswer(null);
-            return MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(userTO);
-        }
-        return MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(anyTO);
-    }
-
-    private Pair<String, String> getJSONInfo(final AuditEntryTO auditEntryBean) {
-        try {
-            String content = auditEntryBean.getBefore() == null
-                    ? MAPPER.readTree(auditEntryBean.getOutput()).get("entity").toPrettyString()
-                    : auditEntryBean.getBefore();
-
-            AnyTO anyTO = MAPPER.readValue(content, currentTO.getClass());
-            String json = getSanitizedTOAsJSON(anyTO);
-            return Pair.of(auditEntryBean.getKey(), json);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private static <T extends AuditEntryTO> Map<String, String> getDropdownNamesMap(final List<T> entries) {
-        Map<String, String> map = new LinkedHashMap<>();
-        entries.forEach(audit -> {
-            String value = audit.getWho() + " - " + SyncopeConsoleSession.get().getDateFormat().format(audit.getDate());
-            if (audit.getKey().equalsIgnoreCase(KEY_CURRENT)) {
-                value += " - " + audit.getKey();
-            }
-            map.put(audit.getKey(), value);
-        });
-        return map;
-    }
-
-    private Form<?> initDropdownDiffConfForm() {
-        final Form<AuditEntryTO> form = new Form<>("form");
-        form.setModel(new CompoundPropertyModel<>(selected));
-        form.setOutputMarkupId(true);
-
-        Map<String, String> namesMap = getDropdownNamesMap(availableTOs);
-        List<String> keys = new ArrayList<>(namesMap.keySet());
-
-        final AjaxDropDownChoicePanel<String> dropdownElem = new AjaxDropDownChoicePanel<>(
-                "compareDropdown",
-                getString("compare"),
-                new PropertyModel<>(selected, Constants.KEY_FIELD_NAME),
-                false);
-        dropdownElem.setChoices(keys);
-        dropdownElem.setChoiceRenderer(new IChoiceRenderer<String>() {
-
-            private static final long serialVersionUID = -6265603675261014912L;
-
-            @Override
-            public Object getDisplayValue(final String value) {
-                return namesMap.get(value) == null ? value : namesMap.get(value);
-            }
-
-            @Override
-            public String getIdValue(final String value, final int i) {
-                return value;
-            }
-
-            @Override
-            public String getObject(
-                    final String id, final IModel<? extends List<? extends String>> choices) {
-                return id;
-            }
-        });
-        dropdownElem.setNullValid(false);
-        dropdownElem.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-            private static final long serialVersionUID = -1107858522700306810L;
-
-            @Override
-            protected void onUpdate(final AjaxRequestTarget target) {
-                List<AuditEntryTO> elemsToCompare = new ArrayList<>();
-                elemsToCompare.add(selected);
-
-                final String selectedKey = dropdownElem.getModelObject();
-                if (selectedKey != null) {
-                    if (!selectedKey.isEmpty()) {
-                        AuditEntryTO confToCompare = availableTOs.stream().
-                                filter(object -> object.getKey().equals(selectedKey)).findAny().orElse(null);
-                        elemsToCompare.add(confToCompare);
-                        showConfigurationDiffPanel(elemsToCompare);
-                    } else {
-                        showConfigurationSinglePanel();
-                    }
-                }
-                target.add(jsonPanel);
-            }
-        });
-        form.add(dropdownElem);
-
-        return form;
-    }
-
-    private void addCurrentInstanceConf() {
-        try {
-            AuditEntryTO entryBean = new AuditEntryTO();
-            entryBean.setKey(KEY_CURRENT);
-            entryBean.setWho(currentTO.getCreator());
-            entryBean.setDate(currentTO.getCreationDate());
-            entryBean.setBefore(MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(currentTO));
-            availableTOs.add(entryBean);
-        } catch (final Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
index 229af3d..4327d69 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
@@ -36,14 +36,19 @@ import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.any.AnyWrapper;
+import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.patch.AnyObjectPatch;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.types.AnyEntitlement;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.model.CompoundPropertyModel;
@@ -114,24 +119,6 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO, AnyO
                 String.format("%s,%s", AnyEntitlement.READ.getFor(type), AnyEntitlement.UPDATE.getFor(type))).
                 setRealms(realm, model.getObject().getDynRealms());
 
-        panel.add(new ActionLink<AnyObjectTO>() {
-
-            private static final long serialVersionUID = -7978723352517770645L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) {
-                final AnyObjectTO clone = SerializationUtils.clone(model.getObject());
-                clone.setKey(null);
-                send(AnyObjectDirectoryPanel.this, Broadcast.EXACT,
-                        new AjaxWizard.NewItemActionEvent<>(new AnyWrapper<>(clone), target));
-            }
-
-            @Override
-            protected boolean statusCondition(final AnyObjectTO modelObject) {
-                return addAjaxLink.isVisibleInHierarchy() && realm.startsWith(SyncopeConstants.ROOT_REALM);
-            }
-        }, ActionType.CLONE, AnyEntitlement.CREATE.getFor(type)).setRealm(realm);
-
         if (wizardInModal) {
             panel.add(new ActionLink<AnyObjectTO>() {
 
@@ -190,26 +177,69 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO, AnyO
             }, ActionType.NOTIFICATION_TASKS, StandardEntitlement.TASK_LIST);
         }
         panel.add(new ActionLink<AnyObjectTO>() {
+
             private static final long serialVersionUID = -2878723352517770644L;
 
             @Override
             public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) {
-                IModel<AnyWrapper<AnyObjectTO>> formModel = new CompoundPropertyModel<>(
-                    new AnyWrapper<>(new AnyObjectRestClient().read(model.getObject().getKey())));
-                altDefaultModal.setFormModel(formModel);
-
-                target.add(altDefaultModal.setContent(new AuditHistoryModal<>(
-                    altDefaultModal,
-                    pageRef,
-                    formModel.getObject().getInnerObject())));
+                model.setObject(restClient.read(model.getObject().getKey()));
+                target.add(altDefaultModal.setContent(new AuditHistoryModal<AnyObjectTO>(
+                        altDefaultModal,
+                        AuditElements.EventCategoryType.LOGIC,
+                        "AnyObjectLogic",
+                        model.getObject(),
+                        AnyEntitlement.UPDATE.getFor(type),
+                        pageRef) {
+
+                    private static final long serialVersionUID = -7440902560249531201L;
+
+                    @Override
+                    protected void restore(final AnyObjectTO updated, final AjaxRequestTarget target) {
+                        AnyObjectTO original = model.getObject();
+                        try {
+                            AnyObjectPatch anyObjectPatch = AnyOperations.diff(updated, original, false);
+                            ProvisioningResult<AnyObjectTO> result =
+                                    restClient.update(original.getETagValue(), anyObjectPatch);
+                            model.getObject().setLastChangeDate(result.getEntity().getLastChangeDate());
+
+                            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                            target.add(container);
+                        } catch (Exception e) {
+                            LOG.error("While restoring any object {}", model.getObject().getKey(), e);
+                            SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                                    ? e.getClass().getName() : e.getMessage());
+                            throw new WicketRuntimeException(e);
+                        }
+                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                    }
+                }));
 
                 altDefaultModal.header(new StringResourceModel("auditHistory.title", model));
 
                 altDefaultModal.show(true);
             }
-        }, ActionType.VIEW_AUDIT_HISTORY, StandardEntitlement.AUDIT_LIST).
-            setRealms(realm, model.getObject().getDynRealms());
-        
+        }, ActionType.VIEW_AUDIT_HISTORY,
+                String.format("%s,%s", AnyEntitlement.READ.getFor(type), StandardEntitlement.AUDIT_LIST)).
+                setRealms(realm, model.getObject().getDynRealms());
+
+        panel.add(new ActionLink<AnyObjectTO>() {
+
+            private static final long serialVersionUID = -7978723352517770645L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) {
+                final AnyObjectTO clone = SerializationUtils.clone(model.getObject());
+                clone.setKey(null);
+                send(AnyObjectDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.NewItemActionEvent<>(new AnyWrapper<>(clone), target));
+            }
+
+            @Override
+            protected boolean statusCondition(final AnyObjectTO modelObject) {
+                return addAjaxLink.isVisibleInHierarchy() && realm.startsWith(SyncopeConstants.ROOT_REALM);
+            }
+        }, ActionType.CLONE, AnyEntitlement.CREATE.getFor(type)).setRealm(realm);
+
         panel.add(new ActionLink<AnyObjectTO>() {
 
             private static final long serialVersionUID = -7978723352517770646L;
@@ -218,10 +248,11 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO, AnyO
             public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) {
                 try {
                     restClient.delete(model.getObject().getETagValue(), model.getObject().getKey());
+
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
-                    LOG.error("While deleting object {}", model.getObject().getKey(), e);
+                    LOG.error("While deleting any object {}", model.getObject().getKey(), e);
                     SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
                             ? e.getClass().getName() : e.getMessage());
                 }
@@ -233,7 +264,7 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO, AnyO
                 return realm.startsWith(SyncopeConstants.ROOT_REALM);
             }
         }, ActionType.DELETE, AnyEntitlement.DELETE.getFor(type), true).setRealm(realm);
-        
+
         return panel;
     }
 
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
index e01db3a..92fe0fa 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.syncope.client.console.commons.Constants;
@@ -50,10 +49,6 @@ public class AnyTypeClassDetailsPanel extends Panel {
 
     private final List<String> availableVirSchemas = schemaRestClient.getVirSchemaNames();
 
-    private static final List<String> LAYOUT_PARAMETERS =
-            Arrays.asList(new String[] { "admin.user.layout", "self.user.layout",
-        "admin.group.layout", "self.group.layout", "admin.membership.layout", "self.membership.layout" });
-
     public AnyTypeClassDetailsPanel(final String id, final AnyTypeClassTO anyTypeClassTO) {
         super(id);
 
@@ -109,7 +104,6 @@ public class AnyTypeClassDetailsPanel extends Panel {
     }
 
     private void buildAvailableSchemas(final String key) {
-
         List<String> configurationSchemas = new ConfRestClient().list().stream().
                 map(AttrTO::getSchema).collect(Collectors.toList());
 
@@ -122,6 +116,5 @@ public class AnyTypeClassDetailsPanel extends Panel {
                 });
 
         availablePlainSchemas.removeAll(configurationSchemas);
-        availablePlainSchemas.removeAll(LAYOUT_PARAMETERS);
     }
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
deleted file mode 100644
index e366891..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
+++ /dev/null
@@ -1,229 +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.console.panels;
-
-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.Constants;
-import org.apache.syncope.client.console.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
-import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.panels.ConnInstanceHistoryConfDirectoryPanel.CHConfProvider;
-import org.apache.syncope.client.console.rest.ConnectorHistoryRestClient;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
-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.ActionLink.ActionType;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
-import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.event.IEvent;
-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.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.StringResourceModel;
-
-/**
- * List all connector configuration history instances for the selected connector.
- */
-public abstract class ConnInstanceHistoryConfDirectoryPanel extends DirectoryPanel<
-        ConnInstanceHistoryConfTO, ConnInstanceHistoryConfTO, CHConfProvider, ConnectorHistoryRestClient>
-        implements ModalPanel {
-
-    private static final long serialVersionUID = 4984337552918213290L;
-
-    protected final BaseModal<?> baseModal;
-
-    private final MultilevelPanel multiLevelPanelRef;
-
-    private final String entityKey;
-
-    public ConnInstanceHistoryConfDirectoryPanel(
-            final BaseModal<?> baseModal,
-            final MultilevelPanel multiLevelPanelRef,
-            final String entityKey,
-            final PageReference pageRef) {
-
-        super(MultilevelPanel.FIRST_LEVEL_ID, pageRef, false, false);
-
-        this.baseModal = baseModal;
-        this.multiLevelPanelRef = multiLevelPanelRef;
-        restClient = new ConnectorHistoryRestClient();
-        setShowResultPage(false);
-        disableCheckBoxes();
-
-        this.entityKey = entityKey;
-        initResultTable();
-    }
-
-    @Override
-    protected List<IColumn<ConnInstanceHistoryConfTO, String>> getColumns() {
-        final List<IColumn<ConnInstanceHistoryConfTO, String>> columns = new ArrayList<>();
-
-        columns.add(new KeyPropertyColumn<>(
-                new StringResourceModel(Constants.KEY_FIELD_NAME, this), Constants.KEY_FIELD_NAME));
-
-        columns.add(new PropertyColumn<>(new StringResourceModel(
-                "creator", this), "creator", "creator"));
-
-        columns.add(new DatePropertyColumn<>(
-                new StringResourceModel("creation", this), "creation", "creation"));
-
-        return columns;
-    }
-
-    @Override
-    public ActionsPanel<ConnInstanceHistoryConfTO> getActions(final IModel<ConnInstanceHistoryConfTO> model) {
-        final ActionsPanel<ConnInstanceHistoryConfTO> panel = super.getActions(model);
-        final ConnInstanceHistoryConfTO connHistoryConfTO = model.getObject();
-
-        // -- view
-        panel.add(new ActionLink<ConnInstanceHistoryConfTO>() {
-
-            private static final long serialVersionUID = -6745431735457245600L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final ConnInstanceHistoryConfTO modelObject) {
-
-                ConnInstanceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
-                viewConfiguration(modelObject, target);
-                target.add(modal);
-            }
-        }, ActionLink.ActionType.VIEW, StandardEntitlement.CONNECTOR_HISTORY_LIST);
-
-        // -- restore
-        panel.add(new ActionLink<ConnInstanceHistoryConfTO>() {
-
-            private static final long serialVersionUID = -6745431735457245600L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final ConnInstanceHistoryConfTO modelObject) {
-                try {
-                    restClient.restore(modelObject.getKey());
-                    ConnInstanceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
-                    target.add(container);
-                } catch (SyncopeClientException e) {
-                    LOG.error("While restoring {}", connHistoryConfTO.getKey(), e);
-                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                            ? e.getClass().getName() : e.getMessage());
-                }
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-            }
-        }, ActionLink.ActionType.RESTORE, StandardEntitlement.CONNECTOR_HISTORY_RESTORE);
-
-        // -- delete
-        panel.add(new ActionLink<ConnInstanceHistoryConfTO>() {
-
-            private static final long serialVersionUID = -6745431735457245600L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final ConnInstanceHistoryConfTO modelObject) {
-                try {
-                    restClient.delete(modelObject.getKey());
-                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                    target.add(container);
-                    ConnInstanceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
-                } catch (SyncopeClientException e) {
-                    LOG.error("While deleting {}", connHistoryConfTO.getKey(), e);
-                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                            ? e.getClass().getName() : e.getMessage());
-                }
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-            }
-        }, ActionLink.ActionType.DELETE, StandardEntitlement.CONNECTOR_HISTORY_DELETE, true);
-
-        return panel;
-    }
-
-    @Override
-    protected Collection<ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
-    }
-
-    @Override
-    protected String paginatorRowsKey() {
-        return Constants.PREF_CONNECTOR_HISTORY_CONF_PAGINATOR_ROWS;
-    }
-
-    protected abstract void viewConfiguration(ConnInstanceHistoryConfTO connHistoryTO, AjaxRequestTarget target);
-
-    @Override
-    protected void resultTableCustomChanges(
-            final AjaxDataTablePanel.Builder<ConnInstanceHistoryConfTO, String> resultTableBuilder) {
-        resultTableBuilder.setMultiLevelPanel(baseModal, multiLevelPanelRef);
-    }
-
-    @Override
-    protected CHConfProvider dataProvider() {
-        return new CHConfProvider(rows);
-    }
-
-    @Override
-    public void onEvent(final IEvent<?> event) {
-        super.onEvent(event);
-        if (event.getPayload() instanceof ExitEvent && modal != null) {
-            final AjaxRequestTarget target = ExitEvent.class.cast(event.getPayload()).getTarget();
-            baseModal.show(false);
-            baseModal.close(target);
-        }
-    }
-
-    protected class CHConfProvider extends DirectoryDataProvider<ConnInstanceHistoryConfTO> {
-
-        private static final long serialVersionUID = -4402560904215049574L;
-
-        private final SortableDataProviderComparator<ConnInstanceHistoryConfTO> comparator;
-
-        public CHConfProvider(final int paginatorRows) {
-            super(paginatorRows);
-
-            setSort("creation", SortOrder.ASCENDING);
-            comparator = new SortableDataProviderComparator<>(this);
-        }
-
-        @Override
-        public Iterator<ConnInstanceHistoryConfTO> iterator(final long first, final long count) {
-            final List<ConnInstanceHistoryConfTO> configurations = restClient.list(entityKey);
-
-            Collections.sort(configurations, comparator);
-            return configurations.iterator();
-        }
-
-        @Override
-        public long size() {
-            return restClient.list(entityKey).size();
-        }
-
-        @Override
-        public IModel<ConnInstanceHistoryConfTO> model(final ConnInstanceHistoryConfTO object) {
-            return new CompoundPropertyModel<>(object);
-        }
-    }
-}
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
index c2ef5e5..f06b07e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.util.Collection;
@@ -57,6 +58,8 @@ public abstract class DirectoryPanel<
 
     protected static final Logger LOG = LoggerFactory.getLogger(DirectoryPanel.class);
 
+    protected static final ObjectMapper MAPPER = new ObjectMapper();
+
     /**
      * Application preferences.
      */
@@ -87,7 +90,7 @@ public abstract class DirectoryPanel<
     /**
      * Result table.
      */
-    private AjaxDataTablePanel<T, String> resultTable;
+    protected AjaxDataTablePanel<T, String> resultTable;
 
     /**
      * Data provider used to search for entities.
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
index 0091949..93d9f03 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
@@ -45,14 +45,18 @@ import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.any.AnyWrapper;
 import org.apache.syncope.client.console.wizards.any.GroupWrapper;
 import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.patch.GroupPatch;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
 import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyEntitlement;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.lib.types.ProvisionAction;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.PageReference;
@@ -223,24 +227,6 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
 
             @Override
             public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
-                GroupTO clone = SerializationUtils.clone(model.getObject());
-                clone.setKey(null);
-                send(GroupDirectoryPanel.this, Broadcast.EXACT,
-                        new AjaxWizard.NewItemActionEvent<>(new GroupWrapper(clone), target));
-            }
-
-            @Override
-            protected boolean statusCondition(final GroupTO modelObject) {
-                return realm.startsWith(SyncopeConstants.ROOT_REALM);
-            }
-        }, ActionType.CLONE, StandardEntitlement.GROUP_CREATE).setRealm(realm);
-
-        panel.add(new ActionLink<GroupTO>() {
-
-            private static final long serialVersionUID = 6242834621660352855L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
                 target.add(typeExtensionsModal.setContent(new TypeExtensionDirectoryPanel(
                         typeExtensionsModal, model.getObject(), pageRef)));
                 typeExtensionsModal.header(new StringResourceModel("typeExtensions", model));
@@ -367,33 +353,76 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
 
             @Override
             public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
-                IModel<GroupWrapper> formModel = new CompoundPropertyModel<>(
-                        new GroupWrapper(new GroupRestClient().read(model.getObject().getKey())));
-                target.add(altDefaultModal.setContent(new AuditHistoryModal<>(
+                model.setObject(restClient.read(model.getObject().getKey()));
+                target.add(altDefaultModal.setContent(new AuditHistoryModal<GroupTO>(
                         altDefaultModal,
-                        pageRef,
-                        formModel.getObject().getInnerObject())));
+                        AuditElements.EventCategoryType.LOGIC,
+                        "GroupLogic",
+                        model.getObject(),
+                        StandardEntitlement.GROUP_UPDATE,
+                        pageRef) {
+
+                    private static final long serialVersionUID = -5819724478921691835L;
+
+                    @Override
+                    protected void restore(final GroupTO updated, final AjaxRequestTarget target) {
+                        GroupTO original = model.getObject();
+                        try {
+                            GroupPatch groupPatch = AnyOperations.diff(updated, original, false);
+                            ProvisioningResult<GroupTO> result = restClient.update(original.getETagValue(), groupPatch);
+                            model.getObject().setLastChangeDate(result.getEntity().getLastChangeDate());
+
+                            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                            target.add(container);
+                        } catch (Exception e) {
+                            LOG.error("While restoring group {}", model.getObject().getKey(), e);
+                            SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                                    ? e.getClass().getName() : e.getMessage());
+                        }
+                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                    }
+                }));
 
                 altDefaultModal.header(new Model<>(
                         getString("auditHistory.title", new Model<>(new AnyWrapper<>(model.getObject())))));
 
                 altDefaultModal.show(true);
             }
-        }, ActionType.VIEW_AUDIT_HISTORY, StandardEntitlement.AUDIT_LIST).
+        }, ActionType.VIEW_AUDIT_HISTORY,
+                String.format("%s,%s", StandardEntitlement.GROUP_READ, StandardEntitlement.AUDIT_LIST)).
                 setRealms(realm, model.getObject().getDynRealms());
 
         panel.add(new ActionLink<GroupTO>() {
 
+            private static final long serialVersionUID = 6242834621660352855L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
+                GroupTO clone = SerializationUtils.clone(model.getObject());
+                clone.setKey(null);
+                send(GroupDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.NewItemActionEvent<>(new GroupWrapper(clone), target));
+            }
+
+            @Override
+            protected boolean statusCondition(final GroupTO modelObject) {
+                return realm.startsWith(SyncopeConstants.ROOT_REALM);
+            }
+        }, ActionType.CLONE, StandardEntitlement.GROUP_CREATE).setRealm(realm);
+
+        panel.add(new ActionLink<GroupTO>() {
+
             private static final long serialVersionUID = -7978723352517770644L;
 
             @Override
             public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
                 try {
                     restClient.delete(model.getObject().getETagValue(), model.getObject().getKey());
+
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
-                    LOG.error("While deleting object {}", model.getObject().getKey(), e);
+                    LOG.error("While deleting group {}", model.getObject().getKey(), e);
                     SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
                             ? e.getClass().getName() : e.getMessage());
                 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfDetails.java
deleted file mode 100644
index bb6ba40..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfDetails.java
+++ /dev/null
@@ -1,247 +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.console.panels;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.rest.ConnectorRestClient;
-import org.apache.syncope.client.console.rest.ResourceRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.JsonDiffPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.JsonEditorPanel;
-import org.apache.syncope.common.lib.to.AbstractHistoryConf;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.PropertyModel;
-
-public class HistoryConfDetails<T extends AbstractHistoryConf> extends MultilevelPanel.SecondLevel {
-
-    private static final long serialVersionUID = -7400543686272100483L;
-
-    private static final ObjectMapper MAPPER = new ObjectMapper();
-
-    private final T selectedHistoryConfTO;
-
-    private final List<T> availableHistoryConfTOs;
-
-    private AbstractModalPanel<String> jsonPanel;
-
-    public HistoryConfDetails(final BaseModal<?> baseModal, final T selectedHistoryConfTO,
-            final PageReference pageRef, final List<T> availableHistoryConfTOs) {
-        super();
-
-        // remove selected conf from list
-        this.availableHistoryConfTOs = availableHistoryConfTOs.stream().
-                filter(object -> !object.getKey().equals(selectedHistoryConfTO.getKey())).collect(Collectors.toList());
-        this.selectedHistoryConfTO = selectedHistoryConfTO;
-
-        // add current conf to list
-        addCurrentInstanceConf();
-
-        Form<?> form = initDropdownDiffConfForm();
-        add(form);
-        form.setVisible(!availableHistoryConfTOs.isEmpty());
-
-        showConfigurationSinglePanel();
-    }
-
-    private void showConfigurationSinglePanel() {
-        Pair<String, String> info = getJSONInfo(selectedHistoryConfTO);
-
-        jsonPanel = new JsonEditorPanel(null, new PropertyModel<String>(info, "right"), true, null) {
-
-            private static final long serialVersionUID = -8927036362466990179L;
-
-            @Override
-            public void onSubmit(final AjaxRequestTarget target) {
-                modal.close(target);
-            }
-        };
-        jsonPanel.setOutputMarkupId(true);
-
-        addOrReplace(jsonPanel);
-    }
-
-    private void showConfigurationDiffPanel(final List<T> historyConfTOs) {
-        List<Pair<String, String>> infos = new ArrayList<>();
-        historyConfTOs.forEach(historyConfTO -> {
-            infos.add(getJSONInfo(historyConfTO));
-        });
-
-        jsonPanel = new JsonDiffPanel(null, new PropertyModel<String>(infos.get(0), "value"),
-                new PropertyModel<String>(infos.get(1), "value"), null) {
-
-            private static final long serialVersionUID = -8927036362466990179L;
-
-            @Override
-            public void onSubmit(final AjaxRequestTarget target) {
-                modal.close(target);
-            }
-        };
-
-        replace(jsonPanel);
-    }
-
-    private Pair<String, String> getJSONInfo(final T historyConfTO) {
-        Object conf = null; // selected configuration instance
-        String key = "";
-        if (historyConfTO instanceof ConnInstanceHistoryConfTO) {
-            ConnInstanceHistoryConfTO historyConf = ConnInstanceHistoryConfTO.class.cast(historyConfTO);
-            conf = historyConf.getConnInstanceTO();
-            key = historyConf.getKey();
-        } else if (historyConfTO instanceof ResourceHistoryConfTO) {
-            ResourceHistoryConfTO historyConf = ResourceHistoryConfTO.class.cast(historyConfTO);
-            conf = historyConf.getResourceTO();
-            key = historyConf.getKey();
-        }
-
-        String json = "";
-        try {
-            json = MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(conf);
-        } catch (IOException ex) {
-            DirectoryPanel.LOG.error("Error converting objects to JSON", ex);
-        }
-
-        return Pair.of(key, json);
-    }
-
-    private <T extends AbstractHistoryConf> Map<String, String> getDropdownNamesMap(final List<T> historyConfTOs) {
-        Map<String, String> historyConfMap = new LinkedHashMap<>();
-
-        String current = null;
-        for (T historyConf : historyConfTOs) {
-            if (historyConf.getCreation() == null) {
-                current = historyConf.getKey();
-            } else {
-                historyConfMap.put(historyConf.getKey(), historyConf.getCreator() + " - "
-                        + SyncopeConsoleSession.get().getDateFormat().format(
-                                historyConf.getCreation()) + " - " + historyConf.getKey());
-            }
-        }
-        if (current != null) {
-            historyConfMap.put(current, getString("current"));
-        }
-
-        return historyConfMap;
-    }
-
-    private Form<?> initDropdownDiffConfForm() {
-        final Form<T> form = new Form<>("form");
-        form.setModel(new CompoundPropertyModel<>(selectedHistoryConfTO));
-        form.setOutputMarkupId(true);
-
-        final Map<String, String> namesMap = getDropdownNamesMap(availableHistoryConfTOs);
-        List<String> keys = new ArrayList<>(namesMap.keySet());
-
-        final AjaxDropDownChoicePanel<String> dropdownElem = new AjaxDropDownChoicePanel<>(
-                "compareDropdown",
-                getString("compare"),
-                new PropertyModel<>(selectedHistoryConfTO, Constants.KEY_FIELD_NAME),
-                false);
-        dropdownElem.setChoices(keys);
-        dropdownElem.setChoiceRenderer(new IChoiceRenderer<String>() {
-
-            private static final long serialVersionUID = -6265603675261014912L;
-
-            @Override
-            public Object getDisplayValue(final String value) {
-                return namesMap.get(value) == null ? value : namesMap.get(value);
-            }
-
-            @Override
-            public String getIdValue(final String value, final int i) {
-                return value;
-            }
-
-            @Override
-            public String getObject(
-                    final String id, final IModel<? extends List<? extends String>> choices) {
-                return id;
-            }
-        });
-        dropdownElem.setNullValid(true);
-        dropdownElem.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-            private static final long serialVersionUID = -1107858522700306810L;
-
-            @Override
-            protected void onUpdate(final AjaxRequestTarget target) {
-                List<T> elemsToCompare = new ArrayList<>();
-                elemsToCompare.add(selectedHistoryConfTO);
-
-                final String selectedKey = dropdownElem.getModelObject();
-                if (selectedKey != null) {
-                    if (!selectedKey.isEmpty()) {
-                        T confToCompare = availableHistoryConfTOs.stream().
-                                filter(object -> object.getKey().equals(selectedKey)).findAny().orElse(null);
-                        elemsToCompare.add(confToCompare);
-                        showConfigurationDiffPanel(elemsToCompare);
-                    } else {
-                        showConfigurationSinglePanel();
-                    }
-                }
-                target.add(jsonPanel);
-            }
-        });
-        form.add(dropdownElem);
-
-        return form;
-    }
-
-    @SuppressWarnings("unchecked")
-    private void addCurrentInstanceConf() {
-        T conf = null;
-
-        if (selectedHistoryConfTO instanceof ConnInstanceHistoryConfTO) {
-            ConnInstanceTO current = new ConnectorRestClient().read(
-                    ConnInstanceHistoryConfTO.class.cast(selectedHistoryConfTO).getConnInstanceTO().getKey());
-            conf = (T) new ConnInstanceHistoryConfTO();
-            ((ConnInstanceHistoryConfTO) conf).setConnInstanceTO(current);
-        } else if (selectedHistoryConfTO instanceof ResourceHistoryConfTO) {
-            ResourceTO current = new ResourceRestClient().read(
-                    ResourceHistoryConfTO.class.cast(selectedHistoryConfTO).getResourceTO().getKey());
-            conf = (T) new ResourceHistoryConfTO();
-            ((ResourceHistoryConfTO) conf).setResourceTO(current);
-        }
-
-        if (conf != null) {
-            conf.setCreator(selectedHistoryConfTO.getCreator());
-            conf.setKey("current");
-            availableHistoryConfTOs.add(conf);
-        }
-    }
-}
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfList.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfList.java
deleted file mode 100644
index 5848b7a..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfList.java
+++ /dev/null
@@ -1,74 +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.console.panels;
-
-import java.io.Serializable;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.common.lib.to.AnyTO;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.common.lib.to.EntityTO;
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.StringResourceModel;
-
-public class HistoryConfList<T extends Serializable> extends Panel implements ModalPanel {
-
-    private static final long serialVersionUID = 2482507052037665907L;
-
-    public <T extends AnyTO> HistoryConfList(
-            final BaseModal<?> baseModal,
-            final String entityKey,
-            final PageReference pageReference,
-            final EntityTO modelObj) {
-
-        super(BaseModal.CONTENT_ID);
-
-        final MultilevelPanel mlp = new MultilevelPanel("history");
-
-        mlp.setFirstLevel(modelObj instanceof ConnInstanceTO
-                ? new ConnInstanceHistoryConfDirectoryPanel(baseModal, mlp, entityKey, pageReference) {
-
-            private static final long serialVersionUID = 1422189028000709100L;
-
-            @Override
-            protected void viewConfiguration(final ConnInstanceHistoryConfTO historyTO,
-                    final AjaxRequestTarget target) {
-                mlp.next(
-                        new StringResourceModel("history.diff.view", this).getObject(),
-                        new HistoryConfDetails<>(modal, historyTO, pageReference, restClient.list(entityKey)), target);
-            }
-        } : new ResourceHistoryConfDirectoryPanel(baseModal, mlp, entityKey, pageReference) {
-
-            private static final long serialVersionUID = 1422189028000709100L;
-
-            @Override
-            protected void viewConfiguration(final ResourceHistoryConfTO historyTO,
-                    final AjaxRequestTarget target) {
-                mlp.next(
-                        new StringResourceModel("history.diff.view", this).getObject(),
-                        new HistoryConfDetails<>(modal, historyTO, pageReference, restClient.list(entityKey)), target);
-            }
-        });
-
-        add(mlp);
-    }
-}
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
index da7569d..b5de68f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import static org.apache.syncope.client.console.panels.AbstractModalPanel.LOG;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -54,11 +52,15 @@ import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.StringResourceModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class LinkedAccountModalPanel extends Panel implements ModalPanel {
 
     private static final long serialVersionUID = -4603032036433309900L;
 
+    private static final Logger LOG = LoggerFactory.getLogger(LinkedAccountModalPanel.class);
+
     private final LinkedAccountWizardBuilder wizard;
 
     private final WizardMgtPanel<LinkedAccountTO> list;
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
deleted file mode 100644
index a1cfeb7..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
+++ /dev/null
@@ -1,230 +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.console.panels;
-
-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.Constants;
-import org.apache.syncope.client.console.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
-import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.panels.ResourceHistoryConfDirectoryPanel.RHConfProvider;
-import org.apache.syncope.client.console.rest.ResourceHistoryRestClient;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
-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.ActionLink.ActionType;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
-import org.apache.syncope.client.console.wizards.WizardMgtPanel;
-import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.event.IEvent;
-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.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.StringResourceModel;
-
-/**
- * List all resource configuration history instances for the selected resource.
- */
-public abstract class ResourceHistoryConfDirectoryPanel extends DirectoryPanel<
-        ResourceHistoryConfTO, ResourceHistoryConfTO, RHConfProvider, ResourceHistoryRestClient>
-        implements ModalPanel {
-
-    private static final long serialVersionUID = 7636531280703026376L;
-
-    protected final BaseModal<?> baseModal;
-
-    private final MultilevelPanel multiLevelPanelRef;
-
-    private final String entityKey;
-
-    public ResourceHistoryConfDirectoryPanel(
-            final BaseModal<?> baseModal,
-            final MultilevelPanel multiLevelPanelRef,
-            final String entityKey,
-            final PageReference pageRef) {
-
-        super(MultilevelPanel.FIRST_LEVEL_ID, pageRef, false, false);
-
-        this.baseModal = baseModal;
-        this.multiLevelPanelRef = multiLevelPanelRef;
-        restClient = new ResourceHistoryRestClient();
-        setShowResultPage(false);
-        disableCheckBoxes();
-
-        this.entityKey = entityKey;
-        initResultTable();
-    }
-
-    @Override
-    protected List<IColumn<ResourceHistoryConfTO, String>> getColumns() {
-        final List<IColumn<ResourceHistoryConfTO, String>> columns = new ArrayList<>();
-
-        columns.add(new KeyPropertyColumn<>(
-                new StringResourceModel(Constants.KEY_FIELD_NAME, this), Constants.KEY_FIELD_NAME));
-
-        columns.add(new PropertyColumn<>(new StringResourceModel(
-                "creator", this), "creator", "creator"));
-
-        columns.add(new DatePropertyColumn<>(
-                new StringResourceModel("creation", this), "creation", "creation"));
-
-        return columns;
-    }
-
-    @Override
-    public ActionsPanel<ResourceHistoryConfTO> getActions(final IModel<ResourceHistoryConfTO> model) {
-        final ActionsPanel<ResourceHistoryConfTO> panel = super.getActions(model);
-        final ResourceHistoryConfTO resHistoryConfTO = model.getObject();
-
-        // -- view
-        panel.add(new ActionLink<ResourceHistoryConfTO>() {
-
-            private static final long serialVersionUID = -3369924994540304232L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final ResourceHistoryConfTO modelObject) {
-
-                ResourceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
-                viewConfiguration(modelObject, target);
-                target.add(modal);
-            }
-        }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_HISTORY_LIST);
-
-        // -- restore
-        panel.add(new ActionLink<ResourceHistoryConfTO>() {
-
-            private static final long serialVersionUID = -3369924994540304232L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final ResourceHistoryConfTO modelObject) {
-                try {
-                    restClient.restore(modelObject.getKey());
-                    ResourceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
-                    target.add(container);
-                } catch (SyncopeClientException e) {
-                    LOG.error("While restoring {}", resHistoryConfTO.getKey(), e);
-                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                            ? e.getClass().getName() : e.getMessage());
-                }
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-            }
-        }, ActionLink.ActionType.RESTORE, StandardEntitlement.RESOURCE_HISTORY_RESTORE);
-
-        // -- delete
-        panel.add(new ActionLink<ResourceHistoryConfTO>() {
-
-            private static final long serialVersionUID = -3369924994540304232L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final ResourceHistoryConfTO modelObject) {
-                try {
-                    restClient.delete(modelObject.getKey());
-                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
-                    target.add(container);
-                    ResourceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
-                } catch (SyncopeClientException e) {
-                    LOG.error("While deleting {}", resHistoryConfTO.getKey(), e);
-                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
-                            ? e.getClass().getName() : e.getMessage());
-                }
-                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-            }
-        }, ActionLink.ActionType.DELETE, StandardEntitlement.RESOURCE_HISTORY_DELETE, true);
-
-        return panel;
-    }
-
-    @Override
-    protected Collection<ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
-    }
-
-    @Override
-    protected String paginatorRowsKey() {
-        return Constants.PREF_RESOURCE_HISTORY_CONF_PAGINATOR_ROWS;
-    }
-
-    protected abstract void viewConfiguration(ResourceHistoryConfTO resHistoryTO, AjaxRequestTarget target);
-
-    @Override
-    protected void resultTableCustomChanges(
-            final AjaxDataTablePanel.Builder<ResourceHistoryConfTO, String> resultTableBuilder) {
-        resultTableBuilder.setMultiLevelPanel(baseModal, multiLevelPanelRef);
-    }
-
-    @Override
-    protected RHConfProvider dataProvider() {
-        return new RHConfProvider(rows);
-    }
-
-    @Override
-    public void onEvent(final IEvent<?> event) {
-        super.onEvent(event);
-        if (event.getPayload() instanceof WizardMgtPanel.ExitEvent && modal != null) {
-            final AjaxRequestTarget target = WizardMgtPanel.ExitEvent.class.cast(event.getPayload()).getTarget();
-            baseModal.show(false);
-            baseModal.close(target);
-        }
-    }
-
-    protected class RHConfProvider extends DirectoryDataProvider<ResourceHistoryConfTO> {
-
-        private static final long serialVersionUID = -5244315453787001412L;
-
-        private final SortableDataProviderComparator<ResourceHistoryConfTO> comparator;
-
-        public RHConfProvider(final int paginatorRows) {
-            super(paginatorRows);
-
-            setSort("creation", SortOrder.ASCENDING);
-            comparator = new SortableDataProviderComparator<>(this);
-        }
-
-        @Override
-        public Iterator<ResourceHistoryConfTO> iterator(final long first, final long count) {
-            final List<ResourceHistoryConfTO> configurations = restClient.list(entityKey);
-
-            Collections.sort(configurations, comparator);
-            return configurations.iterator();
-        }
-
-        @Override
-        public long size() {
-            return restClient.list(entityKey).size();
-        }
-
-        @Override
-        public IModel<ResourceHistoryConfTO> model(final ResourceHistoryConfTO object) {
-            return new CompoundPropertyModel<>(object);
-        }
-    }
-}
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index eb42741..79b2607 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -42,13 +42,18 @@ import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.any.AnyWrapper;
 import org.apache.syncope.client.console.wizards.any.UserWrapper;
+import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.rest.api.service.UserSelfService;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
@@ -155,7 +160,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO, UserRestClient
     @Override
     public ActionsPanel<UserTO> getActions(final IModel<UserTO> model) {
         final ActionsPanel<UserTO> panel = super.getActions(model);
-         
+
         panel.add(new ActionLink<UserTO>() {
 
             private static final long serialVersionUID = -7978723352517770644L;
@@ -164,7 +169,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO, UserRestClient
             public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
                 send(UserDirectoryPanel.this, Broadcast.EXACT,
                         new AjaxWizard.EditItemActionEvent<>(
-                                new UserWrapper(UserRestClient.class.cast(restClient).read(model.getObject().getKey())),
+                                new UserWrapper(restClient.read(model.getObject().getKey())),
                                 target));
             }
         }, ActionType.EDIT,
@@ -177,27 +182,8 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO, UserRestClient
 
             @Override
             public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
-                UserTO clone = SerializationUtils.clone(model.getObject());
-                clone.setKey(null);
-                clone.setUsername(model.getObject().getUsername() + "_clone");
-                send(UserDirectoryPanel.this, Broadcast.EXACT,
-                        new AjaxWizard.NewItemActionEvent<>(new UserWrapper(clone), target));
-            }
-
-            @Override
-            protected boolean statusCondition(final UserTO modelObject) {
-                return addAjaxLink.isVisibleInHierarchy() && realm.startsWith(SyncopeConstants.ROOT_REALM);
-            }
-        }, ActionType.CLONE, StandardEntitlement.USER_CREATE).setRealm(realm);
-
-        panel.add(new ActionLink<UserTO>() {
-
-            private static final long serialVersionUID = -7978723352517770644L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
                 try {
-                    UserRestClient.class.cast(restClient).mustChangePassword(
+                    restClient.mustChangePassword(
                             model.getObject().getETagValue(),
                             !model.getObject().isMustChangePassword(),
                             model.getObject().getKey());
@@ -295,7 +281,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO, UserRestClient
 
                 @Override
                 public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
-                    model.setObject(UserRestClient.class.cast(restClient).read(model.getObject().getKey()));
+                    model.setObject(restClient.read(model.getObject().getKey()));
                     IModel<AnyWrapper<UserTO>> formModel = new CompoundPropertyModel<>(
                             new AnyWrapper<>(model.getObject()));
                     altDefaultModal.setFormModel(formModel);
@@ -351,7 +337,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO, UserRestClient
 
                 @Override
                 public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
-                    model.setObject(UserRestClient.class.cast(restClient).read(model.getObject().getKey()));
+                    model.setObject(restClient.read(model.getObject().getKey()));
                     target.add(wizardWrapperModal.setContent(
                             new LinkedAccountModalPanel(wizardWrapperModal, model, pageRef, false)));
                     wizardWrapperModal.header(new ResourceModel("linkedAccounts.title"));
@@ -368,20 +354,72 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO, UserRestClient
 
             @Override
             public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
-                IModel<UserWrapper> formModel = new CompoundPropertyModel<>(
-                    new UserWrapper(new UserRestClient().read(model.getObject().getKey())));
-                target.add(altDefaultModal.setContent(new AuditHistoryModal<>(
-                    altDefaultModal,
-                    pageRef,
-                    formModel.getObject().getInnerObject())));
+                model.setObject(restClient.read(model.getObject().getKey()));
+                target.add(altDefaultModal.setContent(new AuditHistoryModal<UserTO>(
+                        altDefaultModal,
+                        AuditElements.EventCategoryType.LOGIC,
+                        "UserLogic",
+                        model.getObject(),
+                        StandardEntitlement.USER_UPDATE,
+                        pageRef) {
+
+                    private static final long serialVersionUID = 959378158400669867L;
+
+                    @Override
+                    protected void restore(final UserTO updated, final AjaxRequestTarget target) {
+                        // The original audit record masks the password and the security
+                        // answer; so we cannot use the audit record to resurrect the entry based on mask data.
+                        //
+                        // The method behavior below will reset the audit record such that the current security
+                        // answer and the password for the object are always maintained, and such properties for the
+                        // user cannot be restored using audit records.
+                        UserTO original = model.getObject();
+                        try {
+                            UserPatch userPatch = AnyOperations.diff(updated, original, false);
+                            userPatch.setPassword(null);
+                            userPatch.setSecurityAnswer(null);
+                            ProvisioningResult<UserTO> result = restClient.update(original.getETagValue(), userPatch);
+                            model.getObject().setLastChangeDate(result.getEntity().getLastChangeDate());
+
+                            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                            target.add(container);
+                        } catch (Exception e) {
+                            LOG.error("While restoring user {}", model.getObject().getKey(), e);
+                            SyncopeConsoleSession.get().error(
+                                    StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
+                            throw new WicketRuntimeException(e);
+                        }
+                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                    }
+                }));
 
                 altDefaultModal.header(new Model<>(
-                    getString("auditHistory.title", new Model<>(new AnyWrapper<>(model.getObject())))));
+                        getString("auditHistory.title", new Model<>(new AnyWrapper<>(model.getObject())))));
 
                 altDefaultModal.show(true);
             }
-        }, ActionType.VIEW_AUDIT_HISTORY, StandardEntitlement.AUDIT_LIST).
-            setRealms(realm, model.getObject().getDynRealms());
+        }, ActionType.VIEW_AUDIT_HISTORY,
+                String.format("%s,%s", StandardEntitlement.USER_READ, StandardEntitlement.AUDIT_LIST)).
+                setRealms(realm, model.getObject().getDynRealms());
+
+        panel.add(new ActionLink<UserTO>() {
+
+            private static final long serialVersionUID = -7978723352517770644L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
+                UserTO clone = SerializationUtils.clone(model.getObject());
+                clone.setKey(null);
+                clone.setUsername(model.getObject().getUsername() + "_clone");
+                send(UserDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.NewItemActionEvent<>(new UserWrapper(clone), target));
+            }
+
+            @Override
+            protected boolean statusCondition(final UserTO modelObject) {
+                return addAjaxLink.isVisibleInHierarchy() && realm.startsWith(SyncopeConstants.ROOT_REALM);
+            }
+        }, ActionType.CLONE, StandardEntitlement.USER_CREATE).setRealm(realm);
 
         panel.add(new ActionLink<UserTO>() {
 
@@ -395,7 +433,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO, UserRestClient
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (Exception e) {
-                    LOG.error("While deleting object {}", model.getObject().getKey(), e);
+                    LOG.error("While deleting user {}", model.getObject().getKey(), e);
                     SyncopeConsoleSession.get().error(
                             StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
                 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
index 3a14f41..5160359 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.policies;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -77,8 +76,6 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
 
     private static final long serialVersionUID = 4984337552918213290L;
 
-    private static final ObjectMapper MAPPER = new ObjectMapper();
-
     private final BaseModal<T> baseModal;
 
     private final PolicyType type;
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleWizardBuilder.java
index 855837e..982a496 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleWizardBuilder.java
@@ -38,6 +38,7 @@ import org.apache.syncope.common.lib.types.ImplementationEngine;
 import org.apache.syncope.common.lib.types.ImplementationType;
 import org.apache.syncope.common.lib.types.PolicyType;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.wizard.WizardModel;
@@ -93,7 +94,7 @@ public class PolicyRuleWizardBuilder extends AjaxWizardBuilder<PolicyRuleWrapper
                 rule.setBody(MAPPER.writeValueAsString(modelObject.getConf()));
                 implementationClient.update(rule);
             } catch (Exception e) {
-                throw new RuntimeException(e);
+                throw new WicketRuntimeException(e);
             }
         }
 
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
index 4f86f93..23155c0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
@@ -54,6 +54,7 @@ import org.apache.syncope.common.lib.types.ImplementationType;
 import org.apache.syncope.common.lib.types.PolicyType;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.panel.Panel;
@@ -156,7 +157,7 @@ public class ProvisioningPolicyModalPanel extends AbstractModalPanel<Provisionin
                     try {
                         implRestClient.update(rule.getImpl());
                     } catch (Exception e) {
-                        throw new RuntimeException(e);
+                        throw new WicketRuntimeException(e);
                     }
                 }
             });
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
index 7b7edd1..5b17389 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.reports;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -73,8 +72,6 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
 
     private static final long serialVersionUID = 4984337552918213290L;
 
-    private static final ObjectMapper MAPPER = new ObjectMapper();
-
     private final BaseModal<ReportTO> baseModal;
 
     private final String report;
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWizardBuilder.java
index 17785b0..5b43f30 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWizardBuilder.java
@@ -34,6 +34,7 @@ import org.apache.syncope.common.lib.to.ReportTO;
 import org.apache.syncope.common.lib.types.ImplementationEngine;
 import org.apache.syncope.common.lib.types.ImplementationType;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.wizard.WizardModel;
@@ -70,7 +71,7 @@ public class ReportletWizardBuilder extends AjaxWizardBuilder<ReportletWrapper>
                 reportlet.setBody(MAPPER.writeValueAsString(modelObject.getConf()));
                 implementationClient.update(reportlet);
             } catch (Exception e) {
-                throw new RuntimeException(e);
+                throw new WicketRuntimeException(e);
             }
         }
 
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AuditHistoryRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AuditHistoryRestClient.java
index fd3da6a..8666aa1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AuditHistoryRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AuditHistoryRestClient.java
@@ -18,41 +18,55 @@
  */
 package org.apache.syncope.client.console.rest;
 
+import java.util.List;
 import org.apache.syncope.common.lib.to.AuditEntryTO;
 import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.rest.api.beans.AuditQuery;
 import org.apache.syncope.common.rest.api.service.AuditService;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 
-import java.util.List;
-
 public class AuditHistoryRestClient extends BaseRestClient {
+
     private static final long serialVersionUID = -381814125643246243L;
 
-    public List<AuditEntryTO> search(final String key,
-                                     final int page,
-                                     final int size,
-                                     final SortParam<String> sort,
-                                     final List<String> events,
-                                     final AuditElements.Result result) {
-        AuditQuery query = new AuditQuery.Builder(key)
-            .size(size)
-            .page(page)
-            .events(events)
-            .result(result)
-            .orderBy(toOrderBy(sort))
-            .build();
+    public List<AuditEntryTO> search(
+            final String key,
+            final int page,
+            final int size,
+            final AuditElements.EventCategoryType type,
+            final String category,
+            final List<String> events,
+            final AuditElements.Result result,
+            final SortParam<String> sort) {
+
+        AuditQuery query = new AuditQuery.Builder(key).
+                size(size).
+                page(page).
+                type(type).
+                category(category).
+                events(events).
+                result(result).
+                orderBy(toOrderBy(sort)).
+                build();
+
         return getService(AuditService.class).search(query).getResult();
     }
 
-    public int count(final String key,
-                     final List<String> events,
-                     final AuditElements.Result result) {
-        AuditQuery query = new AuditQuery.Builder(key)
-            .events(events)
-            .result(result)
-            .build();
+    public int count(
+            final String key,
+            final AuditElements.EventCategoryType type,
+            final String category,
+            final List<String> events,
+            final AuditElements.Result result) {
+
+        AuditQuery query = new AuditQuery.Builder(key).
+                page(1).
+                size(1).
+                type(type).
+                category(category).
+                events(events).
+                result(result).
+                build();
         return getService(AuditService.class).search(query).getTotalCount();
     }
 }
-
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
deleted file mode 100644
index 9178569..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
+++ /dev/null
@@ -1,50 +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.console.rest;
-
-import java.util.Collections;
-import java.util.List;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
-import org.apache.syncope.common.rest.api.service.ConnectorHistoryService;
-
-/**
- * Console client for invoking Rest Connector configuration history services.
- */
-public class ConnectorHistoryRestClient extends BaseRestClient {
-
-    private static final long serialVersionUID = -1917949374689773018L;
-
-    public List<ConnInstanceHistoryConfTO> list(final String key) {
-        List<ConnInstanceHistoryConfTO> connHistoryConfs = Collections.<ConnInstanceHistoryConfTO>emptyList();
-        try {
-            connHistoryConfs = getService(ConnectorHistoryService.class).list(key);
-        } catch (Exception e) {
-            LOG.error("While reading connector history configuration instances", e);
-        }
-        return connHistoryConfs;
-    }
-
-    public void delete(final String key) {
-        getService(ConnectorHistoryService.class).delete(key);
-    }
-
-    public void restore(final String key) {
-        getService(ConnectorHistoryService.class).restore(key);
-    }
-}
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
deleted file mode 100644
index 9efb783..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
+++ /dev/null
@@ -1,50 +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.console.rest;
-
-import java.util.Collections;
-import java.util.List;
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
-import org.apache.syncope.common.rest.api.service.ResourceHistoryService;
-
-/**
- * Console client for invoking Rest Resource configuration history services.
- */
-public class ResourceHistoryRestClient extends BaseRestClient {
-
-    private static final long serialVersionUID = -5722829010510310887L;
-
-    public List<ResourceHistoryConfTO> list(final String key) {
-        List<ResourceHistoryConfTO> resHistoryConfs = Collections.<ResourceHistoryConfTO>emptyList();
-        try {
-            resHistoryConfs = getService(ResourceHistoryService.class).list(key);
-        } catch (Exception e) {
-            LOG.error("While reading resource history configuration instances", e);
-        }
-        return resHistoryConfs;
-    }
-
-    public void delete(final String key) {
-        getService(ResourceHistoryService.class).delete(key);
-    }
-
-    public void restore(final String key) {
-        getService(ResourceHistoryService.class).restore(key);
-    }
-}
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index 310aa13..9f79016 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -18,14 +18,15 @@
  */
 package org.apache.syncope.client.console.topology;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.text.MessageFormat;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.audit.AuditHistoryModal;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.pages.BasePage;
-import org.apache.syncope.client.console.panels.HistoryConfList;
 import org.apache.syncope.client.console.panels.ConnObjects;
 import org.apache.syncope.client.console.wizards.resources.ConnectorWizardBuilder;
 import org.apache.syncope.client.console.wizards.resources.ResourceWizardBuilder;
@@ -44,9 +45,8 @@ import org.apache.syncope.client.console.wizards.resources.AbstractResourceWizar
 import org.apache.syncope.client.console.wizards.resources.ResourceProvisionPanel;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.common.lib.to.ItemTO;
-import org.apache.syncope.common.lib.to.ProvisionTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -68,6 +68,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
     private static final long serialVersionUID = -2025535531121434056L;
 
+    private static final ObjectMapper MAPPER = new ObjectMapper();
+
     private final ResourceRestClient resourceRestClient = new ResourceRestClient();
 
     private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
@@ -335,11 +337,33 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                String connKey = String.class.cast(node.getKey());
-                ConnInstanceTO connInstance = connectorRestClient.read(connKey);
-
-                target.add(historyModal.setContent(
-                        new HistoryConfList<>(historyModal, connKey, pageRef, connInstance)));
+                ConnInstanceTO modelObject = connectorRestClient.read(node.getKey());
+
+                target.add(historyModal.setContent(new AuditHistoryModal<ConnInstanceTO>(
+                        historyModal,
+                        AuditElements.EventCategoryType.LOGIC,
+                        "ConnectorLogic",
+                        modelObject,
+                        StandardEntitlement.CONNECTOR_UPDATE,
+                        pageRef) {
+
+                    private static final long serialVersionUID = -3225348282675513648L;
+
+                    @Override
+                    protected void restore(final ConnInstanceTO updated, final AjaxRequestTarget target) {
+                        try {
+                            connectorRestClient.update(updated);
+
+                            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                            toggle(target, false);
+                        } catch (Exception e) {
+                            LOG.error("While restoring connector {}", node.getKey(), e);
+                            SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                                    ? e.getClass().getName() : e.getMessage());
+                        }
+                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                    }
+                }));
 
                 historyModal.header(
                         new Model<>(MessageFormat.format(getString("connector.menu.history"), node.getDisplayName())));
@@ -353,7 +377,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             }
 
         };
-        MetaDataRoleAuthorizationStrategy.authorize(history, RENDER, StandardEntitlement.CONNECTOR_HISTORY_LIST);
+        MetaDataRoleAuthorizationStrategy.authorize(history, RENDER,
+                String.format("%s,%s", StandardEntitlement.CONNECTOR_READ, StandardEntitlement.AUDIT_LIST));
         fragment.add(history);
 
         return fragment;
@@ -566,11 +591,33 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                String resourceKey = String.class.cast(node.getKey());
-                final ResourceTO modelObject = resourceRestClient.read(String.class.cast(node.getKey()));
+                ResourceTO modelObject = resourceRestClient.read(node.getKey());
 
-                target.add(historyModal.setContent(
-                        new HistoryConfList<>(historyModal, resourceKey, pageRef, modelObject)));
+                target.add(historyModal.setContent(new AuditHistoryModal<ResourceTO>(
+                        historyModal,
+                        AuditElements.EventCategoryType.LOGIC,
+                        "ResourceLogic",
+                        modelObject,
+                        StandardEntitlement.RESOURCE_UPDATE,
+                        pageRef) {
+
+                    private static final long serialVersionUID = -3712506022627033811L;
+
+                    @Override
+                    protected void restore(final ResourceTO updated, final AjaxRequestTarget target) {
+                        try {
+                            resourceRestClient.update(updated);
+
+                            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                            toggle(target, false);
+                        } catch (Exception e) {
+                            LOG.error("While restoring resource {}", node.getKey(), e);
+                            SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                                    ? e.getClass().getName() : e.getMessage());
+                        }
+                        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+                    }
+                }));
 
                 historyModal.header(
                         new Model<>(MessageFormat.format(getString("resource.menu.history"), node.getDisplayName())));
@@ -584,7 +631,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             }
 
         };
-        MetaDataRoleAuthorizationStrategy.authorize(history, RENDER, StandardEntitlement.RESOURCE_HISTORY_LIST);
+        MetaDataRoleAuthorizationStrategy.authorize(history, RENDER,
+                String.format("%s,%s", StandardEntitlement.RESOURCE_READ, StandardEntitlement.AUDIT_LIST));
         fragment.add(history);
 
         // [SYNCOPE-1161] - Option to clone a resource
@@ -600,20 +648,16 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
                     // reset some resource objects keys
                     if (resource.getOrgUnit() != null) {
                         resource.getOrgUnit().setKey(null);
-                        for (ItemTO item : resource.getOrgUnit().getItems()) {
-                            item.setKey(null);
-                        }
+                        resource.getOrgUnit().getItems().forEach(item -> item.setKey(null));
                     }
-                    for (ProvisionTO provision : resource.getProvisions()) {
+                    resource.getProvisions().forEach(provision -> {
                         provision.setKey(null);
                         if (provision.getMapping() != null) {
-                            for (ItemTO item : provision.getMapping().getItems()) {
-                                item.setKey(null);
-                            }
+                            provision.getMapping().getItems().forEach(item -> item.setKey(null));
                             provision.getMapping().getLinkingItems().clear();
                         }
                         provision.getVirSchemas().clear();
-                    }
+                    });
                     resourceRestClient.create(resource);
 
                     // refresh Topology
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
index 9cfa769..ecd70d0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
@@ -50,9 +50,15 @@ public class AjaxFallbackDataTable<T extends Serializable, S> extends DataTable<
 
     private ActionLinksTogglePanel<T> togglePanel;
 
-    public AjaxFallbackDataTable(final String id, final List<? extends IColumn<T, S>> columns,
-            final ISortableDataProvider<T, S> dataProvider, final int rowsPerPage, final WebMarkupContainer container) {
+    public AjaxFallbackDataTable(
+            final String id,
+            final List<? extends IColumn<T, S>> columns,
+            final ISortableDataProvider<T, S> dataProvider,
+            final int rowsPerPage,
+            final WebMarkupContainer container) {
+
         super(id, columns, dataProvider, rowsPerPage);
+
         setOutputMarkupId(true);
         setVersioned(false);
 
@@ -67,7 +73,7 @@ public class AjaxFallbackDataTable<T extends Serializable, S> extends DataTable<
                     final String borderId, final S property, final ISortStateLocator<S> locator) {
                 return new AjaxFallbackOrderByBorder<S>(borderId, property, locator) {
 
-                    private static final long serialVersionUID = 1L;
+                    private static final long serialVersionUID = -5729452929468028615L;
 
                     @Override
                     protected void onAjaxClick(final AjaxRequestTarget target) {
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
index 67afe12..d62156f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
@@ -77,7 +77,6 @@ public abstract class ActionLink<T extends Serializable> implements Serializable
         EXPORT_PDF("read"),
         EXPORT_RTF("read"),
         EXPORT_XML("read"),
-        RESTORE("import"),
         SUSPEND("update"),
         REACTIVATE("update"),
         RELOAD("import"),
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java
index c708624..d269c0a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java
@@ -60,6 +60,7 @@ public final class ActionsPanel<T extends Serializable> extends Panel {
             final ActionLink<T> link,
             final ActionLink.ActionType type,
             final String entitlements) {
+
         return add(link, type, entitlements, false);
     }
 
@@ -69,7 +70,7 @@ public final class ActionsPanel<T extends Serializable> extends Panel {
             final String entitlements,
             final boolean onConfirm) {
 
-        final Action<T> action = new Action<>(link, type);
+        Action<T> action = new Action<>(link, type);
         action.setEntitlements(entitlements);
         action.setOnConfirm(onConfirm);
         actions.add(action);
@@ -77,22 +78,21 @@ public final class ActionsPanel<T extends Serializable> extends Panel {
     }
 
     public ActionsPanel<T> clone(final String componentId, final IModel<T> model) {
-        final ActionsPanel<T> panel = new ActionsPanel<>(componentId, model);
+        ActionsPanel<T> panel = new ActionsPanel<>(componentId, model);
         panel.actions.addAll(actions);
         return panel;
     }
 
     /**
      * Use this with toggle panels.
+     *
      * @param componentId Component Id.
      * @param model Model.
      * @return Actions panel.
      */
     public ActionsPanel<T> cloneWithLabels(final String componentId, final IModel<T> model) {
-        final ActionsPanel<T> panel = new ActionsPanel<>(componentId, model);
-        for (Action<T> action : actions) {
-            panel.actions.add(action.showLabel());
-        }
+        ActionsPanel<T> panel = new ActionsPanel<>(componentId, model);
+        actions.forEach(action -> panel.actions.add(action.showLabel()));
         return panel;
     }
 
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
index c84a05b..d8938e3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/AjaxWizard.java
@@ -51,6 +51,7 @@ import org.apache.wicket.Application;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.Session;
 import org.apache.wicket.ThreadContext;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.model.IModel;
@@ -390,7 +391,7 @@ public abstract class AjaxWizard<T extends Serializable> extends Wizard
 
             return res.getRight();
         } catch (InterruptedException | ExecutionException e) {
-            throw new RuntimeException(e);
+            throw new WicketRuntimeException(e);
         }
     }
 
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
index 57b8226..0e5bc89 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
@@ -359,9 +359,7 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple
      * @param modal target modal.
      */
     protected void setWindowClosedReloadCallback(final BaseModal<?> modal) {
-        modal.setWindowClosedCallback(target -> {
-            modal.show(false);
-        });
+        modal.setWindowClosedCallback(target -> modal.show(false));
     }
 
     /**
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWrapper.java
index 3855bd8..8611db3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWrapper.java
@@ -38,5 +38,4 @@ public class AnyObjectWrapper extends AnyWrapper<AnyObjectTO> {
     public AnyObjectTO getPreviousAnyObjectTO() {
         return previousAnyObjectTO;
     }
-
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWrapper.java
index 85698ca..095cef5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWrapper.java
@@ -34,5 +34,4 @@ public class AnyWrapper<T extends AnyTO> implements Serializable {
     public T getInnerObject() {
         return anyTO;
     }
-
 }
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails.html b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails.html
similarity index 72%
rename from client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails.html
rename to client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails.html
index da89934..78e44ed 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails.html
@@ -19,9 +19,11 @@ under the License.
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:panel>
 
-    <form wicket:id="form">
-      <span wicket:id="compareDropdown"></span>
-    </form>
+    <div style="padding-left: 1%;padding-right: 1%;text-align: center;">
+      <div class="pull-left"><strong><span wicket:id="current"/></strong></div>
+      <a href="#" wicket:id="restore" wicket:message="title:restore"><i class="fa fa-history fa-2x"></i></a>
+      <div class="pull-right"><strong><span wicket:id="previous"/></strong></div>
+    </div>
 
     <div wicket:id="content"></div>
 
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails.properties
similarity index 94%
rename from client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails.properties
rename to client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails.properties
index b1406fe..cec89d0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-history.view=History view
-compare=Compare with
 current=Current
+previous=Previous
+restore=Restore
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_fr_CA.properties
similarity index 92%
copy from client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
copy to client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_fr_CA.properties
index e2abe89..6073f49 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_fr_CA.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-who=Who
-date=Date
-audit.diff.view=Configuration
+current=Courant
+previous=Pr\u00e9c\u00e9dent
+restore=Restaurer
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_it.properties
similarity index 93%
copy from client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
copy to client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_it.properties
index e2abe89..7af93d8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_it.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-who=Who
-date=Date
-audit.diff.view=Configuration
+current=Attuale
+previous=Precedente
+restore=Ripristina
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_ja.properties
similarity index 94%
rename from client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_ja.properties
rename to client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_ja.properties
index b1406fe..cec89d0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_ja.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-history.view=History view
-compare=Compare with
 current=Current
+previous=Previous
+restore=Restore
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_pt_BR.properties
similarity index 94%
rename from client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_pt_BR.properties
rename to client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_pt_BR.properties
index b1406fe..cec89d0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_pt_BR.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-history.view=History view
-compare=Compare with
 current=Current
+previous=Previous
+restore=Restore
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_ru.properties
similarity index 94%
rename from client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_ru.properties
rename to client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_ru.properties
index b1406fe..cec89d0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryDetails_ru.properties
@@ -14,6 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-history.view=History view
-compare=Compare with
 current=Current
+previous=Previous
+restore=Restore
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
index e2abe89..3896fbb 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
@@ -16,4 +16,4 @@
 # under the License.
 who=Who
 date=Date
-audit.diff.view=Configuration
+audit.diff.view=History view
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_fr_CA.properties
similarity index 96%
copy from client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
copy to client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_fr_CA.properties
index e2abe89..c053b7b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_fr_CA.properties
@@ -16,4 +16,4 @@
 # under the License.
 who=Who
 date=Date
-audit.diff.view=Configuration
+audit.diff.view=Vue historique
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_it.properties
index e2abe89..a6f4786 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_it.properties
@@ -16,4 +16,4 @@
 # under the License.
 who=Who
 date=Date
-audit.diff.view=Configuration
+audit.diff.view=Vista storica
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_ja.properties
index e2abe89..3896fbb 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_ja.properties
@@ -16,4 +16,4 @@
 # under the License.
 who=Who
 date=Date
-audit.diff.view=Configuration
+audit.diff.view=History view
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_pt_BR.properties
index e2abe89..3896fbb 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_pt_BR.properties
@@ -16,4 +16,4 @@
 # under the License.
 who=Who
 date=Date
-audit.diff.view=Configuration
+audit.diff.view=History view
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_ru.properties
index e2abe89..3896fbb 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/audit/AuditHistoryModal_ru.properties
@@ -16,4 +16,4 @@
 # under the License.
 who=Who
 date=Date
-audit.diff.view=Configuration
+audit.diff.view=History view
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_it.properties
deleted file mode 100644
index e128bca..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/audit/HistoryAuditDetails_it.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.
-history.view=Storico vista
-compare=paragonare con
-current=presente
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails.html
deleted file mode 100644
index da89934..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails.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:panel>
-
-    <form wicket:id="form">
-      <span wicket:id="compareDropdown"></span>
-    </form>
-
-    <div wicket:id="content"></div>
-
-  </wicket:panel>
-</html>
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails.properties
deleted file mode 100644
index 0abe803..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails.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.
-creation=Creation date
-creator=Creator
-entityKey=Local ID
-history.view=History view
-resource=Resource
-compare=Compare with
-current=Current
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_fr_CA.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_fr_CA.properties
deleted file mode 100644
index 4977063..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_fr_CA.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.
-creation=Date de cr�ation
-creator=Cr�� par
-entityKey=ID local
-history.view=Afficher historique
-resource=Ressource
-compare=Comparer avec
-current=Actuel
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_it.properties
deleted file mode 100644
index bac0d9c..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_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.
-creation=Data di creazione
-creator=Creatore
-entityKey=ID locale
-history.view=Configurazione
-resource=Risorsa
-compare=Confronta con
-current=Corrente
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_ja.properties
deleted file mode 100644
index efe910c..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_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.
-creation=\u4f5c\u6210\u65e5
-creator=\u4f5c\u6210\u8005
-entityKey=\u30ed\u30fc\u30ab\u30eb ID
-history.view=\u5c65\u6b74\u30d3\u30e5\u30fc
-resource=\u30ea\u30bd\u30fc\u30b9
-compare=\u6bd4\u8f03...
-current=\u73fe\u5728
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_pt_BR.properties
deleted file mode 100644
index 192a559..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_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.
-creation=Cria\u00e7\u00e3o
-creator=O Criador
-entityKey=ID local
-history.view=Configura\u00e7\u00e3o
-resource=Recurso
-compare=Compare com
-current=Atual
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_ru.properties
deleted file mode 100644
index 7b17b31..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfDetails_ru.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.
-creation=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435
-creator=\u0442\u0432\u043e\u0440\u0435\u0446
-entityKey=\u041c\u0435\u0441\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440
-history.view=\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f
-resource=\u0420\u0435\u0441\u0443\u0440\u0441
-compare=\u0421\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441
-current=\u0422\u0435\u043a\u0443\u0449\u0438\u0439
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList.html
deleted file mode 100644
index 1cae5af..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList.html
+++ /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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:panel>
-    <span wicket:id="history">[HISTORY]</span>
-  </wicket:panel>
-</html>
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList.properties
deleted file mode 100644
index 5546931..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList.properties
+++ /dev/null
@@ -1,21 +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.
-creation=Creation date
-creator=Creator
-entityKey=Local ID
-history.diff.view=Configuration
-resource=Resource
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_fr_CA.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_fr_CA.properties
deleted file mode 100644
index 5a090f6..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_fr_CA.properties
+++ /dev/null
@@ -1,21 +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.
-creation=Date de cr�ation
-creator=Cr�� par
-entityKey=ID local
-history.diff.view=Configuration
-resource=Ressource
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_it.properties
deleted file mode 100644
index 88c8bb3..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_it.properties
+++ /dev/null
@@ -1,21 +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.
-creation=Data di creazione
-creator=Creatore
-entityKey=ID locale
-history.diff.view=Configurazione
-resource=Risorsa
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_ja.properties
deleted file mode 100644
index 991fa5f..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_ja.properties
+++ /dev/null
@@ -1,21 +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.
-creation=\u4f5c\u6210\u65e5
-creator=\u4f5c\u6210\u8005
-entityKey=\u30ed\u30fc\u30ab\u30eb ID
-history.diff.view=\u8a2d\u5b9a
-resource=\u30ea\u30bd\u30fc\u30b9
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_pt_BR.properties
deleted file mode 100644
index 813728d..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_pt_BR.properties
+++ /dev/null
@@ -1,21 +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.
-creation=Cria\u00e7\u00e3o
-creator=O Criador
-entityKey=ID local
-history.diff.view=Configura\u00e7\u00e3o
-resource=Recurso
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_ru.properties
deleted file mode 100644
index 4f278d7..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/HistoryConfList_ru.properties
+++ /dev/null
@@ -1,21 +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.
-creation=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435
-creator=\u0442\u0432\u043e\u0440\u0435\u0446
-entityKey=\u041c\u0435\u0441\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440
-history.diff.view=\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f
-resource=\u0420\u0435\u0441\u0443\u0440\u0441
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
index be4d4d1..b197829 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
@@ -134,8 +134,8 @@ execute.title=execute
 execute.alt=execute icon
 
 password_management.class=fa fa-shield
-password_management.title=password management
-password_management.alt=password management icon
+password_management.title=manage password
+password_management.alt=manage password icon
 
 request_password_reset.class=fa fa-user-secret
 request_password_reset.title=request password reset
@@ -185,10 +185,6 @@ export_xml.class=fa fa-file-excel-o
 export_xml.title=export as xml
 export_xml.alt=export as xml icon
 
-restore.class=fa fa-arrow-circle-down
-restore.title=restore
-restore.alt=restore icon
-
 suspend.class=glyphicon glyphicon-ban-circle
 suspend.title=suspend
 suspend.alt=suspend icon
@@ -282,5 +278,5 @@ workflow_modeler.title=workflow modeler
 workflow_modeler.alt=workflow modeler icon
 
 view_audit_history.class=fa fa-history
-view_audit_history.title=history management
-view_audit_history.alt=history management icon
+view_audit_history.title=manage history
+view_audit_history.alt=manage history icon
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_fr_CA.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_fr_CA.properties
index b23f3e9..f2a3581 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_fr_CA.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_fr_CA.properties
@@ -16,202 +16,202 @@
 # under the License.
 mapping.class=fa fa-exchange
 mapping.title=configuration
-mapping.alt=ic�ne configuration
+mapping.alt=ic\u00f4ne configuration
 mustchangepassword.class=fa fa-lock
-mustchangepassword.title=case le mot de passe doit �tre chang�
-mustchangepassword.alt=case ic�ne pour changement de mot de passe
+mustchangepassword.title=case le mot de passe doit \u00eatre chang\u00e9
+mustchangepassword.alt=case ic\u00f4ne pour changement de mot de passe
 set_latest_sync_token.class=fa fa-hourglass-start
-set_latest_sync_token.title=configurer jeton derni�re sync
-set_latest_sync_token.alt=ic�ne configurer jeton derni�re sync
+set_latest_sync_token.title=configurer jeton derni\u00e8re sync
+set_latest_sync_token.alt=ic\u00f4ne configurer jeton derni\u00e8re sync
 remove_sync_token.class=fa fa-hourglass-o
 remove_sync_token.title=retirer jeton sync
-remove_sync_token.alt=ic�ne retirer jeton sync
+remove_sync_token.alt=ic\u00f4ne retirer jeton sync
 clone.class=fa fa-clone
 clone.title=cloner
-clone.alt=ic�ne cl�ner
+clone.alt=ic\u00f4ne cl\u00f4ner
 create.class=glyphicon glyphicon-plus
-create.title=cr�er
-create.alt=ic�ne cr�er
+create.title=cr\u00e9er
+create.alt=ic\u00f4ne cr\u00e9er
 template.class=fa fa-list-alt
-template.title=mod�le
-template.alt=ic�ne mod�le
+template.title=mod\u00e8le
+template.alt=ic\u00f4ne mod\u00e8le
 edit.class=glyphicon glyphicon-pencil
 edit.title=modifier
-edit.alt=ic�ne modifier
+edit.alt=ic\u00f4ne modifier
 manage_approval.class=fa fa-pencil-square-o
-manage_approval.title=g�rer
-manage_approval.alt=ic�ne approbation de gestion
+manage_approval.title=g\u00e9rer
+manage_approval.alt=ic\u00f4ne approbation de gestion
 edit_approval.class=glyphicon glyphicon-pencil
 edit_approval.title=modifier
-edit_approval.alt=ic�ne approbation de modification
+edit_approval.alt=ic\u00f4ne approbation de modification
 type_extensions.class=fa fa-expand
 type_extensions.title=extensions
-type_extensions.alt=ic�ne extensions
+type_extensions.alt=ic\u00f4ne extensions
 fo_edit.class=fa fa-file-code-o
 fo_edit.title=fo
-fo_edit.alt=ic�ne fo
+fo_edit.alt=ic\u00f4ne fo
 fo_manage_approval.class=fa fa-file-code-o
 fo_manage_approval.title=fo
-fo_manage_approval.alt=ic�ne fo
+fo_manage_approval.alt=ic\u00f4ne fo
 fo_edit_approval.class=fa fa-file-code-o
 fo_edit_approval.title=fo
-fo_edit_approval.alt=ic�ne fo
+fo_edit_approval.alt=ic\u00f4ne fo
 html.class=fa fa-file-code-o
 html.title=html
-html.alt=ic�ne html
+html.alt=ic\u00f4ne html
 text.class=fa fa-file-text-o
 text.title=texte
-text.alt=ic�ne texte
+text.alt=ic\u00f4ne texte
 compose.class=fa fa-puzzle-piece
 compose.title=composer
-compose.alt=ic�ne composer
+compose.alt=ic\u00f4ne composer
 layout_edit.class=fa fa-object-ungroup
 layout_edit.title=configuration
-layout_edit.alt=ic�ne configuration
+layout_edit.alt=ic\u00f4ne configuration
 reset.class=fa fa-shield
-reset.title=r�initialiser
-reset.alt=ic�ne r�initialiser
+reset.title=r\u00e9initialiser
+reset.alt=ic\u00f4ne r\u00e9initialiser
 enable.class=fa fa-toggle-on
-enable.title=g�rer statut
-enable.alt=ic�ne activer
+enable.title=g\u00e9rer statut
+enable.alt=ic\u00f4ne activer
 not_found.class=fa fa-eye-slash
-not_found.title=non trouvďż˝
-not_found.alt=ic�ne non trouv�
+not_found.title=non trouv\u00e9
+not_found.alt=ic\u00f4ne non trouv\u00e9
 view.class=fa fa-eye
 view.title=afficher
-view.alt=ic�ne afficher
+view.alt=ic\u00f4ne afficher
 view_executions.class=fa fa-eye
-view_executions.title=afficher ex�citions
-view_executions.alt=ic�ne afficher ex�cutions
+view_executions.title=afficher ex\u00e9citions
+view_executions.alt=ic\u00f4ne afficher ex\u00e9cutions
 view_details.class=fa fa-info-circle
-view_details.title=afficher d�tails
-view_details.alt=ic�ne afficher d�tails
+view_details.title=afficher d\u00e9tails
+view_details.alt=ic\u00f4ne afficher d\u00e9tails
 members.class=fa fa-users
 members.title=membres
-members.alt=ic�ne memnres
+members.alt=ic\u00f4ne memnres
 search.class=glyphicon glyphicon-search
 search.title=rechercher
-search.alt=ic�ne recherche
+search.alt=ic\u00f4ne recherche
 view_executions.class=fa fa-eye
-view_executions.title=ex�cutions
-view_executions.alt=afficher ic�ne ex�cutions
+view_executions.title=ex\u00e9cutions
+view_executions.alt=afficher ic\u00f4ne ex\u00e9cutions
 view_details.class=fa fa-info-circle
-view_details.title=d�tails
-view_details.alt=ic�ne d�tails
+view_details.title=d\u00e9tails
+view_details.alt=ic\u00f4ne d\u00e9tails
 delete.class=glyphicon glyphicon-minus
 delete.title=supprimer
-delete.alt=ic�ne supprimer
+delete.alt=ic\u00f4ne supprimer
 execute.class=fa fa-gear
-execute.title=ex�cuter
-execute.alt=ic�ne ex�cuter
+execute.title=ex\u00e9cuter
+execute.alt=ic\u00f4ne ex\u00e9cuter
 password_management.class=fa fa-shield
 password_management.title=gestion du mot de passe
-password_management.alt=ic�ne gestion du mot de passe
+password_management.alt=ic\u00f4ne gestion du mot de passe
 request_password_reset.class=fa fa-user-secret
-request_password_reset.title=demande de r�initialisation du mot de passe
-request_password_reset.alt=ic�ne r�initialisation du mot de passe
+request_password_reset.title=demande de r\u00e9initialisation du mot de passe
+request_password_reset.alt=ic\u00f4ne r\u00e9initialisation du mot de passe
 dryrun.class=fa fa-gears
-dryrun.title=test ďż˝ blanc
-dryrun.alt=ic�ne test � blanc
+dryrun.title=test \u00e0 blanc
+dryrun.alt=ic\u00f4ne test \u00e0 blanc
 claim.class=fa fa-ticket
 claim.title=obtenir
-claim.alt=ic�ne obtenir
+claim.alt=ic\u00f4ne obtenir
 unclaim.class=fa fa-undo
-unclaim.title=c�der
-unclaim.alt=ic�ne c�der
+unclaim.title=c\u00e9der
+unclaim.alt=ic\u00f4ne c\u00e9der
 select.class=glyphicon glyphicon-ok
-select.title=s�lectionner
-select.alt=ic�ne s�lectionner
+select.title=s\u00e9lectionner
+select.alt=ic\u00f4ne s\u00e9lectionner
 close.class=fa fa-sign-out
 close.title=fermer
-close.alt=ic�ne fermer
+close.alt=ic\u00f4ne fermer
 export.class=fa fa-floppy-o
 export.title=exporter
-export.alt=ic�ne exporter
+export.alt=ic\u00f4ne exporter
 export_csv.class=fa fa-file-text-o
 export_csv.title=exporter en csv
-export_csv.alt=ic�ne exporter en csv
+export_csv.alt=ic\u00f4ne exporter en csv
 export_html.class=fa fa-file-code-o
 export_html.title=exporter en html
-export_html.alt=ic�ne exporter en html
+export_html.alt=ic\u00f4ne exporter en html
 export_pdf.class=fa fa-file-pdf-o
 export_pdf.title=exporter en pdf
-export_pdf.alt=ic�ne exporter en pdf
+export_pdf.alt=ic\u00f4ne exporter en pdf
 export_rtf.class=fa fa-file-word-o
 export_rtf.title=exporter en rtf
-export_rtf.alt=ic�ne exporter en rtf
+export_rtf.alt=ic\u00f4ne exporter en rtf
 export_xml.class=fa fa-file-excel-o
 export_xml.title=exporter en xml
-export_xml.alt=ic�ne exporter en xml
-restore.class=fa fa-arrow-circle-down
-restore.title=restaurer
-restore.alt=ic�ne restaurer
+export_xml.alt=ic\u00f4ne exporter en xml
 suspend.class=glyphicon glyphicon-ban-circle
 suspend.title=interrompre
-suspend.alt=ic�ne interrompre
+suspend.alt=ic\u00f4ne interrompre
 reactivate.class=glyphicon glyphicon-ok-sign
-reactivate.title=r�activer
-reactivate.alt=ic�ne r�activer
-reload.class=fa fa-r�p�ter
+reactivate.title=r\u00e9activer
+reactivate.alt=ic\u00f4ne r\u00e9activer
+reload.class=fa fa-r\u00e9p\u00e9ter
 reload.title=recharger
-reload.alt=ic�ne recharger
+reload.alt=ic\u00f4ne recharger
 change_view.class=fa fa-list
 change_view.title=changer affichage
-change_view.alt=ic�ne changer affichage
+change_view.alt=ic\u00f4ne changer affichage
 unlink.class=fa fa-unlink
 unlink.title=dissocier 
-unlink.alt=ic�ne dissocier
+unlink.alt=ic\u00f4ne dissocier
 link.class=fa fa-link
 link.title=lien
-link.alt=ic�ne lien
+link.alt=ic\u00f4ne lien
 unassign.class=glyphicon glyphicon-resize-full
-unassign.title=d�assigner
-unassign.alt=ic�ne d�assigner
+unassign.title=d\u00e9assigner
+unassign.alt=ic\u00f4ne d\u00e9assigner
 assign.class=glyphicon glyphicon-resize-small
 assign.title=assigner
-assign.alt=ic�ne assigner
+assign.alt=ic\u00f4ne assigner
 deprovision.class=glyphicon glyphicon-fast-backward
-deprovision.title=d�sattribution
-deprovision.alt=ic�ne d�sattribution
+deprovision.title=d\u00e9sattribution
+deprovision.alt=ic\u00f4ne d\u00e9sattribution
 provision.class=glyphicon glyphicon-fast-forward
 provision.title=provision
-provision.alt=ic�ne provision
+provision.alt=ic\u00f4ne provision
 deprovision_members.class=glyphicon glyphicon-fast-backward
 deprovision_members.title=Retirer des membres
-deprovision_members.alt=ic�ne retirer des membres
+deprovision_members.alt=ic\u00f4ne retirer des membres
 provision_members.class=glyphicon glyphicon-fast-forward
-provision_members.title=faire adh�rer membres
-provision_members.alt=ic�ne faire adh�rer membres
+provision_members.title=faire adh\u00e9rer membres
+provision_members.alt=ic\u00f4ne faire adh\u00e9rer membres
 reconciliation_push.class=fa fa-chevron-circle-right
 reconciliation_push.title=push
-reconciliation_push.alt=ic�ne push r�conciliation
+reconciliation_push.alt=ic\u00f4ne push r\u00e9conciliation
 reconciliation_pull.class=fa fa-chevron-circle-left
 reconciliation_pull.title=pull
-reconciliation_pull.alt=ic�ne pull r�conciliation
+reconciliation_pull.alt=ic\u00f4ne pull r\u00e9conciliation
 manage_resources.class=fa fa-sitemap
-manage_resources.title=g�rer ressources
-manage_resources.alt=ic�ne g�rer ressources
+manage_resources.title=g\u00e9rer ressources
+manage_resources.alt=ic\u00f4ne g\u00e9rer ressources
 manage_users.class=fa fa-users
-manage_users.title=g�rer utilisateurs
-manage_users.alt=ic�ne g�rer utilisateurs
+manage_users.title=g\u00e9rer utilisateurs
+manage_users.alt=ic\u00f4ne g\u00e9rer utilisateurs
 manage_groups.class=fa fa-users
-manage_groups.title=g�rer groupes
-manage_groups.alt=ic�ne g�rer groupes
+manage_groups.title=g\u00e9rer groupes
+manage_groups.alt=ic\u00f4ne g\u00e9rer groupes
 propagation_tasks.class=fa fa-arrow-right
-propagation_tasks.title=t�ches de propagation
-propagation_tasks.alt=ic�ne t�ches de propagation
+propagation_tasks.title=t\u00e2ches de propagation
+propagation_tasks.alt=ic\u00f4ne t\u00e2ches de propagation
 notification_tasks.class=fa fa-envelope-o
-notification_tasks.title=t�ches de notification
-notification_tasks.alt=ic�ne t�ches de notification
+notification_tasks.title=t\u00e2ches de notification
+notification_tasks.alt=ic\u00f4ne t\u00e2ches de notification
 zoom_in.class=fa fa-search-plus
 zoom_in.title=zoom-in
-zoom_in.alt=ic�ne zoom-in
+zoom_in.alt=ic\u00f4ne zoom-in
 zoom_out.class=fa fa-search-minus
 zoom_out.title=zoom-out
-zoom_out.alt=ic�ne zoom-out
+zoom_out.alt=ic\u00f4ne zoom-out
 manage_accounts.class=fa fa-users
-manage_accounts.title=g�rer comptes
-manage_accounts.alt=ic�ne g�rer groupes
+manage_accounts.title=g\u00e9rer comptes
+manage_accounts.alt=ic\u00f4ne g\u00e9rer groupes
 workflow_modeler.class=fa fa-picture-o
-workflow_modeler.title=mod�lisateur de workflow
-workflow_modeler.alt=ic�ne mod�lisateur de workflow
+workflow_modeler.title=mod\u00e9lisateur de workflow
+workflow_modeler.alt=ic\u00f4ne mod\u00e9lisateur de workflow
+view_audit_history.title=manage history
+view_audit_history.class=fa fa-history
+view_audit_history.alt=manage history icon
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
index fe1457a..0155d4f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
@@ -136,7 +136,7 @@ execute.alt=execute icon
 
 password_management.class=fa fa-shield
 password_management.title=gestione password
-password_management.alt=password management icon
+password_management.alt=manage password icon
 
 request_password_reset.class=fa fa-user-secret
 request_password_reset.title=richiedi password reset
@@ -182,10 +182,6 @@ export_xml.class=fa fa-file-excel-o
 export_xml.title=export as xml
 export_xml.alt=export as xml icon
 
-restore.class=fa fa-arrow-circle-down
-restore.title=ripristina
-restore.alt=restore icon
-
 suspend.class=glyphicon glyphicon-ban-circle
 suspend.title=sospendi
 suspend.alt=suspend icon
@@ -279,3 +275,6 @@ manage_accounts.alt=manage accounts icon
 view_audit_history.class=fa fa-history
 view_audit_history.title=storico modifiche
 view_audit_history.alt=storico modifiche icon
+unclaim.class=fa fa-undo
+unclaim.alt=unclaim icon
+unclaim.title=ritira
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
index e23c35e..4f88ec0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
@@ -182,10 +182,6 @@ export_xml.class=fa fa-file-excel-o
 export_xml.title=xml \u3068\u3057\u3066\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
 export_xml.alt=xml \u3068\u3057\u3066\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
 
-restore.class=fa fa-arrow-circle-down
-restore.title=\u5fa9\u5143
-restore.alt=\u5fa9\u5143
-
 suspend.class=glyphicon glyphicon-ban-circle
 suspend.title=\u30b5\u30b9\u30da\u30f3\u30c9
 suspend.alt=\u30b5\u30b9\u30da\u30f3\u30c9
@@ -279,5 +275,8 @@ manage_accounts.title=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u7ba1\u7406\u3059\u30
 manage_accounts.alt=\u30a2\u30ab\u30a6\u30f3\u30c8\u7ba1\u7406\u30a2\u30a4\u30b3\u30f3
 
 view_audit_history.class=fa fa-history
-view_audit_history.title=history management
-view_audit_history.alt=history management icon
+view_audit_history.title=manage history
+view_audit_history.alt=manage history icon
+unclaim.class=fa fa-undo
+unclaim.alt=unclaim icon
+unclaim.title=unclaim
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
index 9ca5a2a..0d2b609 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
@@ -134,8 +134,8 @@ execute.title=execute
 execute.alt=execute icon
 
 password_management.class=fa fa-shield
-password_management.title=password management
-password_management.alt=password management icon
+password_management.title=manage password
+password_management.alt=manage password icon
 
 request_password_reset.class=fa fa-user-secret
 request_password_reset.title=request password reset
@@ -185,10 +185,6 @@ export_xml.class=fa fa-file-excel-o
 export_xml.title=export as xml
 export_xml.alt=export as xml icon
 
-restore.class=fa fa-arrow-circle-down
-restore.title=restore
-restore.alt=restore icon
-
 suspend.class=glyphicon glyphicon-ban-circle
 suspend.title=suspend
 suspend.alt=suspend icon
@@ -284,5 +280,8 @@ manage_accounts.title=manage accounts
 manage_accounts.alt=manage accounts icon
 
 view_audit_history.class=fa fa-history
-view_audit_history.title=history management
-view_audit_history.alt=history management icon
+view_audit_history.title=manage history
+view_audit_history.alt=manage history icon
+workflow_modeler.class=fa fa-picture-o
+workflow_modeler.title=workflow modeler icon
+workflow_modeler.alt=workflow modeler icon
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
index e3ac79b..146652e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
@@ -135,8 +135,8 @@ execute.title=execute
 execute.alt=execute icon
 
 password_management.class=fa fa-shield
-password_management.title=password management
-password_management.alt=password management icon
+password_management.title=manage password
+password_management.alt=manage password icon
 
 request_password_reset.class=fa fa-user-secret
 request_password_reset.title=request password reset
@@ -182,10 +182,6 @@ export_xml.class=fa fa-file-excel-o
 export_xml.title=export as xml
 export_xml.alt=export as xml icon
 
-restore.class=fa fa-arrow-circle-down
-restore.title=restore
-restore.alt=restore icon
-
 suspend.class=glyphicon glyphicon-ban-circle
 suspend.title=suspend
 suspend.alt=suspend icon
@@ -278,5 +274,8 @@ manage_accounts.title=manage accounts
 manage_accounts.alt=manage accounts icon
 
 view_audit_history.class=fa fa-history
-view_audit_history.title=history management
-view_audit_history.alt=history management icon
+view_audit_history.title=manage history
+view_audit_history.alt=manage history icon
+unclaim.class=fa fa-undo
+unclaim.alt=unclaim icon
+unclaim.title=unclaim
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractHistoryConf.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractHistoryConf.java
deleted file mode 100644
index 08c2293..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractHistoryConf.java
+++ /dev/null
@@ -1,70 +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.common.lib.to;
-
-import java.util.Date;
-import javax.ws.rs.PathParam;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlRootElement(name = "abstractHistoryConf")
-@XmlType
-@XmlSeeAlso({ ConnInstanceHistoryConfTO.class, ResourceHistoryConfTO.class })
-public abstract class AbstractHistoryConf implements EntityTO {
-
-    private static final long serialVersionUID = -8001640160293506651L;
-
-    private String key;
-
-    private String creator;
-
-    private Date creation;
-
-    @Override
-    public String getKey() {
-        return key;
-    }
-
-    @PathParam("key")
-    @Override
-    public void setKey(final String key) {
-        this.key = key;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(final String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreation() {
-        return creation == null
-                ? null
-                : new Date(creation.getTime());
-    }
-
-    public void setCreation(final Date creation) {
-        this.creation = creation == null
-                ? null
-                : new Date(creation.getTime());
-    }
-}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceHistoryConfTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceHistoryConfTO.java
deleted file mode 100644
index 6583c54..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceHistoryConfTO.java
+++ /dev/null
@@ -1,40 +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.common.lib.to;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlRootElement(name = "connInstanceHistoryConf")
-@XmlType
-public class ConnInstanceHistoryConfTO extends AbstractHistoryConf {
-
-    private static final long serialVersionUID = 8067539341757100479L;
-
-    private ConnInstanceTO connInstanceTO;
-
-    public ConnInstanceTO getConnInstanceTO() {
-        return connInstanceTO;
-    }
-
-    public void setConnInstanceTO(final ConnInstanceTO connInstanceTO) {
-        this.connInstanceTO = connInstanceTO;
-    }
-
-}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceHistoryConfTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceHistoryConfTO.java
deleted file mode 100644
index 5268299..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceHistoryConfTO.java
+++ /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.
- */
-package org.apache.syncope.common.lib.to;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlRootElement(name = "resourceHistoryConf")
-@XmlType
-public class ResourceHistoryConfTO extends AbstractHistoryConf {
-
-    private static final long serialVersionUID = -7308499697925335157L;
-
-    private ResourceTO resourceTO;
-
-    public ResourceTO getResourceTO() {
-        return resourceTO;
-    }
-
-    public void setResourceTO(final ResourceTO resourceTO) {
-        this.resourceTO = resourceTO;
-    }
-}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/StandardEntitlement.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/StandardEntitlement.java
index 3d7bcf9..a68c69f 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/StandardEntitlement.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/StandardEntitlement.java
@@ -146,12 +146,6 @@ public final class StandardEntitlement {
 
     public static final String RESOURCE_LIST_CONNOBJECT = "RESOURCE_LIST_CONNOBJECT";
 
-    public static final String RESOURCE_HISTORY_LIST = "RESOURCE_HISTORY_LIST";
-
-    public static final String RESOURCE_HISTORY_RESTORE = "RESOURCE_HISTORY_RESTORE";
-
-    public static final String RESOURCE_HISTORY_DELETE = "RESOURCE_HISTORY_DELETE";
-
     public static final String CONNECTOR_LIST = "CONNECTOR_LIST";
 
     public static final String CONNECTOR_CREATE = "CONNECTOR_CREATE";
@@ -164,12 +158,6 @@ public final class StandardEntitlement {
 
     public static final String CONNECTOR_RELOAD = "CONNECTOR_RELOAD";
 
-    public static final String CONNECTOR_HISTORY_LIST = "CONNECTOR_HISTORY_LIST";
-
-    public static final String CONNECTOR_HISTORY_RESTORE = "CONNECTOR_HISTORY_RESTORE";
-
-    public static final String CONNECTOR_HISTORY_DELETE = "CONNECTOR_HISTORY_DELETE";
-
     public static final String CONFIGURATION_EXPORT = "CONFIGURATION_EXPORT";
 
     public static final String CONFIGURATION_LIST = "CONFIGURATION_LIST";
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorHistoryService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorHistoryService.java
deleted file mode 100644
index c94799f..0000000
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorHistoryService.java
+++ /dev/null
@@ -1,82 +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.common.rest.api.service;
-
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
-import io.swagger.v3.oas.annotations.security.SecurityRequirement;
-import io.swagger.v3.oas.annotations.security.SecurityRequirements;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import java.util.List;
-import javax.validation.constraints.NotNull;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
-import org.apache.syncope.common.rest.api.RESTHeaders;
-
-/**
- * REST operations for connector configuration versioning.
- */
-@Tag(name = "ConnectorHistory")
-@SecurityRequirements({
-    @SecurityRequirement(name = "BasicAuthentication"),
-    @SecurityRequirement(name = "Bearer") })
-@Path("connectorsHistory")
-public interface ConnectorHistoryService extends JAXRSService {
-
-    /**
-     * Returns a list of all connector configuration history instances for the given connector instance key.
-     *
-     * @param connectorKey connector instance key
-     * @return list of all connector configuration history instances for the given connector instance key
-     */
-    @GET
-    @Path("{connectorKey}")
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    List<ConnInstanceHistoryConfTO> list(@NotNull @PathParam("connectorKey") String connectorKey);
-
-    /**
-     * Restores the connector configuration history instance matching the provided key.
-     *
-     * @param key connector configuration history instance key to be restored
-     */
-    @ApiResponses(
-            @ApiResponse(responseCode = "204", description = "Operation was successful"))
-    @POST
-    @Path("{key}")
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    void restore(@NotNull @PathParam("key") String key);
-
-    /**
-     * Deletes the connector configuration history instance matching the provided key.
-     *
-     * @param key connector configuration history instance key to be deleted
-     */
-    @ApiResponses(
-            @ApiResponse(responseCode = "204", description = "Operation was successful"))
-    @DELETE
-    @Path("{key}")
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    void delete(@NotNull @PathParam("key") String key);
-}
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceHistoryService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceHistoryService.java
deleted file mode 100644
index 1024f6e..0000000
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceHistoryService.java
+++ /dev/null
@@ -1,82 +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.common.rest.api.service;
-
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
-import io.swagger.v3.oas.annotations.security.SecurityRequirement;
-import io.swagger.v3.oas.annotations.security.SecurityRequirements;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import java.util.List;
-import javax.validation.constraints.NotNull;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
-import org.apache.syncope.common.rest.api.RESTHeaders;
-
-/**
- * REST operations for resource configuration versioning.
- */
-@Tag(name = "ResourceHistory")
-@SecurityRequirements({
-    @SecurityRequirement(name = "BasicAuthentication"),
-    @SecurityRequirement(name = "Bearer") })
-@Path("resourcesHistory")
-public interface ResourceHistoryService extends JAXRSService {
-
-    /**
-     * Returns a list of all resource configuration history for the given resource key.
-     *
-     * @param resourceKey resource key
-     * @return list of all resource configuration history for the given resource key
-     */
-    @GET
-    @Path("{resourceKey}")
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    List<ResourceHistoryConfTO> list(@NotNull @PathParam("resourceKey") String resourceKey);
-
-    /**
-     * Restores the resource configuration history matching the provided key.
-     *
-     * @param key resource configuration history key to be restored
-     */
-    @ApiResponses(
-            @ApiResponse(responseCode = "204", description = "Operation was successful"))
-    @POST
-    @Path("{key}")
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    void restore(@NotNull @PathParam("key") String key);
-
-    /**
-     * Deletes the resource configuration history matching the provided key.
-     *
-     * @param key resource configuration history key to be deleted
-     */
-    @ApiResponses(
-            @ApiResponse(responseCode = "204", description = "Operation was successful"))
-    @DELETE
-    @Path("{key}")
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    void delete(@NotNull @PathParam("key") String key);
-}
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
deleted file mode 100644
index e3a22a8..0000000
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
+++ /dev/null
@@ -1,98 +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.core.logic;
-
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
-import org.apache.syncope.core.persistence.api.dao.ConnInstanceHistoryConfDAO;
-import org.apache.syncope.core.persistence.api.dao.NotFoundException;
-import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.ConnInstanceHistoryConf;
-import org.apache.syncope.core.provisioning.api.data.ConnInstanceDataBinder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-@Component
-public class ConnectorHistoryLogic extends AbstractTransactionalLogic<ConnInstanceHistoryConfTO> {
-
-    @Autowired
-    private ConnInstanceHistoryConfDAO connInstanceHistoryConfDAO;
-
-    @Autowired
-    private ConnInstanceDAO connInstanceDAO;
-
-    @Autowired
-    private ConnInstanceDataBinder binder;
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_HISTORY_LIST + "')")
-    @Transactional(readOnly = true)
-    public List<ConnInstanceHistoryConfTO> list(final String key) {
-        ConnInstance connInstance = connInstanceDAO.find(key);
-        if (connInstance == null) {
-            throw new NotFoundException("Connector '" + key + "'");
-        }
-
-        return connInstanceHistoryConfDAO.findByEntity(connInstance).stream().
-                map(binder::getConnInstanceHistoryConfTO).collect(Collectors.toList());
-    }
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_HISTORY_RESTORE + "')")
-    public void restore(final String key) {
-        ConnInstanceHistoryConf connInstanceHistoryConf = connInstanceHistoryConfDAO.find(key);
-        if (connInstanceHistoryConf == null) {
-            throw new NotFoundException("Connector History Conf '" + key + "'");
-        }
-
-        binder.update(connInstanceHistoryConf.getConf());
-    }
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_HISTORY_DELETE + "')")
-    public void delete(final String key) {
-        ConnInstanceHistoryConf connInstanceHistoryConf = connInstanceHistoryConfDAO.find(key);
-        if (connInstanceHistoryConf == null) {
-            throw new NotFoundException("Connector History Conf '" + key + "'");
-        }
-
-        connInstanceHistoryConfDAO.delete(key);
-    }
-
-    @Override
-    protected ConnInstanceHistoryConfTO resolveReference(final Method method, final Object... args)
-            throws UnresolvedReferenceException {
-
-        if (!"list".equals(method.getName())) {
-            try {
-                String key = (String) args[0];
-                return binder.getConnInstanceHistoryConfTO(connInstanceHistoryConfDAO.find(key));
-            } catch (Throwable ignore) {
-                LOG.debug("Unresolved reference", ignore);
-                throw new UnresolvedReferenceException(ignore);
-            }
-        }
-
-        throw new UnresolvedReferenceException();
-    }
-
-}
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
deleted file mode 100644
index 42126fb..0000000
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
+++ /dev/null
@@ -1,98 +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.core.logic;
-
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
-import org.apache.syncope.core.persistence.api.dao.ExternalResourceHistoryConfDAO;
-import org.apache.syncope.core.persistence.api.dao.NotFoundException;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResourceHistoryConf;
-import org.apache.syncope.core.provisioning.api.data.ResourceDataBinder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-@Component
-public class ResourceHistoryLogic extends AbstractTransactionalLogic<ResourceHistoryConfTO> {
-
-    @Autowired
-    private ExternalResourceHistoryConfDAO resourceHistoryConfDAO;
-
-    @Autowired
-    private ExternalResourceDAO resourceDAO;
-
-    @Autowired
-    private ResourceDataBinder binder;
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_HISTORY_LIST + "')")
-    @Transactional(readOnly = true)
-    public List<ResourceHistoryConfTO> list(final String key) {
-        ExternalResource resource = resourceDAO.find(key);
-        if (resource == null) {
-            throw new NotFoundException("Resource '" + key + "'");
-        }
-
-        return resourceHistoryConfDAO.findByEntity(resource).stream().
-                map(binder::getResourceHistoryConfTO).collect(Collectors.toList());
-    }
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_HISTORY_RESTORE + "')")
-    public void restore(final String key) {
-        ExternalResourceHistoryConf resourceHistoryConf = resourceHistoryConfDAO.find(key);
-        if (resourceHistoryConf == null) {
-            throw new NotFoundException("Resource History Conf '" + key + "'");
-        }
-
-        binder.update(resourceHistoryConf.getEntity(), resourceHistoryConf.getConf());
-    }
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_HISTORY_DELETE + "')")
-    public void delete(final String key) {
-        ExternalResourceHistoryConf resourceHistoryConf = resourceHistoryConfDAO.find(key);
-        if (resourceHistoryConf == null) {
-            throw new NotFoundException("Resource History Conf '" + key + "'");
-        }
-
-        resourceHistoryConfDAO.delete(key);
-    }
-
-    @Override
-    protected ResourceHistoryConfTO resolveReference(final Method method, final Object... args)
-            throws UnresolvedReferenceException {
-
-        if (!"list".equals(method.getName())) {
-            try {
-                String key = (String) args[0];
-                return binder.getResourceHistoryConfTO(resourceHistoryConfDAO.find(key));
-            } catch (Throwable ignore) {
-                LOG.debug("Unresolved reference", ignore);
-                throw new UnresolvedReferenceException(ignore);
-            }
-        }
-
-        throw new UnresolvedReferenceException();
-    }
-
-}
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceHistoryConfDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceHistoryConfDAO.java
deleted file mode 100644
index 1caad69..0000000
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceHistoryConfDAO.java
+++ /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.
- */
-package org.apache.syncope.core.persistence.api.dao;
-
-import java.util.List;
-import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.ConnInstanceHistoryConf;
-
-public interface ConnInstanceHistoryConfDAO extends DAO<ConnInstanceHistoryConf> {
-
-    ConnInstanceHistoryConf find(String key);
-
-    List<ConnInstanceHistoryConf> findByEntity(ConnInstance entity);
-
-    ConnInstanceHistoryConf save(ConnInstanceHistoryConf conf);
-
-    void delete(String key);
-
-    void deleteByEntity(ConnInstance entity);
-}
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceHistoryConfDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceHistoryConfDAO.java
deleted file mode 100644
index 1c4db5a..0000000
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceHistoryConfDAO.java
+++ /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.
- */
-package org.apache.syncope.core.persistence.api.dao;
-
-import java.util.List;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResourceHistoryConf;
-
-public interface ExternalResourceHistoryConfDAO extends DAO<ExternalResourceHistoryConf> {
-
-    ExternalResourceHistoryConf find(String key);
-
-    List<ExternalResourceHistoryConf> findByEntity(ExternalResource entity);
-
-    ExternalResourceHistoryConf save(ExternalResourceHistoryConf conf);
-
-    void delete(String key);
-
-    void deleteByEntity(ExternalResource entity);
-}
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstanceHistoryConf.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstanceHistoryConf.java
deleted file mode 100644
index 88a4481..0000000
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstanceHistoryConf.java
+++ /dev/null
@@ -1,24 +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.core.persistence.api.entity;
-
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-
-public interface ConnInstanceHistoryConf extends HistoryConf<ConnInstance, ConnInstanceTO> {
-}
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/HistoryConf.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/HistoryConf.java
deleted file mode 100644
index 5da50c1..0000000
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/HistoryConf.java
+++ /dev/null
@@ -1,41 +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.core.persistence.api.entity;
-
-import java.util.Date;
-import org.apache.syncope.common.lib.to.EntityTO;
-
-public interface HistoryConf<E extends Entity, T extends EntityTO> extends Entity {
-
-    String getCreator();
-
-    void setCreator(String creator);
-
-    Date getCreation();
-
-    void setCreation(Date creation);
-
-    E getEntity();
-
-    void setEntity(E entity);
-
-    T getConf();
-
-    void setConf(T conf);
-}
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResourceHistoryConf.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResourceHistoryConf.java
deleted file mode 100644
index 0fd8a25..0000000
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResourceHistoryConf.java
+++ /dev/null
@@ -1,25 +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.core.persistence.api.entity.resource;
-
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.core.persistence.api.entity.HistoryConf;
-
-public interface ExternalResourceHistoryConf extends HistoryConf<ExternalResource, ResourceTO> {
-}
diff --git a/core/persistence-jpa-json/src/main/resources/domains/MasterContent.xml b/core/persistence-jpa-json/src/main/resources/domains/MasterContent.xml
index 814b3c6..29918c0 100644
--- a/core/persistence-jpa-json/src/main/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa-json/src/main/resources/domains/MasterContent.xml
@@ -77,17 +77,8 @@ under the License.
   <PlainSchema id="jwt.lifetime.minutes" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
     
-  <!--  Connector and Resource configuration history -->                   
-  <SyncopeSchema id="connector.conf.history.size"/>
-  <PlainSchema id="connector.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  
-  <SyncopeSchema id="resource.conf.history.size"/>
-  <PlainSchema id="resource.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  
   <SyncopeConf id="cd64d66f-6fff-4008-b966-a06b1cc1436d"
-               plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SSHA256&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&quot;values&q [...]
+               plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SSHA256&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&quot;values&q [...]
 
   <AnyType id="USER" kind="USER"/>
   <AnyTypeClass id="BaseUser"/>
diff --git a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
index 1020ecc..8b25834 100644
--- a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
@@ -75,17 +75,8 @@ under the License.
   <PlainSchema id="jwt.lifetime.minutes" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
     
-  <!--  Connector and Resource configuration history -->                   
-  <SyncopeSchema id="connector.conf.history.size"/>
-  <PlainSchema id="connector.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  
-  <SyncopeSchema id="resource.conf.history.size"/>
-  <PlainSchema id="resource.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  
   <SyncopeConf id="cd64d66f-6fff-4008-b966-a06b1cc1436d"
-               plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SHA1&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;0/20 * * * * ?&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&qu [...]
+               plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SHA1&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;0/20 * * * * ?&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&qu [...]
 
   <!-- sample policies -->
   <PasswordPolicy id="ce93fcda-dc3a-4369-a7b0-a6108c261c85" description="a password policy"
@@ -2408,20 +2399,23 @@ $$ }&#10;
   
   <SecurityQuestion id="887028ea-66fc-41e7-b397-620d7ea6dfbb" content="What's your mother's maiden name?"/>
 
-  <SyncopeLogger logName="syncope.audit.[LOGIC]:[SyncopeLogic]:[]:[isSelfRegAllowed]:[SUCCESS]" logLevel="DEBUG" logType="AUDIT"/>
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[SyncopeLogic]:[]:[isSelfRegAllowed]:[SUCCESS]" logLevel="DEBUG"/>
+
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ConnectorLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ConnectorLogic]:[]:[update]:[SUCCESS]" logLevel="DEBUG"/>
+
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ResourceLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ResourceLogic]:[]:[update]:[SUCCESS]" logLevel="DEBUG"/>
 
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[assign]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[confirmPasswordReset]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[delete]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[deprovision]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[link]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[mustChangePassword]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[provision]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[requestPasswordReset]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfCreate]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfDelete]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfRead]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfStatus]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfUpdate]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[status]:[SUCCESS]" logLevel="DEBUG"/>
@@ -2431,12 +2425,8 @@ $$ }&#10;
 
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[assign]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[delete]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[deprovision]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[link]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[own]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[provisionMembers]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[provision]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[unassign]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[unlink]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[update]:[SUCCESS]" logLevel="DEBUG"/>
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
index 049fea3..563a684 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
@@ -25,7 +25,6 @@ import java.util.stream.Collectors;
 import javax.persistence.TypedQuery;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
-import org.apache.syncope.core.persistence.api.dao.ConnInstanceHistoryConfDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.entity.Entity;
@@ -42,9 +41,6 @@ import org.springframework.transaction.annotation.Transactional;
 public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance> implements ConnInstanceDAO {
 
     @Autowired
-    private ConnInstanceHistoryConfDAO connInstanceHistoryConfDAO;
-
-    @Autowired
     private ExternalResourceDAO resourceDAO;
 
     @Autowired
@@ -119,8 +115,6 @@ public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance> implements Con
                 map(Entity::getKey).collect(Collectors.toList()).
                 forEach(resource -> resourceDAO.delete(resource));
 
-        connInstanceHistoryConfDAO.deleteByEntity(connInstance);
-
         entityManager().remove(connInstance);
 
         connRegistry.unregisterConnector(key);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceHistoryConfDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceHistoryConfDAO.java
deleted file mode 100644
index 001d7fb..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceHistoryConfDAO.java
+++ /dev/null
@@ -1,71 +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.core.persistence.jpa.dao;
-
-import java.util.List;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import org.apache.syncope.core.persistence.api.dao.ConnInstanceHistoryConfDAO;
-import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.ConnInstanceHistoryConf;
-import org.apache.syncope.core.persistence.jpa.entity.JPAConnInstanceHistoryConf;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public class JPAConnInstanceHistoryConfDAO
-        extends AbstractDAO<ConnInstanceHistoryConf> implements ConnInstanceHistoryConfDAO {
-
-    @Override
-    public ConnInstanceHistoryConf find(final String key) {
-        return entityManager().find(JPAConnInstanceHistoryConf.class, key);
-    }
-
-    @Override
-    public List<ConnInstanceHistoryConf> findByEntity(final ConnInstance entity) {
-        TypedQuery<ConnInstanceHistoryConf> query = entityManager().createQuery(
-                "SELECT e FROM " + JPAConnInstanceHistoryConf.class.getSimpleName()
-                + " e WHERE e.entity=:entity ORDER BY e.creation DESC", ConnInstanceHistoryConf.class);
-        query.setParameter("entity", entity);
-        return query.getResultList();
-    }
-
-    @Override
-    public ConnInstanceHistoryConf save(final ConnInstanceHistoryConf conf) {
-        return entityManager().merge(conf);
-    }
-
-    @Override
-    public void delete(final String key) {
-        ConnInstanceHistoryConf conf = find(key);
-        if (conf == null) {
-            return;
-        }
-
-        entityManager().remove(conf);
-    }
-
-    @Override
-    public void deleteByEntity(final ConnInstance entity) {
-        Query query = entityManager().createQuery(
-                "DELETE FROM " + JPAConnInstanceHistoryConf.class.getSimpleName() + " e WHERE e.entity=:entity");
-        query.setParameter("entity", entity);
-        query.executeUpdate();
-    }
-
-}
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
index a331512..4990ee0 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
@@ -29,7 +29,6 @@ import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
-import org.apache.syncope.core.persistence.api.dao.ExternalResourceHistoryConfDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
@@ -86,9 +85,6 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
     @Autowired
     private RealmDAO realmDAO;
 
-    @Autowired
-    private ExternalResourceHistoryConfDAO externalResourceHistoryConfDAO;
-
     @Override
     public int count() {
         Query query = entityManager().createQuery(
@@ -267,8 +263,6 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
                 forEach(provision -> virSchemaDAO.findByProvision(provision).
                 forEach(schema -> virSchemaDAO.delete(schema.getKey())));
 
-        externalResourceHistoryConfDAO.deleteByEntity(resource);
-
         if (resource.getConnector() != null && resource.getConnector().getResources() != null
                 && !resource.getConnector().getResources().isEmpty()) {
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceHistoryConfDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceHistoryConfDAO.java
deleted file mode 100644
index ba43355..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceHistoryConfDAO.java
+++ /dev/null
@@ -1,71 +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.core.persistence.jpa.dao;
-
-import java.util.List;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import org.apache.syncope.core.persistence.api.dao.ExternalResourceHistoryConfDAO;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResourceHistoryConf;
-import org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResourceHistoryConf;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public class JPAExternalResourceHistoryConfDAO
-        extends AbstractDAO<ExternalResourceHistoryConf> implements ExternalResourceHistoryConfDAO {
-
-    @Override
-    public ExternalResourceHistoryConf find(final String key) {
-        return entityManager().find(JPAExternalResourceHistoryConf.class, key);
-    }
-
-    @Override
-    public List<ExternalResourceHistoryConf> findByEntity(final ExternalResource entity) {
-        TypedQuery<ExternalResourceHistoryConf> query = entityManager().createQuery(
-                "SELECT e FROM " + JPAExternalResourceHistoryConf.class.getSimpleName()
-                + " e WHERE e.entity=:entity ORDER BY e.creation DESC", ExternalResourceHistoryConf.class);
-        query.setParameter("entity", entity);
-        return query.getResultList();
-    }
-
-    @Override
-    public ExternalResourceHistoryConf save(final ExternalResourceHistoryConf conf) {
-        return entityManager().merge(conf);
-    }
-
-    @Override
-    public void delete(final String key) {
-        ExternalResourceHistoryConf conf = find(key);
-        if (conf == null) {
-            return;
-        }
-
-        entityManager().remove(conf);
-    }
-
-    @Override
-    public void deleteByEntity(final ExternalResource entity) {
-        Query query = entityManager().createQuery(
-                "DELETE FROM " + JPAExternalResourceHistoryConf.class.getSimpleName() + " e WHERE e.entity=:entity");
-        query.setParameter("entity", entity);
-        query.executeUpdate();
-    }
-
-}
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractHistoryConf.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractHistoryConf.java
deleted file mode 100644
index 9ee2c65..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractHistoryConf.java
+++ /dev/null
@@ -1,76 +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.core.persistence.jpa.entity;
-
-import java.util.Date;
-import javax.persistence.Column;
-import javax.persistence.Lob;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import org.apache.syncope.common.lib.to.EntityTO;
-import org.apache.syncope.core.persistence.api.entity.Entity;
-import org.apache.syncope.core.persistence.api.entity.HistoryConf;
-import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
-
-@MappedSuperclass
-public abstract class AbstractHistoryConf<E extends Entity, T extends EntityTO>
-        extends AbstractGeneratedKeyEntity implements HistoryConf<E, T> {
-
-    private static final long serialVersionUID = -7210303753586235180L;
-
-    @Column(nullable = false)
-    private String creator;
-
-    @Temporal(TemporalType.TIMESTAMP)
-    private Date creation;
-
-    @Lob
-    protected String conf;
-
-    @Override
-    public String getCreator() {
-        return creator;
-    }
-
-    @Override
-    public void setCreator(final String creator) {
-        this.creator = creator;
-    }
-
-    @Override
-    public Date getCreation() {
-        return creation == null
-                ? null
-                : new Date(creation.getTime());
-    }
-
-    @Override
-    public void setCreation(final Date creation) {
-        this.creation = creation == null
-                ? null
-                : new Date(creation.getTime());
-    }
-
-    @Override
-    public void setConf(final T conf) {
-        this.conf = POJOHelper.serialize(conf);
-    }
-
-}
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstanceHistoryConf.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstanceHistoryConf.java
deleted file mode 100644
index 9001676..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstanceHistoryConf.java
+++ /dev/null
@@ -1,59 +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.core.persistence.jpa.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.ConnInstanceHistoryConf;
-import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
-
-@Entity
-@Table(name = JPAConnInstanceHistoryConf.TABLE)
-public class JPAConnInstanceHistoryConf
-        extends AbstractHistoryConf<ConnInstance, ConnInstanceTO> implements ConnInstanceHistoryConf {
-
-    private static final long serialVersionUID = -4152915369607435186L;
-
-    public static final String TABLE = "ConnInstanceHistoryConf";
-
-    @OneToOne
-    private JPAConnInstance entity;
-
-    @Override
-    public ConnInstance getEntity() {
-        return entity;
-    }
-
-    @Override
-    public void setEntity(final ConnInstance entity) {
-        checkType(entity, JPAConnInstance.class);
-        this.entity = (JPAConnInstance) entity;
-    }
-
-    @Override
-    public ConnInstanceTO getConf() {
-        return StringUtils.isBlank(conf)
-                ? null
-                : POJOHelper.deserialize(conf, ConnInstanceTO.class);
-    }
-}
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
index 28f6f94..d96f6fb 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
@@ -35,7 +35,6 @@ import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.Application;
 import org.apache.syncope.core.persistence.api.entity.Batch;
 import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.ConnInstanceHistoryConf;
 import org.apache.syncope.core.persistence.api.entity.ConnPoolConf;
 import org.apache.syncope.core.persistence.api.entity.DerSchema;
 import org.apache.syncope.core.persistence.api.entity.Domain;
@@ -134,10 +133,8 @@ import org.apache.syncope.core.persistence.api.entity.Implementation;
 import org.apache.syncope.core.persistence.api.entity.Privilege;
 import org.apache.syncope.core.persistence.api.entity.Remediation;
 import org.apache.syncope.core.persistence.api.entity.SchemaLabel;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResourceHistoryConf;
 import org.apache.syncope.core.persistence.api.entity.resource.OrgUnitItem;
 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullCorrelationRuleEntity;
-import org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResourceHistoryConf;
 import org.apache.syncope.core.persistence.jpa.entity.resource.JPAOrgUnitItem;
 import org.apache.syncope.core.persistence.api.entity.policy.PullCorrelationRuleEntity;
 import org.apache.syncope.core.persistence.api.entity.policy.PushCorrelationRuleEntity;
@@ -222,16 +219,12 @@ public class JPAEntityFactory implements EntityFactory {
             result = (E) new JPANotification();
         } else if (reference.equals(ExternalResource.class)) {
             result = (E) new JPAExternalResource();
-        } else if (reference.equals(ExternalResourceHistoryConf.class)) {
-            result = (E) new JPAExternalResourceHistoryConf();
         } else if (reference.equals(Provision.class)) {
             result = (E) new JPAProvision();
         } else if (reference.equals(OrgUnit.class)) {
             result = (E) new JPAOrgUnit();
         } else if (reference.equals(ConnInstance.class)) {
             result = (E) new JPAConnInstance();
-        } else if (reference.equals(ConnInstanceHistoryConf.class)) {
-            result = (E) new JPAConnInstanceHistoryConf();
         } else if (reference.equals(SchemaLabel.class)) {
             result = (E) new JPASchemaLabel();
         } else if (reference.equals(PlainSchema.class)) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResourceHistoryConf.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResourceHistoryConf.java
deleted file mode 100644
index 31fa726..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResourceHistoryConf.java
+++ /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.
- */
-package org.apache.syncope.core.persistence.jpa.entity.resource;
-
-import javax.persistence.Entity;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResourceHistoryConf;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractHistoryConf;
-import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
-
-@Entity
-@Table(name = JPAExternalResourceHistoryConf.TABLE)
-public class JPAExternalResourceHistoryConf
-        extends AbstractHistoryConf<ExternalResource, ResourceTO> implements ExternalResourceHistoryConf {
-
-    public static final String TABLE = "ExternalResourceHistoryConf";
-
-    private static final long serialVersionUID = 4994551965604592529L;
-
-    @OneToOne
-    private JPAExternalResource entity;
-
-    @Override
-    public ExternalResource getEntity() {
-        return entity;
-    }
-
-    @Override
-    public void setEntity(final ExternalResource entity) {
-        checkType(entity, JPAExternalResource.class);
-        this.entity = (JPAExternalResource) entity;
-    }
-
-    @Override
-    public ResourceTO getConf() {
-        return StringUtils.isBlank(conf)
-                ? null
-                : POJOHelper.deserialize(conf, ResourceTO.class);
-    }
-}
diff --git a/core/persistence-jpa/src/main/resources/domains/MasterContent.xml b/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
index fd66eb6..39aa841 100644
--- a/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
@@ -135,23 +135,6 @@ under the License.
   <CPlainAttrValue id="447e2456-3ff5-41bc-8ff1-cbb0567546cb"
                    attribute_id="cfec3140-562d-459c-ac6a-e3e10758661d" longValue="120"/>
   
-  <!--  Connector and Resource configuration history -->                   
-  <SyncopeSchema id="connector.conf.history.size"/>
-  <PlainSchema id="connector.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="ae36c6ab-0f39-40d7-b6e6-3b8394547c9c"
-              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="connector.conf.history.size"/>
-  <CPlainAttrValue id="4989ce5d-7b42-4a5c-b725-54286888df10"
-                   attribute_id="ae36c6ab-0f39-40d7-b6e6-3b8394547c9c" longValue="10"/>
-  
-  <SyncopeSchema id="resource.conf.history.size"/>
-  <PlainSchema id="resource.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="ae7ae53a-74cf-48b0-9a57-6d2c94928e60"
-              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="resource.conf.history.size"/>
-  <CPlainAttrValue id="059ac3e1-687f-4dd9-a28b-a23f8b436f31"
-                   attribute_id="ae7ae53a-74cf-48b0-9a57-6d2c94928e60" longValue="10"/>
-
   <AnyType id="USER" kind="USER"/>
   <AnyTypeClass id="BaseUser"/>
   <AnyType_AnyTypeClass anyType_id="USER" anyTypeClass_id="BaseUser"/>
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java
index 9a64989..6a639d1 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java
@@ -55,7 +55,7 @@ public class PlainSchemaTest extends AbstractTest {
     @Test
     public void findAll() {
         List<PlainSchema> schemas = plainSchemaDAO.findAll();
-        assertEquals(42, schemas.size());
+        assertEquals(40, schemas.size());
     }
 
     @Test
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceHistoryConfTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceHistoryConfTest.java
deleted file mode 100644
index 1377edd..0000000
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceHistoryConfTest.java
+++ /dev/null
@@ -1,74 +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.core.persistence.jpa.outer;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.Date;
-import java.util.List;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
-import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
-import org.apache.syncope.core.persistence.api.dao.ConnInstanceHistoryConfDAO;
-import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.ConnInstanceHistoryConf;
-import org.apache.syncope.core.persistence.jpa.AbstractTest;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional("Master")
-public class ConnInstanceHistoryConfTest extends AbstractTest {
-
-    @Autowired
-    private ConnInstanceDAO connInstanceDAO;
-
-    @Autowired
-    private ConnInstanceHistoryConfDAO connInstanceHistoryConfDAO;
-
-    @Test
-    public void createDelete() {
-        ConnInstance ldapConnector = connInstanceDAO.find("74141a3b-0762-4720-a4aa-fc3e374ef3ef");
-        assertNotNull(ldapConnector);
-
-        ConnInstanceHistoryConf ldapHistory = entityFactory.newEntity(ConnInstanceHistoryConf.class);
-        ldapHistory.setCreation(new Date());
-        ldapHistory.setCreator("me");
-        ldapHistory.setEntity(ldapConnector);
-        ldapHistory.setConf(new ConnInstanceTO());
-
-        ldapHistory = connInstanceHistoryConfDAO.save(ldapHistory);
-        assertNotNull(ldapHistory.getKey());
-
-        entityManager().flush();
-
-        List<ConnInstanceHistoryConf> history = connInstanceHistoryConfDAO.findByEntity(ldapConnector);
-        assertEquals(1, history.size());
-        assertEquals(ldapHistory, history.get(0));
-
-        connInstanceHistoryConfDAO.delete(ldapHistory.getKey());
-
-        entityManager().flush();
-
-        assertNull(connInstanceHistoryConfDAO.find(ldapHistory.getKey()));
-        assertTrue(connInstanceHistoryConfDAO.findByEntity(ldapConnector).isEmpty());
-    }
-}
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceHistoryConfTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceHistoryConfTest.java
deleted file mode 100644
index 8689ddd..0000000
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceHistoryConfTest.java
+++ /dev/null
@@ -1,74 +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.core.persistence.jpa.outer;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.Date;
-import java.util.List;
-import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
-import org.apache.syncope.core.persistence.api.dao.ExternalResourceHistoryConfDAO;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResourceHistoryConf;
-import org.apache.syncope.core.persistence.jpa.AbstractTest;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional("Master")
-public class ResourceHistoryConfTest extends AbstractTest {
-
-    @Autowired
-    private ExternalResourceDAO resourceDAO;
-
-    @Autowired
-    private ExternalResourceHistoryConfDAO resourceHistoryConfDAO;
-
-    @Test
-    public void createDelete() {
-        ExternalResource ldapResource = resourceDAO.find("resource-ldap");
-        assertNotNull(ldapResource);
-
-        ExternalResourceHistoryConf ldapHistory = entityFactory.newEntity(ExternalResourceHistoryConf.class);
-        ldapHistory.setCreation(new Date());
-        ldapHistory.setCreator("me");
-        ldapHistory.setEntity(ldapResource);
-        ldapHistory.setConf(new ResourceTO());
-
-        ldapHistory = resourceHistoryConfDAO.save(ldapHistory);
-        assertNotNull(ldapHistory.getKey());
-
-        entityManager().flush();
-
-        List<ExternalResourceHistoryConf> history = resourceHistoryConfDAO.findByEntity(ldapResource);
-        assertEquals(1, history.size());
-        assertEquals(ldapHistory, history.get(0));
-
-        resourceHistoryConfDAO.delete(ldapHistory.getKey());
-
-        entityManager().flush();
-
-        assertNull(resourceHistoryConfDAO.find(ldapHistory.getKey()));
-        assertTrue(resourceHistoryConfDAO.findByEntity(ldapResource).isEmpty());
-    }
-}
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 117baea..fc10517 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -135,23 +135,6 @@ under the License.
   <CPlainAttrValue id="447e2456-3ff5-41bc-8ff1-cbb0567546cb"
                    attribute_id="cfec3140-562d-459c-ac6a-e3e10758661d" longValue="120"/>
     
-  <!--  Connector and Resource configuration history -->                   
-  <SyncopeSchema id="connector.conf.history.size"/>
-  <PlainSchema id="connector.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="ae36c6ab-0f39-40d7-b6e6-3b8394547c9c"
-              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="connector.conf.history.size"/>
-  <CPlainAttrValue id="4989ce5d-7b42-4a5c-b725-54286888df10"
-                   attribute_id="ae36c6ab-0f39-40d7-b6e6-3b8394547c9c" longValue="10"/>
-  
-  <SyncopeSchema id="resource.conf.history.size"/>
-  <PlainSchema id="resource.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="ae7ae53a-74cf-48b0-9a57-6d2c94928e60"
-              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="resource.conf.history.size"/>
-  <CPlainAttrValue id="059ac3e1-687f-4dd9-a28b-a23f8b436f31"
-                   attribute_id="ae7ae53a-74cf-48b0-9a57-6d2c94928e60" longValue="10"/>
-  
   <!-- sample policies -->
   <PasswordPolicy id="ce93fcda-dc3a-4369-a7b0-a6108c261c85" description="a password policy"
                   historyLength="1" allowNullPassword="1"/>
@@ -2560,20 +2543,23 @@ $$ }&#10;
   
   <SecurityQuestion id="887028ea-66fc-41e7-b397-620d7ea6dfbb" content="What's your mother's maiden name?"/>
 
-  <SyncopeLogger logName="syncope.audit.[LOGIC]:[SyncopeLogic]:[]:[isSelfRegAllowed]:[SUCCESS]" logLevel="DEBUG" logType="AUDIT"/>
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[SyncopeLogic]:[]:[isSelfRegAllowed]:[SUCCESS]" logLevel="DEBUG"/>
+
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ConnectorLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ConnectorLogic]:[]:[update]:[SUCCESS]" logLevel="DEBUG"/>
+
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ResourceLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ResourceLogic]:[]:[update]:[SUCCESS]" logLevel="DEBUG"/>
 
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[assign]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[confirmPasswordReset]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[delete]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[deprovision]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[link]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[mustChangePassword]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[provision]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[requestPasswordReset]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfCreate]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfDelete]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfRead]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfStatus]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[selfUpdate]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[UserLogic]:[]:[status]:[SUCCESS]" logLevel="DEBUG"/>
@@ -2583,12 +2569,8 @@ $$ }&#10;
 
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[assign]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[delete]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[deprovision]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[link]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[own]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[provisionMembers]:[SUCCESS]" logLevel="DEBUG"/>
-  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[provision]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[unassign]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[unlink]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[GroupLogic]:[]:[update]:[SUCCESS]" logLevel="DEBUG"/>
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java
index 9fa892e..b4b7c18 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java
@@ -18,11 +18,9 @@
  */
 package org.apache.syncope.core.provisioning.api.data;
 
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.types.ConnConfPropSchema;
 import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.ConnInstanceHistoryConf;
 import org.identityconnectors.framework.api.ConfigurationProperty;
 
 public interface ConnInstanceDataBinder {
@@ -33,8 +31,5 @@ public interface ConnInstanceDataBinder {
 
     ConnInstanceTO getConnInstanceTO(ConnInstance connInstance);
 
-    ConnInstanceHistoryConfTO getConnInstanceHistoryConfTO(ConnInstanceHistoryConf history);
-
     ConnInstance update(ConnInstanceTO connInstanceTO);
-
 }
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java
index 84b2254..c63fbf3 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java
@@ -18,10 +18,8 @@
  */
 package org.apache.syncope.core.provisioning.api.data;
 
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResourceHistoryConf;
 
 public interface ResourceDataBinder {
 
@@ -30,6 +28,4 @@ public interface ResourceDataBinder {
     ExternalResource create(ResourceTO resourceTO);
 
     ExternalResource update(ExternalResource resource, ResourceTO resourceTO);
-
-    ResourceHistoryConfTO getResourceHistoryConfTO(ExternalResourceHistoryConf history);
 }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
index d08338f..32e24b6 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
@@ -22,12 +22,9 @@ import java.net.URI;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
-import java.util.List;
 import java.util.Optional;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.ConnPoolConfTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
@@ -35,11 +32,9 @@ import org.apache.syncope.common.lib.types.ConnConfPropSchema;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.core.persistence.api.dao.ConfDAO;
 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
-import org.apache.syncope.core.persistence.api.dao.ConnInstanceHistoryConfDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
 import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.ConnInstanceHistoryConf;
 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
 import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.provisioning.api.ConnIdBundleManager;
@@ -48,7 +43,6 @@ import org.apache.syncope.core.provisioning.api.utils.ConnPoolConfUtils;
 import org.identityconnectors.framework.api.ConfigurationProperties;
 import org.identityconnectors.framework.api.ConfigurationProperty;
 import org.identityconnectors.framework.impl.api.ConfigurationPropertyImpl;
-import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.identityconnectors.framework.api.ConnectorInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -63,9 +57,6 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
     private ConnInstanceDAO connInstanceDAO;
 
     @Autowired
-    private ConnInstanceHistoryConfDAO connInstanceHistoryConfDAO;
-
-    @Autowired
     private RealmDAO realmDAO;
 
     @Autowired
@@ -137,28 +128,6 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
             throw new NotFoundException("Connector '" + connInstanceTO.getKey() + "'");
         }
 
-        ConnInstanceTO current = getConnInstanceTO(connInstance);
-        if (!current.equals(connInstanceTO)) {
-            // 1. save the current configuration, before update
-            ConnInstanceHistoryConf connInstanceHistoryConf = entityFactory.newEntity(ConnInstanceHistoryConf.class);
-            connInstanceHistoryConf.setCreator(AuthContextUtils.getUsername());
-            connInstanceHistoryConf.setCreation(new Date());
-            connInstanceHistoryConf.setEntity(connInstance);
-            connInstanceHistoryConf.setConf(current);
-            connInstanceHistoryConfDAO.save(connInstanceHistoryConf);
-
-            // 2. ensure the maximum history size is not exceeded
-            List<ConnInstanceHistoryConf> history = connInstanceHistoryConfDAO.findByEntity(connInstance);
-            long maxHistorySize = confDAO.find("connector.conf.history.size", 10L);
-            if (maxHistorySize < history.size()) {
-                // always remove the last item since history was obtained  by a query with ORDER BY creation DESC
-                for (int i = 0; i < history.size() - maxHistorySize; i++) {
-                    connInstanceHistoryConfDAO.delete(history.get(history.size() - 1).getKey());
-                }
-            }
-        }
-
-        // 3. actual update
         connInstance.getCapabilities().clear();
         connInstance.getCapabilities().addAll(connInstanceTO.getCapabilities());
 
@@ -291,15 +260,4 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
 
         return connInstanceTO;
     }
-
-    @Override
-    public ConnInstanceHistoryConfTO getConnInstanceHistoryConfTO(final ConnInstanceHistoryConf history) {
-        ConnInstanceHistoryConfTO historyTO = new ConnInstanceHistoryConfTO();
-        historyTO.setKey(history.getKey());
-        historyTO.setCreator(history.getCreator());
-        historyTO.setCreation(history.getCreation());
-        historyTO.setConnInstanceTO(history.getConf());
-
-        return historyTO;
-    }
 }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
index a565e78..b045ad7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.provisioning.java.data;
 
 import java.text.ParseException;
 import java.util.Collections;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -35,7 +34,6 @@ import org.apache.syncope.common.lib.to.ItemTO;
 import org.apache.syncope.common.lib.to.MappingTO;
 import org.apache.syncope.common.lib.to.OrgUnitTO;
 import org.apache.syncope.common.lib.to.ProvisionTO;
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
@@ -53,7 +51,6 @@ import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
 import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.ConfDAO;
-import org.apache.syncope.core.persistence.api.dao.ExternalResourceHistoryConfDAO;
 import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
@@ -65,7 +62,6 @@ import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.api.entity.VirSchema;
 import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.PushPolicy;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResourceHistoryConf;
 import org.apache.syncope.core.persistence.api.entity.resource.Item;
 import org.apache.syncope.core.persistence.api.entity.resource.OrgUnit;
 import org.apache.syncope.core.persistence.api.entity.resource.OrgUnitItem;
@@ -73,7 +69,6 @@ import org.apache.syncope.core.persistence.api.entity.resource.Provision;
 import org.apache.syncope.core.provisioning.java.IntAttrNameParser;
 import org.apache.syncope.core.provisioning.api.IntAttrName;
 import org.apache.syncope.core.provisioning.api.data.ResourceDataBinder;
-import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -101,9 +96,6 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
     private AnyTypeClassDAO anyTypeClassDAO;
 
     @Autowired
-    private ExternalResourceHistoryConfDAO resourceHistoryConfDAO;
-
-    @Autowired
     private ConfDAO confDAO;
 
     @Autowired
@@ -125,30 +117,6 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
 
     @Override
     public ExternalResource update(final ExternalResource resource, final ResourceTO resourceTO) {
-        if (resource.getKey() != null) {
-            ResourceTO current = getResourceTO(resource);
-            if (!current.equals(resourceTO)) {
-                // 1. save the current configuration, before update
-                ExternalResourceHistoryConf resourceHistoryConf =
-                        entityFactory.newEntity(ExternalResourceHistoryConf.class);
-                resourceHistoryConf.setCreator(AuthContextUtils.getUsername());
-                resourceHistoryConf.setCreation(new Date());
-                resourceHistoryConf.setEntity(resource);
-                resourceHistoryConf.setConf(current);
-                resourceHistoryConfDAO.save(resourceHistoryConf);
-
-                // 2. ensure the maximum history size is not exceeded
-                List<ExternalResourceHistoryConf> history = resourceHistoryConfDAO.findByEntity(resource);
-                long maxHistorySize = confDAO.find("resource.conf.history.size", 10L);
-                if (maxHistorySize < history.size()) {
-                    // always remove the last item since history was obtained  by a query with ORDER BY creation DESC
-                    for (int i = 0; i < history.size() - maxHistorySize; i++) {
-                        resourceHistoryConfDAO.delete(history.get(history.size() - 1).getKey());
-                    }
-                }
-            }
-        }
-
         resource.setKey(resourceTO.getKey());
 
         if (resourceTO.getConnector() != null) {
@@ -718,15 +686,4 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
 
         return resourceTO;
     }
-
-    @Override
-    public ResourceHistoryConfTO getResourceHistoryConfTO(final ExternalResourceHistoryConf history) {
-        ResourceHistoryConfTO historyTO = new ResourceHistoryConfTO();
-        historyTO.setKey(history.getKey());
-        historyTO.setCreator(history.getCreator());
-        historyTO.setCreation(history.getCreation());
-        historyTO.setResourceTO(history.getConf());
-
-        return historyTO;
-    }
 }
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorHistoryServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorHistoryServiceImpl.java
deleted file mode 100644
index 3424c5e..0000000
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorHistoryServiceImpl.java
+++ /dev/null
@@ -1,49 +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.core.rest.cxf.service;
-
-import java.util.List;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
-import org.apache.syncope.common.rest.api.service.ConnectorHistoryService;
-import org.apache.syncope.core.logic.ConnectorHistoryLogic;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class ConnectorHistoryServiceImpl extends AbstractServiceImpl implements ConnectorHistoryService {
-
-    @Autowired
-    private ConnectorHistoryLogic logic;
-
-    @Override
-    public List<ConnInstanceHistoryConfTO> list(final String connectorKey) {
-        return logic.list(connectorKey);
-    }
-
-    @Override
-    public void restore(final String key) {
-        logic.restore(key);
-    }
-
-    @Override
-    public void delete(final String key) {
-        logic.delete(key);
-    }
-
-}
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceHistoryServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceHistoryServiceImpl.java
deleted file mode 100644
index b69b5be..0000000
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceHistoryServiceImpl.java
+++ /dev/null
@@ -1,49 +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.core.rest.cxf.service;
-
-import java.util.List;
-import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
-import org.apache.syncope.common.rest.api.service.ResourceHistoryService;
-import org.apache.syncope.core.logic.ResourceHistoryLogic;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class ResourceHistoryServiceImpl extends AbstractServiceImpl implements ResourceHistoryService {
-
-    @Autowired
-    private ResourceHistoryLogic logic;
-
-    @Override
-    public List<ResourceHistoryConfTO> list(final String resourceKey) {
-        return logic.list(resourceKey);
-    }
-
-    @Override
-    public void restore(final String key) {
-        logic.restore(key);
-    }
-
-    @Override
-    public void delete(final String key) {
-        logic.delete(key);
-    }
-
-}
diff --git a/core/upgrade/src/main/resources/schema.xml b/core/upgrade/src/main/resources/schema.xml
index dcc6ab0..99db049 100644
--- a/core/upgrade/src/main/resources/schema.xml
+++ b/core/upgrade/src/main/resources/schema.xml
@@ -18,1195 +18,1350 @@ specific language governing permissions and limitations
 under the License.
 -->
 <schemas>
-  <schema>
-    <table name="ADynGroupMembership">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="fiql" type="varchar" size="255"/>
-      <column name="GROUP_ID" type="varchar" size="36"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <fk to-table="SyncopeGroup" column="GROUP_ID"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <index name="I_DYNGSHP_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_DYNGSHP_GROUP" column="GROUP_ID"/>
-    </table>
-    <table name="AMembership">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="anyObject_id" type="varchar" size="36"/>
-      <column name="group_id" type="varchar" size="36"/>
-      <fk to-table="AnyObject" column="anyObject_id"/>
-      <fk to-table="SyncopeGroup" column="group_id"/>
-      <index name="I_MMBRSHP_LEFTEND" column="anyObject_id"/>
-      <index name="I_MMBRSHP_RIGHTEND" column="group_id"/>
-    </table>
-    <table name="APlainAttr">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="OWNER_ID" type="varchar" size="36"/>
-      <column name="schema_id" type="varchar" size="255"/>
-      <column name="MEMBERSHIP_ID" type="varchar" size="36"/>
-      <fk to-table="AnyObject" column="OWNER_ID"/>
-      <fk to-table="PlainSchema" column="schema_id"/>
-      <fk to-table="AMembership" column="MEMBERSHIP_ID"/>
-      <index name="I_PLINTTR_MEMBERSHIP" column="MEMBERSHIP_ID"/>
-      <index name="I_PLINTTR_OWNER" column="OWNER_ID"/>
-      <index name="I_PLINTTR_SCHEMA" column="schema_id"/>
-    </table>
-    <table name="APlainAttrUniqueValue">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="binaryValue" type="blob" size="-1"/>
-      <column name="booleanValue" type="integer"/>
-      <column name="dateValue" type="timestamp"/>
-      <column name="doubleValue" type="double"/>
-      <column name="longValue" type="bigint"/>
-      <column name="stringValue" type="varchar" size="255"/>
-      <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
-      <column name="schema_id" type="varchar" size="255"/>
-      <fk to-table="APlainAttr" column="ATTRIBUTE_ID"/>
-      <fk to-table="PlainSchema" column="schema_id"/>
-      <index name="I_PLNTQVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
-      <index name="I_PLNTQVL_SCHEMA" column="schema_id"/>
-      <unique name="U_PLNTQVL_BOOLEANVALUE">
-        <on column="booleanValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_PLNTQVL_DATEVALUE">
-        <on column="dateValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_PLNTQVL_STRINGVALUE">
-        <on column="stringValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_PLNTQVL_DOUBLEVALUE">
-        <on column="doubleValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_PLNTQVL_LONGVALUE">
-        <on column="longValue"/>
-        <on column="schema_id"/>
-      </unique>
-    </table>
-    <table name="APlainAttrValue">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="binaryValue" type="blob" size="-1"/>
-      <column name="booleanValue" type="integer"/>
-      <column name="dateValue" type="timestamp"/>
-      <column name="doubleValue" type="double"/>
-      <column name="longValue" type="bigint"/>
-      <column name="stringValue" type="varchar" size="255"/>
-      <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
-      <fk to-table="APlainAttr" column="ATTRIBUTE_ID"/>
-      <index name="I_PLNTRVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
-    </table>
-    <table name="ARelationship">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="left_anyObject_id" type="varchar" size="36"/>
-      <column name="right_anyObject_id" type="varchar" size="36"/>
-      <column name="TYPE_ID" type="varchar" size="255"/>
-      <fk to-table="AnyObject" column="left_anyObject_id"/>
-      <fk to-table="AnyObject" column="right_anyObject_id"/>
-      <fk to-table="RelationshipType" column="TYPE_ID"/>
-      <index name="I_RLTNSHP_LEFTEND" column="left_anyObject_id"/>
-      <index name="I_RLTNSHP_RIGHTEND" column="right_anyObject_id"/>
-      <index name="I_RLTNSHP_TYPE" column="TYPE_ID"/>
-      <unique name="U_RLTNSHP_TYPE_ID">
-        <on column="TYPE_ID"/>
-        <on column="left_anyObject_id"/>
-        <on column="right_anyObject_id"/>
-      </unique>
-    </table>
-    <table name="AccessToken">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="authorities" type="blob" size="-1"/>
-      <column name="body" type="clob" size="-1"/>
-      <column name="expiryTime" type="timestamp"/>
-      <column name="owner" type="varchar" size="255"/>
-      <unique name="U_CCSSTKN_OWNER" column="owner"/>
-    </table>
-    <table name="AccountPolicy">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="description" type="varchar" size="255"/>
-      <column name="maxAuthenticationAttempts" type="integer"/>
-      <column name="propagateSuspension" type="integer"/>
-    </table>
-    <table name="AccountPolicyRule">
-      <column name="policy_id" type="varchar" size="36"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="AccountPolicy" column="policy_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_CCNTYRL_ELEMENT" column="implementation_id"/>
-      <index name="I_CCNTYRL_POLICY_ID" column="policy_id"/>
-    </table>
-    <table name="AccountPolicy_ExternalResource">
-      <column name="accountPolicy_id" type="varchar" size="36"/>
-      <column name="resource_id" type="varchar" size="255"/>
-      <fk to-table="AccountPolicy" column="accountPolicy_id"/>
-      <fk to-table="ExternalResource" column="resource_id"/>
-      <index name="I_CCNTSRC_ACCOUNTPOLICY_ID" column="accountPolicy_id"/>
-      <index name="I_CCNTSRC_ELEMENT" column="resource_id"/>
-    </table>
-    <table name="AnyAbout">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="filter" type="clob" size="-1"/>
-      <column name="NOTIFICATION_ID" type="varchar" size="36"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <fk to-table="Notification" column="NOTIFICATION_ID"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <index name="I_NYABOUT_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_NYABOUT_NOTIFICATION" column="NOTIFICATION_ID"/>
-      <unique name="U_NYABOUT_NOTIFICATION_ID">
-        <on column="NOTIFICATION_ID"/>
-        <on column="ANYTYPE_ID"/>
-      </unique>
-    </table>
-    <table name="AnyObject">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="creationDate" type="timestamp"/>
-      <column name="creator" type="varchar" size="255"/>
-      <column name="lastChangeDate" type="timestamp"/>
-      <column name="lastModifier" type="varchar" size="255"/>
-      <column name="status" type="varchar" size="255"/>
-      <column name="name" type="varchar" size="255"/>
-      <column name="REALM_ID" type="varchar" size="36"/>
-      <column name="TYPE_ID" type="varchar" size="255"/>
-      <fk to-table="Realm" column="REALM_ID"/>
-      <fk to-table="AnyType" column="TYPE_ID"/>
-      <index name="I_NYOBJCT_REALM" column="REALM_ID"/>
-      <index name="I_NYOBJCT_TYPE" column="TYPE_ID"/>
-      <unique name="U_NYOBJCT_NAME" column="name"/>
-    </table>
-    <table name="AnyObject_AnyTypeClass">
-      <column name="anyObject_id" type="varchar" size="36"/>
-      <column name="anyTypeClass_id" type="varchar" size="255"/>
-      <fk to-table="AnyObject" column="anyObject_id"/>
-      <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
-      <index name="I_NYBJLSS_ANYOBJECT_ID" column="anyObject_id"/>
-      <index name="I_NYBJLSS_ELEMENT" column="anyTypeClass_id"/>
-    </table>
-    <table name="AnyObject_ExternalResource">
-      <column name="anyObject_id" type="varchar" size="36"/>
-      <column name="resource_id" type="varchar" size="255"/>
-      <fk to-table="AnyObject" column="anyObject_id"/>
-      <fk to-table="ExternalResource" column="resource_id"/>
-      <index name="I_NYBJSRC_ANYOBJECT_ID" column="anyObject_id"/>
-      <index name="I_NYBJSRC_ELEMENT" column="resource_id"/>
-    </table>
-    <table name="AnyTemplatePullTask">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="template" type="clob" size="-1"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <column name="PULLTASK_ID" type="varchar" size="36"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <fk to-table="Task" column="PULLTASK_ID"/>
-      <index name="I_NYTMTSK_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_NYTMTSK_PULLTASK" column="PULLTASK_ID"/>
-      <unique name="U_NYTMTSK_PULLTASK_ID">
-        <on column="PULLTASK_ID"/>
-        <on column="ANYTYPE_ID"/>
-      </unique>
-    </table>
-    <table name="AnyTemplateRealm">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="template" type="clob" size="-1"/>
-      <column name="REALM_ID" type="varchar" size="36"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <fk to-table="Realm" column="REALM_ID"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <index name="I_NYTMRLM_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_NYTMRLM_REALM" column="REALM_ID"/>
-      <unique name="U_NYTMRLM_REALM_ID">
-        <on column="REALM_ID"/>
-        <on column="ANYTYPE_ID"/>
-      </unique>
-    </table>
-    <table name="AnyType">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="kind" type="varchar" size="20"/>
-    </table>
-    <table name="AnyTypeClass">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-    </table>
-    <table name="AnyType_AnyTypeClass">
-      <column name="anyType_id" type="varchar" size="255"/>
-      <column name="anyTypeClass_id" type="varchar" size="255"/>
-      <fk to-table="AnyType" column="anyType_id"/>
-      <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
-      <index name="I_NYTYLSS_ANYTYPE_ID" column="anyType_id"/>
-      <index name="I_NYTYLSS_ELEMENT" column="anyTypeClass_id"/>
-    </table>
-    <table name="Application">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="description" type="varchar" size="255"/>
-    </table>
-    <table name="CPlainAttr">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="schema_id" type="varchar" size="255"/>
-      <column name="OWNER_ID" type="varchar" size="255"/>
-      <fk to-table="PlainSchema" column="schema_id"/>
-      <fk to-table="SyncopeConf" column="OWNER_ID"/>
-      <index name="I_CPLNTTR_OWNER" column="OWNER_ID"/>
-      <index name="I_CPLNTTR_SCHEMA" column="schema_id"/>
-    </table>
-    <table name="CPlainAttrUniqueValue">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="binaryValue" type="blob" size="-1"/>
-      <column name="booleanValue" type="integer"/>
-      <column name="dateValue" type="timestamp"/>
-      <column name="doubleValue" type="double"/>
-      <column name="longValue" type="bigint"/>
-      <column name="stringValue" type="varchar" size="255"/>
-      <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
-      <column name="schema_id" type="varchar" size="255"/>
-      <fk to-table="CPlainAttr" column="ATTRIBUTE_ID"/>
-      <fk to-table="PlainSchema" column="schema_id"/>
-      <index name="I_CPLNQVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
-      <index name="I_CPLNQVL_SCHEMA" column="schema_id"/>
-      <unique name="U_CPLNQVL_BOOLEANVALUE">
-        <on column="booleanValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_CPLNQVL_DATEVALUE">
-        <on column="dateValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_CPLNQVL_STRINGVALUE">
-        <on column="stringValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_CPLNQVL_DOUBLEVALUE">
-        <on column="doubleValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_CPLNQVL_LONGVALUE">
-        <on column="longValue"/>
-        <on column="schema_id"/>
-      </unique>
-    </table>
-    <table name="CPlainAttrValue">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="binaryValue" type="blob" size="-1"/>
-      <column name="booleanValue" type="integer"/>
-      <column name="dateValue" type="timestamp"/>
-      <column name="doubleValue" type="double"/>
-      <column name="longValue" type="bigint"/>
-      <column name="stringValue" type="varchar" size="255"/>
-      <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
-      <fk to-table="CPlainAttr" column="ATTRIBUTE_ID"/>
-      <index name="I_CPLNRVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
-    </table>
-    <table name="ConnInstance">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="bundleName" type="varchar" size="255"/>
-      <column name="connRequestTimeout" type="integer"/>
-      <column name="connectorName" type="varchar" size="255"/>
-      <column name="displayName" type="varchar" size="255"/>
-      <column name="jsonConf" type="clob" size="-1"/>
-      <column name="location" type="varchar" size="255"/>
-      <column name="version" type="varchar" size="255"/>
-      <column name="ADMINREALM_ID" type="varchar" size="36"/>
-      <column name="maxIdle" type="integer"/>
-      <column name="maxObjects" type="integer"/>
-      <column name="maxWait" type="bigint"/>
-      <column name="minEvictableIdleTimeMillis" type="bigint"/>
-      <column name="minIdle" type="integer"/>
-      <fk to-table="Realm" column="ADMINREALM_ID"/>
-      <index name="I_CNNNTNC_ADMINREALM" column="ADMINREALM_ID"/>
-      <unique name="U_CNNNTNC_DISPLAYNAME" column="displayName"/>
-    </table>
-    <table name="ConnInstanceHistoryConf">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="conf" type="clob" size="-1"/>
-      <column name="creation" type="timestamp"/>
-      <column name="creator" type="varchar" not-null="true" size="255"/>
-      <column name="ENTITY_ID" type="varchar" size="36"/>
-      <fk to-table="ConnInstance" column="ENTITY_ID"/>
-      <index name="I_CNNNCNF_ENTITY" column="ENTITY_ID"/>
-    </table>
-    <table name="ConnInstance_capabilities">
-      <column name="connInstance_id" type="varchar" size="36"/>
-      <column name="capability" type="varchar" size="20"/>
-      <fk to-table="ConnInstance" column="connInstance_id"/>
-      <index name="I_CNNNLTS_CONNINSTANCE_ID" column="connInstance_id"/>
-    </table>
-    <table name="DerSchema">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="expression" type="varchar" size="255"/>
-      <column name="ANYTYPECLASS_ID" type="varchar" size="255"/>
-      <fk to-table="SyncopeSchema" column="id"/>
-      <fk to-table="AnyTypeClass" column="ANYTYPECLASS_ID"/>
-      <index name="I_DRSCHEM_ANYTYPECLASS" column="ANYTYPECLASS_ID"/>
-    </table>
-    <table name="DynRealm">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-    </table>
-    <table name="DynRealmMembership">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="fiql" type="varchar" size="255"/>
-      <column name="DYNREALM_ID" type="varchar" size="255"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <fk to-table="DynRealm" column="DYNREALM_ID"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <index name="I_DYNRSHP_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_DYNRSHP_DYNREALM" column="DYNREALM_ID"/>
-    </table>
-    <table name="DynRoleMembership">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="fiql" type="varchar" size="255"/>
-      <column name="ROLE_ID" type="varchar" size="255"/>
-      <fk to-table="SyncopeRole" column="ROLE_ID"/>
-      <index name="I_DYNRSHP_ROLE" column="ROLE_ID"/>
-    </table>
-    <table name="ExternalResource">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="createTraceLevel" type="varchar" size="20"/>
-      <column name="deleteTraceLevel" type="varchar" size="20"/>
-      <column name="enforceMandatoryCondition" type="integer"/>
-      <column name="jsonConf" type="clob" size="-1"/>
-      <column name="overrideCapabilities" type="integer"/>
-      <column name="propagationPriority" type="integer"/>
-      <column name="provisioningTraceLevel" type="varchar" size="20"/>
-      <column name="randomPwdIfNotProvided" type="integer"/>
-      <column name="updateTraceLevel" type="varchar" size="20"/>
-      <column name="ACCOUNTPOLICY_ID" type="varchar" size="36"/>
-      <column name="CONNECTOR_ID" type="varchar" size="36"/>
-      <column name="PASSWORDPOLICY_ID" type="varchar" size="36"/>
-      <column name="PULLPOLICY_ID" type="varchar" size="36"/>
-      <column name="PUSHPOLICY_ID" type="varchar" size="36"/>
-      <fk to-table="AccountPolicy" column="ACCOUNTPOLICY_ID"/>
-      <fk to-table="ConnInstance" column="CONNECTOR_ID"/>
-      <fk to-table="PasswordPolicy" column="PASSWORDPOLICY_ID"/>
-      <fk to-table="PullPolicy" column="PULLPOLICY_ID"/>
-      <fk to-table="PushPolicy" column="PUSHPOLICY_ID"/>
-      <index name="I_XTRNSRC_ACCOUNTPOLICY" column="ACCOUNTPOLICY_ID"/>
-      <index name="I_XTRNSRC_CONNECTOR" column="CONNECTOR_ID"/>
-      <index name="I_XTRNSRC_PASSWORDPOLICY" column="PASSWORDPOLICY_ID"/>
-      <index name="I_XTRNSRC_PULLPOLICY" column="PULLPOLICY_ID"/>
-      <index name="I_XTRNSRC_PUSHPOLICY" column="PUSHPOLICY_ID"/>
-    </table>
-    <table name="ExternalResourceHistoryConf">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="conf" type="clob" size="-1"/>
-      <column name="creation" type="timestamp"/>
-      <column name="creator" type="varchar" not-null="true" size="255"/>
-      <column name="ENTITY_ID" type="varchar" size="255"/>
-      <fk to-table="ExternalResource" column="ENTITY_ID"/>
-      <index name="I_XTRNCNF_ENTITY" column="ENTITY_ID"/>
-    </table>
-    <table name="ExternalResourcePropAction">
-      <column name="resource_id" type="varchar" size="255"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="ExternalResource" column="resource_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_XTRNCTN_ELEMENT" column="implementation_id"/>
-      <index name="I_XTRNCTN_RESOURCE_ID" column="resource_id"/>
-    </table>
-    <table name="ExternalResource_capOverride">
-      <column name="resource_id" type="varchar" size="255"/>
-      <column name="capabilityOverride" type="varchar" size="20"/>
-      <fk to-table="ExternalResource" column="resource_id"/>
-      <index name="I_XTRNRRD_RESOURCE_ID" column="resource_id"/>
-    </table>
-    <table name="GPlainAttr">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="OWNER_ID" type="varchar" size="36"/>
-      <column name="schema_id" type="varchar" size="255"/>
-      <fk to-table="SyncopeGroup" column="OWNER_ID"/>
-      <fk to-table="PlainSchema" column="schema_id"/>
-      <index name="I_GPLNTTR_OWNER" column="OWNER_ID"/>
-      <index name="I_GPLNTTR_SCHEMA" column="schema_id"/>
-    </table>
-    <table name="GPlainAttrUniqueValue">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="binaryValue" type="blob" size="-1"/>
-      <column name="booleanValue" type="integer"/>
-      <column name="dateValue" type="timestamp"/>
-      <column name="doubleValue" type="double"/>
-      <column name="longValue" type="bigint"/>
-      <column name="stringValue" type="varchar" size="255"/>
-      <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
-      <column name="schema_id" type="varchar" size="255"/>
-      <fk to-table="GPlainAttr" column="ATTRIBUTE_ID"/>
-      <fk to-table="PlainSchema" column="schema_id"/>
-      <index name="I_GPLNQVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
-      <index name="I_GPLNQVL_SCHEMA" column="schema_id"/>
-      <unique name="U_GPLNQVL_BOOLEANVALUE">
-        <on column="booleanValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_GPLNQVL_DATEVALUE">
-        <on column="dateValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_GPLNQVL_STRINGVALUE">
-        <on column="stringValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_GPLNQVL_DOUBLEVALUE">
-        <on column="doubleValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_GPLNQVL_LONGVALUE">
-        <on column="longValue"/>
-        <on column="schema_id"/>
-      </unique>
-    </table>
-    <table name="GPlainAttrValue">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="binaryValue" type="blob" size="-1"/>
-      <column name="booleanValue" type="integer"/>
-      <column name="dateValue" type="timestamp"/>
-      <column name="doubleValue" type="double"/>
-      <column name="longValue" type="bigint"/>
-      <column name="stringValue" type="varchar" size="255"/>
-      <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
-      <fk to-table="GPlainAttr" column="ATTRIBUTE_ID"/>
-      <index name="I_GPLNRVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
-    </table>
-    <table name="Implementation">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="body" type="clob" size="-1"/>
-      <column name="engine" type="varchar" not-null="true" size="20"/>
-      <column name="type" type="varchar" not-null="true" size="21"/>
-    </table>
-    <table name="MailTemplate">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="htmlTemplate" type="clob" size="-1"/>
-      <column name="textTemplate" type="clob" size="-1"/>
-    </table>
-    <table name="Mapping">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="connObjectLink" type="varchar" size="255"/>
-      <column name="PROVISION_ID" type="varchar" size="36"/>
-      <fk to-table="Provision" column="PROVISION_ID"/>
-      <index name="I_MAPPING_PROVISION" column="PROVISION_ID"/>
-    </table>
-    <table name="MappingItem">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="connObjectKey" type="integer"/>
-      <column name="extAttrName" type="varchar" size="255"/>
-      <column name="intAttrName" type="varchar" size="255"/>
-      <column name="mandatoryCondition" type="varchar" size="255"/>
-      <column name="password" type="integer"/>
-      <column name="propJEXL" type="varchar" size="255"/>
-      <column name="pullJEXL" type="varchar" size="255"/>
-      <column name="purpose" type="varchar" size="20"/>
-      <column name="MAPPING_ID" type="varchar" size="36"/>
-      <fk to-table="Mapping" column="MAPPING_ID"/>
-      <index name="I_MPPNGTM_MAPPING" column="MAPPING_ID"/>
-    </table>
-    <table name="MappingItemTransformer">
-      <column name="item_id" type="varchar" size="36"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="MappingItem" column="item_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_MPPNRMR_ELEMENT" column="implementation_id"/>
-      <index name="I_MPPNRMR_ITEM_ID" column="item_id"/>
-    </table>
-    <table name="Notification">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="active" type="integer"/>
-      <column name="recipientAttrName" type="varchar" size="255"/>
-      <column name="recipientsFIQL" type="varchar" size="255"/>
-      <column name="selfAsRecipient" type="integer"/>
-      <column name="sender" type="varchar" size="255"/>
-      <column name="subject" type="varchar" size="255"/>
-      <column name="traceLevel" type="varchar" size="20"/>
-      <column name="RECIPIENTSPROVIDER_ID" type="varchar" size="255"/>
-      <column name="template_id" type="varchar" size="255"/>
-      <fk to-table="Implementation" column="RECIPIENTSPROVIDER_ID"/>
-      <fk to-table="MailTemplate" column="template_id"/>
-      <index name="I_NTFCTON_RECIPIENTSPROVIDER" column="RECIPIENTSPROVIDER_ID"/>
-      <index name="I_NTFCTON_TEMPLATE" column="template_id"/>
-    </table>
-    <table name="NotificationTask_recipients">
-      <column name="notificationTask_id" type="varchar" size="36"/>
-      <column name="address" type="varchar" size="255"/>
-      <fk to-table="Task" column="notificationTask_id"/>
-      <index name="I_NTFCNTS_NOTIFICATIONTASK_ID" column="notificationTask_id"/>
-    </table>
-    <table name="Notification_events">
-      <column name="notification_id" type="varchar" size="36"/>
-      <column name="event" type="varchar" size="255"/>
-      <fk to-table="Notification" column="notification_id"/>
-      <index name="I_NTFCNTS_NOTIFICATION_ID" column="notification_id"/>
-    </table>
-    <table name="Notification_staticRecipients">
-      <column name="notification_id" type="varchar" size="36"/>
-      <column name="staticRecipients" type="varchar" size="255"/>
-      <fk to-table="Notification" column="notification_id"/>
-      <index name="I_NTFCNTS_NOTIFICATION_ID1" column="notification_id"/>
-    </table>
-    <table name="OrgUnit">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="connObjectLink" type="varchar" size="255"/>
-      <column name="ignoreCaseMatch" type="integer"/>
-      <column name="objectClass" type="varchar" size="255"/>
-      <column name="serializedSyncToken" type="clob" size="-1"/>
-      <column name="RESOURCE_ID" type="varchar" size="255"/>
-      <fk to-table="ExternalResource" column="RESOURCE_ID"/>
-      <index name="I_ORGUNIT_RESOURCE" column="RESOURCE_ID"/>
-    </table>
-    <table name="OrgUnitItem">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="connObjectKey" type="integer"/>
-      <column name="extAttrName" type="varchar" size="255"/>
-      <column name="intAttrName" type="varchar" size="255"/>
-      <column name="mandatoryCondition" type="varchar" size="255"/>
-      <column name="password" type="integer"/>
-      <column name="propJEXL" type="varchar" size="255"/>
-      <column name="pullJEXL" type="varchar" size="255"/>
-      <column name="purpose" type="varchar" size="20"/>
-      <column name="ORGUNIT_ID" type="varchar" size="36"/>
-      <fk to-table="OrgUnit" column="ORGUNIT_ID"/>
-      <index name="I_RGUNTTM_ORGUNIT" column="ORGUNIT_ID"/>
-    </table>
-    <table name="OrgUnitItemTransformer">
-      <column name="item_id" type="varchar" size="36"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="OrgUnitItem" column="item_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_RGNTRMR_ELEMENT" column="implementation_id"/>
-      <index name="I_RGNTRMR_ITEM_ID" column="item_id"/>
-    </table>
-    <table name="PasswordPolicy">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="description" type="varchar" size="255"/>
-      <column name="allowNullPassword" type="integer"/>
-      <column name="historyLength" type="integer"/>
-    </table>
-    <table name="PasswordPolicyRule">
-      <column name="policy_id" type="varchar" size="36"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="PasswordPolicy" column="policy_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_PSSWYRL_ELEMENT" column="implementation_id"/>
-      <index name="I_PSSWYRL_POLICY_ID" column="policy_id"/>
-    </table>
-    <table name="PlainSchema">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="cipherAlgorithm" type="varchar" size="20"/>
-      <column name="conversionPattern" type="varchar" size="255"/>
-      <column name="enumerationKeys" type="clob" size="-1"/>
-      <column name="enumerationValues" type="clob" size="-1"/>
-      <column name="mandatoryCondition" type="varchar" size="255"/>
-      <column name="mimeType" type="varchar" size="255"/>
-      <column name="multivalue" type="integer"/>
-      <column name="readonly" type="integer"/>
-      <column name="secretKey" type="varchar" size="255"/>
-      <column name="type" type="varchar" size="20"/>
-      <column name="uniqueConstraint" type="integer"/>
-      <column name="ANYTYPECLASS_ID" type="varchar" size="255"/>
-      <column name="VALIDATOR_ID" type="varchar" size="255"/>
-      <fk to-table="SyncopeSchema" column="id"/>
-      <fk to-table="AnyTypeClass" column="ANYTYPECLASS_ID"/>
-      <fk to-table="Implementation" column="VALIDATOR_ID"/>
-      <index name="I_PLNSCHM_ANYTYPECLASS" column="ANYTYPECLASS_ID"/>
-      <index name="I_PLNSCHM_VALIDATOR" column="VALIDATOR_ID"/>
-    </table>
-    <table name="Privilege">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="description" type="varchar" size="255"/>
-      <column name="spec" type="clob" size="-1"/>
-      <column name="APPLICATION_ID" type="varchar" size="255"/>
-      <fk to-table="Application" column="APPLICATION_ID"/>
-      <index name="I_PRIVILG_APPLICATION" column="APPLICATION_ID"/>
-    </table>
-    <table name="Provision">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="ignoreCaseMatch" type="integer"/>
-      <column name="objectClass" type="varchar" size="255"/>
-      <column name="serializedSyncToken" type="clob" size="-1"/>
-      <column name="RESOURCE_ID" type="varchar" size="255"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <column name="UIDONCREATE_ID" type="varchar" size="255"/>
-      <fk to-table="ExternalResource" column="RESOURCE_ID"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <fk to-table="PlainSchema" column="UIDONCREATE_ID"/>
-      <index name="I_PROVSON_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_PROVSON_RESOURCE" column="RESOURCE_ID"/>
-      <index name="I_PROVSON_UIDONCREATE" column="UIDONCREATE_ID"/>
-      <unique name="U_PROVSON_RESOURCE_ID">
-        <on column="RESOURCE_ID"/>
-        <on column="ANYTYPE_ID"/>
-      </unique>
-    </table>
-    <table name="Provision_AnyTypeClass">
-      <column name="provision_id" type="varchar" size="36"/>
-      <column name="anyTypeClass_id" type="varchar" size="255"/>
-      <fk to-table="Provision" column="provision_id"/>
-      <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
-      <index name="I_PRVSLSS_ELEMENT" column="anyTypeClass_id"/>
-      <index name="I_PRVSLSS_PROVISION_ID" column="provision_id"/>
-    </table>
-    <table name="PullCorrelationRuleEntity">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="PULLPOLICY_ID" type="varchar" size="36"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <column name="IMPLEMENTATION_ID" type="varchar" size="255"/>
-      <fk to-table="PullPolicy" column="PULLPOLICY_ID"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <fk to-table="Implementation" column="IMPLEMENTATION_ID"/>
-      <index name="I_PLLCTTY_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_PLLCTTY_IMPLEMENTATION" column="IMPLEMENTATION_ID"/>
-      <index name="I_PLLCTTY_PULLPOLICY" column="PULLPOLICY_ID"/>
-      <unique name="U_PLLCTTY_PULLPOLICY_ID">
-        <on column="PULLPOLICY_ID"/>
-        <on column="ANYTYPE_ID"/>
-      </unique>
-    </table>
-    <table name="PullPolicy">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="description" type="varchar" size="255"/>
-      <column name="conflictResolutionAction" type="varchar" size="20"/>
-    </table>
-    <table name="PullTaskAction">
-      <column name="task_id" type="varchar" size="36"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="Task" column="task_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_PLLTCTN_ELEMENT" column="implementation_id"/>
-      <index name="I_PLLTCTN_TASK_ID" column="task_id"/>
-    </table>
-    <table name="PushCorrelationRuleEntity">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="PUSHPOLICY_ID" type="varchar" size="36"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <column name="IMPLEMENTATION_ID" type="varchar" size="255"/>
-      <fk to-table="PushPolicy" column="PUSHPOLICY_ID"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <fk to-table="Implementation" column="IMPLEMENTATION_ID"/>
-      <index name="I_PSHCTTY_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_PSHCTTY_IMPLEMENTATION" column="IMPLEMENTATION_ID"/>
-      <index name="I_PSHCTTY_PUSHPOLICY" column="PUSHPOLICY_ID"/>
-      <unique name="U_PSHCTTY_PUSHPOLICY_ID">
-        <on column="PUSHPOLICY_ID"/>
-        <on column="ANYTYPE_ID"/>
-      </unique>
-    </table>
-    <table name="PushPolicy">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="description" type="varchar" size="255"/>
-      <column name="conflictResolutionAction" type="varchar" size="20"/>
-    </table>
-    <table name="PushTaskAction">
-      <column name="task_id" type="varchar" size="36"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="Task" column="task_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_PSHTCTN_ELEMENT" column="implementation_id"/>
-      <index name="I_PSHTCTN_TASK_ID" column="task_id"/>
-    </table>
-    <table name="PushTaskAnyFilter">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="fiql" type="varchar" size="255"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <column name="PUSHTASK_ID" type="varchar" size="36"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <fk to-table="Task" column="PUSHTASK_ID"/>
-      <index name="I_PSHTLTR_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_PSHTLTR_PUSHTASK" column="PUSHTASK_ID"/>
-      <unique name="U_PSHTLTR_PUSHTASK_ID">
-        <on column="PUSHTASK_ID"/>
-        <on column="ANYTYPE_ID"/>
-      </unique>
-    </table>
-    <table name="Realm">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="name" type="varchar" size="255"/>
-      <column name="ACCOUNTPOLICY_ID" type="varchar" size="36"/>
-      <column name="PARENT_ID" type="varchar" size="36"/>
-      <column name="PASSWORDPOLICY_ID" type="varchar" size="36"/>
-      <fk to-table="AccountPolicy" column="ACCOUNTPOLICY_ID"/>
-      <fk to-table="Realm" column="PARENT_ID"/>
-      <fk to-table="PasswordPolicy" column="PASSWORDPOLICY_ID"/>
-      <index name="I_REALM_ACCOUNTPOLICY" column="ACCOUNTPOLICY_ID"/>
-      <index name="I_REALM_PARENT" column="PARENT_ID"/>
-      <index name="I_REALM_PASSWORDPOLICY" column="PASSWORDPOLICY_ID"/>
-      <unique name="U_REALM_NAME">
-        <on column="name"/>
-        <on column="PARENT_ID"/>
-      </unique>
-    </table>
-    <table name="RealmAction">
-      <column name="realm_id" type="varchar" size="36"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="Realm" column="realm_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_RLMCTON_ELEMENT" column="implementation_id"/>
-      <index name="I_RLMCTON_REALM_ID" column="realm_id"/>
-    </table>
-    <table name="Realm_ExternalResource">
-      <column name="realm_id" type="varchar" size="36"/>
-      <column name="resource_id" type="varchar" size="255"/>
-      <fk to-table="Realm" column="realm_id"/>
-      <fk to-table="ExternalResource" column="resource_id"/>
-      <index name="I_RLM_SRC_ELEMENT" column="resource_id"/>
-      <index name="I_RLM_SRC_REALM_ID" column="realm_id"/>
-    </table>
-    <table name="RelationshipType">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="description" type="varchar" size="255"/>
-    </table>
-    <table name="Remediation">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="error" type="clob" size="-1"/>
-      <column name="instant" type="timestamp"/>
-      <column name="operation" type="varchar" size="20"/>
-      <column name="payload" type="clob" size="-1"/>
-      <column name="remoteName" type="varchar" size="255"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <column name="PULLTASK_ID" type="varchar" size="36"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <fk to-table="Task" column="PULLTASK_ID"/>
-      <index name="I_RMDTION_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_RMDTION_PULLTASK" column="PULLTASK_ID"/>
-    </table>
-    <table name="Report">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="active" type="integer"/>
-      <column name="cronExpression" type="varchar" size="255"/>
-      <column name="name" type="varchar" not-null="true" size="255"/>
-      <column name="template_id" type="varchar" size="255"/>
-      <fk to-table="ReportTemplate" column="template_id"/>
-      <index name="I_REPORT_TEMPLATE" column="template_id"/>
-      <unique name="U_REPORT_NAME" column="name"/>
-    </table>
-    <table name="ReportExec">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="endDate" type="timestamp"/>
-      <column name="message" type="clob" size="-1"/>
-      <column name="startDate" type="timestamp"/>
-      <column name="status" type="varchar" size="255"/>
-      <column name="execResult" type="blob" size="-1"/>
-      <column name="REPORT_ID" type="varchar" size="36"/>
-      <fk to-table="Report" column="REPORT_ID"/>
-      <index name="I_RPORTXC_REPORT" column="REPORT_ID"/>
-    </table>
-    <table name="ReportReportlet">
-      <column name="report_id" type="varchar" size="36"/>
-      <column name="implementation_id" type="varchar" size="255"/>
-      <fk to-table="Report" column="report_id"/>
-      <fk to-table="Implementation" column="implementation_id"/>
-      <index name="I_RPRTTLT_ELEMENT" column="implementation_id"/>
-      <index name="I_RPRTTLT_REPORT_ID" column="report_id"/>
-    </table>
-    <table name="ReportTemplate">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="csvTemplate" type="clob" size="-1"/>
-      <column name="foTemplate" type="clob" size="-1"/>
-      <column name="htmlTemplate" type="clob" size="-1"/>
-    </table>
-    <table name="SchemaLabel">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="display" type="varchar" not-null="true" size="255"/>
-      <column name="locale" type="varchar" not-null="true" size="255"/>
-      <column name="SCHEMA_ID" type="varchar" size="255"/>
-      <fk to-table="SyncopeSchema" column="SCHEMA_ID"/>
-      <index name="I_SCHMLBL_SCHEMA" column="SCHEMA_ID"/>
-      <unique name="U_SCHMLBL_SCHEMA_ID">
-        <on column="SCHEMA_ID"/>
-        <on column="locale"/>
-      </unique>
-    </table>
-    <table name="SecurityQuestion">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="content" type="varchar" size="255"/>
-      <unique name="U_SCRTSTN_CONTENT" column="content"/>
-    </table>
-    <table name="SyncopeConf">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-    </table>
-    <table name="SyncopeDomain">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="adminCipherAlgorithm" type="varchar" size="20"/>
-      <column name="adminPwd" type="varchar" size="255"/>
-    </table>
-    <table name="SyncopeGroup">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="creationDate" type="timestamp"/>
-      <column name="creator" type="varchar" size="255"/>
-      <column name="lastChangeDate" type="timestamp"/>
-      <column name="lastModifier" type="varchar" size="255"/>
-      <column name="status" type="varchar" size="255"/>
-      <column name="name" type="varchar" size="255"/>
-      <column name="REALM_ID" type="varchar" size="36"/>
-      <column name="GROUPOWNER_ID" type="varchar" size="36"/>
-      <column name="USEROWNER_ID" type="varchar" size="36"/>
-      <fk to-table="Realm" column="REALM_ID"/>
-      <fk to-table="SyncopeGroup" column="GROUPOWNER_ID"/>
-      <fk to-table="SyncopeUser" column="USEROWNER_ID"/>
-      <index name="I_SYNCGRP_GROUPOWNER" column="GROUPOWNER_ID"/>
-      <index name="I_SYNCGRP_REALM" column="REALM_ID"/>
-      <index name="I_SYNCGRP_USEROWNER" column="USEROWNER_ID"/>
-      <unique name="U_SYNCGRP_NAME" column="name"/>
-    </table>
-    <table name="SyncopeGroup_AnyTypeClass">
-      <column name="group_id" type="varchar" size="36"/>
-      <column name="anyTypeClass_id" type="varchar" size="255"/>
-      <fk to-table="SyncopeGroup" column="group_id"/>
-      <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
-      <index name="I_SYNCLSS_ELEMENT" column="anyTypeClass_id"/>
-      <index name="I_SYNCLSS_GROUP_ID" column="group_id"/>
-    </table>
-    <table name="SyncopeGroup_ExternalResource">
-      <column name="group_id" type="varchar" size="36"/>
-      <column name="resource_id" type="varchar" size="255"/>
-      <fk to-table="SyncopeGroup" column="group_id"/>
-      <fk to-table="ExternalResource" column="resource_id"/>
-      <index name="I_SYNCSRC_ELEMENT" column="resource_id"/>
-      <index name="I_SYNCSRC_GROUP_ID" column="group_id"/>
-    </table>
-    <table name="SyncopeLogger">
-      <pk column="logName"/>
-      <column name="logName" type="varchar" not-null="true" size="255"/>
-      <column name="logLevel" type="varchar" not-null="true" size="20"/>
-      <column name="logType" type="varchar" not-null="true" size="20"/>
-    </table>
-    <table name="SyncopeRole">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="anyLayout" type="clob" size="-1"/>
-    </table>
-    <table name="SyncopeRole_DynRealm">
-      <column name="role_id" type="varchar" size="255"/>
-      <column name="dynamicRealm_id" type="varchar" size="255"/>
-      <fk to-table="SyncopeRole" column="role_id"/>
-      <fk to-table="DynRealm" column="dynamicRealm_id"/>
-      <index name="I_SYNCRLM_ELEMENT" column="dynamicRealm_id"/>
-      <index name="I_SYNCRLM_ROLE_ID" column="role_id"/>
-    </table>
-    <table name="SyncopeRole_Privilege">
-      <column name="role_id" type="varchar" size="255"/>
-      <column name="privilege_id" type="varchar" size="255"/>
-      <fk to-table="SyncopeRole" column="role_id"/>
-      <fk to-table="Privilege" column="privilege_id"/>
-      <index name="I_SYNCVLG_ELEMENT" column="privilege_id"/>
-      <index name="I_SYNCVLG_ROLE_ID" column="role_id"/>
-    </table>
-    <table name="SyncopeRole_Realm">
-      <column name="role_id" type="varchar" size="255"/>
-      <column name="realm_id" type="varchar" size="36"/>
-      <fk to-table="SyncopeRole" column="role_id"/>
-      <fk to-table="Realm" column="realm_id"/>
-      <index name="I_SYNCRLM_ELEMENT1" column="realm_id"/>
-      <index name="I_SYNCRLM_ROLE_ID1" column="role_id"/>
-    </table>
-    <table name="SyncopeRole_entitlements">
-      <column name="role_id" type="varchar" size="255"/>
-      <column name="entitlement" type="varchar" size="255"/>
-      <fk to-table="SyncopeRole" column="role_id"/>
-      <index name="I_SYNCNTS_ROLE_ID" column="role_id"/>
-    </table>
-    <table name="SyncopeSchema">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-    </table>
-    <table name="SyncopeUser">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="creationDate" type="timestamp"/>
-      <column name="creator" type="varchar" size="255"/>
-      <column name="lastChangeDate" type="timestamp"/>
-      <column name="lastModifier" type="varchar" size="255"/>
-      <column name="status" type="varchar" size="255"/>
-      <column name="changePwdDate" type="timestamp"/>
-      <column name="cipherAlgorithm" type="varchar" size="20"/>
-      <column name="failedLogins" type="integer"/>
-      <column name="lastLoginDate" type="timestamp"/>
-      <column name="mustChangePassword" type="integer"/>
-      <column name="password" type="varchar" size="255"/>
-      <column name="securityAnswer" type="varchar" size="255"/>
-      <column name="suspended" type="integer"/>
-      <column name="token" type="clob" size="-1"/>
-      <column name="tokenExpireTime" type="timestamp"/>
-      <column name="username" type="varchar" size="255"/>
-      <column name="REALM_ID" type="varchar" size="36"/>
-      <column name="SECURITYQUESTION_ID" type="varchar" size="36"/>
-      <fk to-table="Realm" column="REALM_ID"/>
-      <fk to-table="SecurityQuestion" column="SECURITYQUESTION_ID"/>
-      <index name="I_SYNCPSR_REALM" column="REALM_ID"/>
-      <index name="I_SYNCPSR_SECURITYQUESTION" column="SECURITYQUESTION_ID"/>
-      <unique name="U_SYNCPSR_USERNAME" column="username"/>
-    </table>
-    <table name="SyncopeUser_AnyTypeClass">
-      <column name="user_id" type="varchar" size="36"/>
-      <column name="anyTypeClass_id" type="varchar" size="255"/>
-      <fk to-table="SyncopeUser" column="user_id"/>
-      <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
-      <index name="I_SYNCLSS_ELEMENT1" column="anyTypeClass_id"/>
-      <index name="I_SYNCLSS_USER_ID" column="user_id"/>
-    </table>
-    <table name="SyncopeUser_ExternalResource">
-      <column name="user_id" type="varchar" size="36"/>
-      <column name="resource_id" type="varchar" size="255"/>
-      <fk to-table="SyncopeUser" column="user_id"/>
-      <fk to-table="ExternalResource" column="resource_id"/>
-      <index name="I_SYNCSRC_ELEMENT1" column="resource_id"/>
-      <index name="I_SYNCSRC_USER_ID" column="user_id"/>
-    </table>
-    <table name="SyncopeUser_SyncopeRole">
-      <column name="user_id" type="varchar" size="36"/>
-      <column name="role_id" type="varchar" size="255"/>
-      <fk to-table="SyncopeUser" column="user_id"/>
-      <fk to-table="SyncopeRole" column="role_id"/>
-      <index name="I_SYNCPRL_ELEMENT" column="role_id"/>
-      <index name="I_SYNCPRL_USER_ID" column="user_id"/>
-    </table>
-    <table name="SyncopeUser_passwordHistory">
-      <column name="user_id" type="varchar" size="36"/>
-      <column name="passwordHistoryValue" type="varchar" size="255"/>
-      <fk to-table="SyncopeUser" column="user_id"/>
-      <index name="I_SYNCTRY_USER_ID" column="user_id"/>
-    </table>
-    <table name="Task">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="DTYPE" type="varchar" size="31"/>
-      <column name="active" type="integer"/>
-      <column name="cronExpression" type="varchar" size="255"/>
-      <column name="description" type="varchar" size="255"/>
-      <column name="name" type="varchar" size="255"/>
-      <column name="startAt" type="timestamp"/>
-      <column name="matchingRule" type="varchar" size="20"/>
-      <column name="performCreate" type="integer"/>
-      <column name="performDelete" type="integer"/>
-      <column name="performUpdate" type="integer"/>
-      <column name="syncStatus" type="integer"/>
-      <column name="unmatchingRule" type="varchar" size="20"/>
-      <column name="pullMode" type="varchar" size="23"/>
-      <column name="remediation" type="integer"/>
-      <column name="JOBDELEGATE_ID" type="varchar" size="255"/>
-      <column name="RESOURCE_ID" type="varchar" size="255"/>
-      <column name="DESTINATIONREALM_ID" type="varchar" size="36"/>
-      <column name="RECONFILTERBUILDER_ID" type="varchar" size="255"/>
-      <column name="anyType" type="varchar" size="255"/>
-      <column name="anyTypeKind" type="varchar" size="20"/>
-      <column name="attributes" type="clob" size="-1"/>
-      <column name="connObjectKey" type="varchar" size="255"/>
-      <column name="entityKey" type="varchar" size="255"/>
-      <column name="objectClassName" type="varchar" size="255"/>
-      <column name="oldConnObjectKey" type="varchar" size="255"/>
-      <column name="operation" type="varchar" size="20"/>
-      <column name="SOURCEREALM_ID" type="varchar" size="36"/>
-      <column name="executed" type="integer"/>
-      <column name="htmlBody" type="clob" size="-1"/>
-      <column name="sender" type="varchar" size="255"/>
-      <column name="subject" type="varchar" size="255"/>
-      <column name="textBody" type="clob" size="-1"/>
-      <column name="traceLevel" type="varchar" size="20"/>
-      <column name="NOTIFICATION_ID" type="varchar" size="36"/>
-      <fk to-table="Implementation" column="JOBDELEGATE_ID"/>
-      <fk to-table="ExternalResource" column="RESOURCE_ID"/>
-      <fk to-table="Realm" column="DESTINATIONREALM_ID"/>
-      <fk to-table="Implementation" column="RECONFILTERBUILDER_ID"/>
-      <fk to-table="Realm" column="SOURCEREALM_ID"/>
-      <fk to-table="Notification" column="NOTIFICATION_ID"/>
-      <index name="I_TASK_DESTINATIONREALM" column="DESTINATIONREALM_ID"/>
-      <index name="I_TASK_DTYPE" column="DTYPE"/>
-      <index name="I_TASK_JOBDELEGATE" column="JOBDELEGATE_ID"/>
-      <index name="I_TASK_NOTIFICATION" column="NOTIFICATION_ID"/>
-      <index name="I_TASK_RECONFILTERBUILDER" column="RECONFILTERBUILDER_ID"/>
-      <index name="I_TASK_RESOURCE" column="RESOURCE_ID"/>
-      <index name="I_TASK_SOURCEREALM" column="SOURCEREALM_ID"/>
-    </table>
-    <table name="TaskExec">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="endDate" type="timestamp"/>
-      <column name="message" type="clob" size="-1"/>
-      <column name="startDate" type="timestamp"/>
-      <column name="status" type="varchar" size="255"/>
-      <column name="TASK_ID" type="varchar" size="36"/>
-      <fk to-table="Task" column="TASK_ID"/>
-      <index name="I_TSKEXEC_TASK" column="TASK_ID"/>
-    </table>
-    <table name="TypeExtension">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="GROUP_ID" type="varchar" size="36"/>
-      <column name="ANYTYPE_ID" type="varchar" size="255"/>
-      <fk to-table="SyncopeGroup" column="GROUP_ID"/>
-      <fk to-table="AnyType" column="ANYTYPE_ID"/>
-      <index name="I_TYPXNSN_ANYTYPE" column="ANYTYPE_ID"/>
-      <index name="I_TYPXNSN_GROUP" column="GROUP_ID"/>
-      <unique name="U_TYPXNSN_GROUP_ID">
-        <on column="GROUP_ID"/>
-        <on column="ANYTYPE_ID"/>
-      </unique>
-    </table>
-    <table name="TypeExtension_AnyTypeClass">
-      <column name="typeExtension_id" type="varchar" size="36"/>
-      <column name="anyTypeClass_id" type="varchar" size="255"/>
-      <fk to-table="TypeExtension" column="typeExtension_id"/>
-      <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
-      <index name="I_TYPXLSS_ELEMENT" column="anyTypeClass_id"/>
-      <index name="I_TYPXLSS_TYPEEXTENSION_ID" column="typeExtension_id"/>
-    </table>
-    <table name="UDynGroupMembership">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="fiql" type="varchar" size="255"/>
-      <column name="GROUP_ID" type="varchar" size="36"/>
-      <fk to-table="SyncopeGroup" column="GROUP_ID"/>
-      <index name="I_DYNGSHP_GROUP1" column="GROUP_ID"/>
-    </table>
-    <table name="UMembership">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="user_id" type="varchar" size="36"/>
-      <column name="group_id" type="varchar" size="36"/>
-      <fk to-table="SyncopeUser" column="user_id"/>
-      <fk to-table="SyncopeGroup" column="group_id"/>
-      <index name="I_MMBRSHP_LEFTEND1" column="user_id"/>
-      <index name="I_MMBRSHP_RIGHTEND1" column="group_id"/>
-    </table>
-    <table name="UPlainAttr">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="OWNER_ID" type="varchar" size="36"/>
-      <column name="schema_id" type="varchar" size="255"/>
-      <column name="MEMBERSHIP_ID" type="varchar" size="36"/>
-      <fk to-table="SyncopeUser" column="OWNER_ID"/>
-      <fk to-table="PlainSchema" column="schema_id"/>
-      <fk to-table="UMembership" column="MEMBERSHIP_ID"/>
-      <index name="I_UPLNTTR_MEMBERSHIP" column="MEMBERSHIP_ID"/>
-      <index name="I_UPLNTTR_OWNER" column="OWNER_ID"/>
-      <index name="I_UPLNTTR_SCHEMA" column="schema_id"/>
-    </table>
-    <table name="UPlainAttrUniqueValue">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="binaryValue" type="blob" size="-1"/>
-      <column name="booleanValue" type="integer"/>
-      <column name="dateValue" type="timestamp"/>
-      <column name="doubleValue" type="double"/>
-      <column name="longValue" type="bigint"/>
-      <column name="stringValue" type="varchar" size="255"/>
-      <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
-      <column name="schema_id" type="varchar" size="255"/>
-      <fk to-table="UPlainAttr" column="ATTRIBUTE_ID"/>
-      <fk to-table="PlainSchema" column="schema_id"/>
-      <index name="I_PLNTQVL_ATTRIBUTE1" column="ATTRIBUTE_ID"/>
-      <index name="I_PLNTQVL_SCHEMA1" column="schema_id"/>
-      <unique name="U_PLNTQVL_BOOLEANVALUE1">
-        <on column="booleanValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_PLNTQVL_DATEVALUE1">
-        <on column="dateValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_PLNTQVL_STRINGVALUE1">
-        <on column="stringValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_PLNTQVL_DOUBLEVALUE1">
-        <on column="doubleValue"/>
-        <on column="schema_id"/>
-      </unique>
-      <unique name="U_PLNTQVL_LONGVALUE1">
-        <on column="longValue"/>
-        <on column="schema_id"/>
-      </unique>
-    </table>
-    <table name="UPlainAttrValue">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="binaryValue" type="blob" size="-1"/>
-      <column name="booleanValue" type="integer"/>
-      <column name="dateValue" type="timestamp"/>
-      <column name="doubleValue" type="double"/>
-      <column name="longValue" type="bigint"/>
-      <column name="stringValue" type="varchar" size="255"/>
-      <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
-      <fk to-table="UPlainAttr" column="ATTRIBUTE_ID"/>
-      <index name="I_PLNTRVL_ATTRIBUTE1" column="ATTRIBUTE_ID"/>
-    </table>
-    <table name="URelationship">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="36"/>
-      <column name="user_id" type="varchar" size="36"/>
-      <column name="anyObject_id" type="varchar" size="36"/>
-      <column name="TYPE_ID" type="varchar" size="255"/>
-      <fk to-table="SyncopeUser" column="user_id"/>
-      <fk to-table="AnyObject" column="anyObject_id"/>
-      <fk to-table="RelationshipType" column="TYPE_ID"/>
-      <index name="I_RLTNSHP_LEFTEND1" column="user_id"/>
-      <index name="I_RLTNSHP_RIGHTEND1" column="anyObject_id"/>
-      <index name="I_RLTNSHP_TYPE1" column="TYPE_ID"/>
-      <unique name="U_RLTNSHP_TYPE_ID1">
-        <on column="TYPE_ID"/>
-        <on column="user_id"/>
-        <on column="anyObject_id"/>
-      </unique>
-    </table>
-    <table name="VirSchema">
-      <pk column="id"/>
-      <column name="id" type="varchar" not-null="true" size="255"/>
-      <column name="extAttrName" type="varchar" size="255"/>
-      <column name="readonly" type="integer"/>
-      <column name="ANYTYPECLASS_ID" type="varchar" size="255"/>
-      <column name="PROVISION_ID" type="varchar" size="36"/>
-      <fk to-table="SyncopeSchema" column="id"/>
-      <fk to-table="AnyTypeClass" column="ANYTYPECLASS_ID"/>
-      <fk to-table="Provision" column="PROVISION_ID"/>
-      <index name="I_VIRSCHM_ANYTYPECLASS" column="ANYTYPECLASS_ID"/>
-      <index name="I_VIRSCHM_PROVISION" column="PROVISION_ID"/>
-    </table>
-  </schema>
+    <schema>
+        <table name="ADynGroupMembership">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="fiql" type="varchar" size="255"/>
+            <column name="GROUP_ID" type="varchar" size="36"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <fk to-table="SyncopeGroup" column="GROUP_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <index name="I_DYNGSHP_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_DYNGSHP_GROUP" column="GROUP_ID"/>
+        </table>
+        <table name="AMembership">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="anyObject_id" type="varchar" size="36"/>
+            <column name="group_id" type="varchar" size="36"/>
+            <fk to-table="AnyObject" column="anyObject_id"/>
+            <fk to-table="SyncopeGroup" column="group_id"/>
+            <index name="I_MMBRSHP_LEFTEND1" column="anyObject_id"/>
+            <index name="I_MMBRSHP_RIGHTEND1" column="group_id"/>
+        </table>
+        <table name="APlainAttr">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="OWNER_ID" type="varchar" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <column name="MEMBERSHIP_ID" type="varchar" size="36"/>
+            <fk to-table="AnyObject" column="OWNER_ID"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <fk to-table="AMembership" column="MEMBERSHIP_ID"/>
+            <index name="I_PLINTTR_MEMBERSHIP" column="MEMBERSHIP_ID"/>
+            <index name="I_PLINTTR_OWNER" column="OWNER_ID"/>
+            <index name="I_PLINTTR_SCHEMA" column="schema_id"/>
+        </table>
+        <table name="APlainAttrUniqueValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <fk to-table="APlainAttr" column="ATTRIBUTE_ID"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <index name="I_PLNTQVL_ATTRIBUTE1" column="ATTRIBUTE_ID"/>
+            <index name="I_PLNTQVL_SCHEMA1" column="schema_id"/>
+            <unique name="U_PLNTQVL_BOOLEANVALUE1">
+                <on column="booleanValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_PLNTQVL_DATEVALUE1">
+                <on column="dateValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_PLNTQVL_STRINGVALUE1">
+                <on column="stringValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_PLNTQVL_DOUBLEVALUE1">
+                <on column="doubleValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_PLNTQVL_LONGVALUE1">
+                <on column="longValue"/>
+                <on column="schema_id"/>
+            </unique>
+        </table>
+        <table name="APlainAttrValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <fk to-table="APlainAttr" column="ATTRIBUTE_ID"/>
+            <index name="I_PLNTRVL_ATTRIBUTE1" column="ATTRIBUTE_ID"/>
+        </table>
+        <table name="ARelationship">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="left_anyObject_id" type="varchar" size="36"/>
+            <column name="right_anyObject_id" type="varchar" size="36"/>
+            <column name="TYPE_ID" type="varchar" size="255"/>
+            <fk to-table="AnyObject" column="left_anyObject_id"/>
+            <fk to-table="AnyObject" column="right_anyObject_id"/>
+            <fk to-table="RelationshipType" column="TYPE_ID"/>
+            <index name="I_RLTNSHP_LEFTEND1" column="left_anyObject_id"/>
+            <index name="I_RLTNSHP_RIGHTEND1" column="right_anyObject_id"/>
+            <index name="I_RLTNSHP_TYPE1" column="TYPE_ID"/>
+            <unique name="U_RLTNSHP_TYPE_ID1">
+                <on column="TYPE_ID"/>
+                <on column="left_anyObject_id"/>
+                <on column="right_anyObject_id"/>
+            </unique>
+        </table>
+        <table name="AccessToken">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="authorities" type="blob" size="-1"/>
+            <column name="body" type="clob" size="-1"/>
+            <column name="expiryTime" type="timestamp"/>
+            <column name="owner" type="varchar" size="255"/>
+            <unique name="U_CCSSTKN_OWNER" column="owner"/>
+        </table>
+        <table name="AccountPolicy">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="description" type="varchar" size="255"/>
+            <column name="maxAuthenticationAttempts" type="integer"/>
+            <column name="propagateSuspension" type="integer"/>
+        </table>
+        <table name="AccountPolicyRule">
+            <column name="policy_id" type="varchar" size="36"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="AccountPolicy" column="policy_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_CCNTYRL_ELEMENT" column="implementation_id"/>
+            <index name="I_CCNTYRL_POLICY_ID" column="policy_id"/>
+            <unique name="U_CCNTYRL_POLICY_ID">
+                <on column="policy_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="AccountPolicy_ExternalResource">
+            <column name="accountPolicy_id" type="varchar" size="36"/>
+            <column name="resource_id" type="varchar" size="255"/>
+            <fk to-table="AccountPolicy" column="accountPolicy_id"/>
+            <fk to-table="ExternalResource" column="resource_id"/>
+            <index name="I_CCNTSRC_ACCOUNTPOLICY_ID" column="accountPolicy_id"/>
+            <index name="I_CCNTSRC_ELEMENT" column="resource_id"/>
+            <unique name="U_CCNTSRC_ACCOUNTPOLICY_ID">
+                <on column="accountPolicy_id"/>
+                <on column="resource_id"/>
+            </unique>
+        </table>
+        <table name="AnyAbout">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="filter" type="clob" size="-1"/>
+            <column name="NOTIFICATION_ID" type="varchar" size="36"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <fk to-table="Notification" column="NOTIFICATION_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <index name="I_NYABOUT_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_NYABOUT_NOTIFICATION" column="NOTIFICATION_ID"/>
+            <unique name="U_NYABOUT_NOTIFICATION_ID">
+                <on column="NOTIFICATION_ID"/>
+                <on column="ANYTYPE_ID"/>
+            </unique>
+        </table>
+        <table name="AnyObject">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="creationDate" type="timestamp"/>
+            <column name="creator" type="varchar" size="255"/>
+            <column name="lastChangeDate" type="timestamp"/>
+            <column name="lastModifier" type="varchar" size="255"/>
+            <column name="status" type="varchar" size="255"/>
+            <column name="name" type="varchar" size="255"/>
+            <column name="REALM_ID" type="varchar" size="36"/>
+            <column name="TYPE_ID" type="varchar" size="255"/>
+            <fk to-table="Realm" column="REALM_ID"/>
+            <fk to-table="AnyType" column="TYPE_ID"/>
+            <index name="I_NYOBJCT_REALM" column="REALM_ID"/>
+            <index name="I_NYOBJCT_TYPE" column="TYPE_ID"/>
+            <unique name="U_NYOBJCT_NAME" column="name"/>
+        </table>
+        <table name="AnyObject_AnyTypeClass">
+            <column name="anyObject_id" type="varchar" size="36"/>
+            <column name="anyTypeClass_id" type="varchar" size="255"/>
+            <fk to-table="AnyObject" column="anyObject_id"/>
+            <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
+            <index name="I_NYBJLSS_ANYOBJECT_ID" column="anyObject_id"/>
+            <index name="I_NYBJLSS_ELEMENT" column="anyTypeClass_id"/>
+            <unique name="U_NYBJLSS_ANYOBJECT_ID">
+                <on column="anyObject_id"/>
+                <on column="anyTypeClass_id"/>
+            </unique>
+        </table>
+        <table name="AnyObject_ExternalResource">
+            <column name="anyObject_id" type="varchar" size="36"/>
+            <column name="resource_id" type="varchar" size="255"/>
+            <fk to-table="AnyObject" column="anyObject_id"/>
+            <fk to-table="ExternalResource" column="resource_id"/>
+            <index name="I_NYBJSRC_ANYOBJECT_ID" column="anyObject_id"/>
+            <index name="I_NYBJSRC_ELEMENT" column="resource_id"/>
+            <unique name="U_NYBJSRC_ANYOBJECT_ID">
+                <on column="anyObject_id"/>
+                <on column="resource_id"/>
+            </unique>
+        </table>
+        <table name="AnyTemplatePullTask">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="template" type="clob" size="-1"/>
+            <column name="PULLTASK_ID" type="varchar" size="36"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <fk to-table="Task" column="PULLTASK_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <index name="I_NYTMTSK_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_NYTMTSK_PULLTASK" column="PULLTASK_ID"/>
+            <unique name="U_NYTMTSK_PULLTASK_ID">
+                <on column="PULLTASK_ID"/>
+                <on column="ANYTYPE_ID"/>
+            </unique>
+        </table>
+        <table name="AnyTemplateRealm">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="template" type="clob" size="-1"/>
+            <column name="REALM_ID" type="varchar" size="36"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <fk to-table="Realm" column="REALM_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <index name="I_NYTMRLM_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_NYTMRLM_REALM" column="REALM_ID"/>
+            <unique name="U_NYTMRLM_REALM_ID">
+                <on column="REALM_ID"/>
+                <on column="ANYTYPE_ID"/>
+            </unique>
+        </table>
+        <table name="AnyType">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="kind" type="varchar" size="20"/>
+        </table>
+        <table name="AnyTypeClass">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+        </table>
+        <table name="AnyType_AnyTypeClass">
+            <column name="anyType_id" type="varchar" size="255"/>
+            <column name="anyTypeClass_id" type="varchar" size="255"/>
+            <fk to-table="AnyType" column="anyType_id"/>
+            <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
+            <index name="I_NYTYLSS_ANYTYPE_ID" column="anyType_id"/>
+            <index name="I_NYTYLSS_ELEMENT" column="anyTypeClass_id"/>
+            <unique name="U_NYTYLSS_ANYTYPE_ID">
+                <on column="anyType_id"/>
+                <on column="anyTypeClass_id"/>
+            </unique>
+        </table>
+        <table name="Application">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="description" type="varchar" size="255"/>
+        </table>
+        <table name="CPlainAttr">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <column name="OWNER_ID" type="varchar" size="255"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <fk to-table="SyncopeConf" column="OWNER_ID"/>
+            <index name="I_CPLNTTR_OWNER" column="OWNER_ID"/>
+            <index name="I_CPLNTTR_SCHEMA" column="schema_id"/>
+        </table>
+        <table name="CPlainAttrUniqueValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <fk to-table="CPlainAttr" column="ATTRIBUTE_ID"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <index name="I_CPLNQVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
+            <index name="I_CPLNQVL_SCHEMA" column="schema_id"/>
+            <unique name="U_CPLNQVL_BOOLEANVALUE">
+                <on column="booleanValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_CPLNQVL_DATEVALUE">
+                <on column="dateValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_CPLNQVL_STRINGVALUE">
+                <on column="stringValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_CPLNQVL_DOUBLEVALUE">
+                <on column="doubleValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_CPLNQVL_LONGVALUE">
+                <on column="longValue"/>
+                <on column="schema_id"/>
+            </unique>
+        </table>
+        <table name="CPlainAttrValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <fk to-table="CPlainAttr" column="ATTRIBUTE_ID"/>
+            <index name="I_CPLNRVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
+        </table>
+        <table name="ConnInstance">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="bundleName" type="varchar" size="255"/>
+            <column name="connRequestTimeout" type="integer"/>
+            <column name="connectorName" type="varchar" size="255"/>
+            <column name="displayName" type="varchar" size="255"/>
+            <column name="jsonConf" type="clob" size="-1"/>
+            <column name="location" type="varchar" size="255"/>
+            <column name="version" type="varchar" size="255"/>
+            <column name="ADMINREALM_ID" type="varchar" size="36"/>
+            <column name="maxIdle" type="integer"/>
+            <column name="maxObjects" type="integer"/>
+            <column name="maxWait" type="bigint"/>
+            <column name="minEvictableIdleTimeMillis" type="bigint"/>
+            <column name="minIdle" type="integer"/>
+            <fk to-table="Realm" column="ADMINREALM_ID"/>
+            <index name="I_CNNNTNC_ADMINREALM" column="ADMINREALM_ID"/>
+            <unique name="U_CNNNTNC_DISPLAYNAME" column="displayName"/>
+        </table>
+        <table name="ConnInstance_capabilities">
+            <column name="connInstance_id" type="varchar" size="36"/>
+            <column name="capability" type="varchar" size="20"/>
+            <fk to-table="ConnInstance" column="connInstance_id"/>
+            <index name="I_CNNNLTS_CONNINSTANCE_ID" column="connInstance_id"/>
+        </table>
+        <table name="DerSchema">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="expression" type="varchar" size="255"/>
+            <column name="ANYTYPECLASS_ID" type="varchar" size="255"/>
+            <fk to-table="SyncopeSchema" column="id"/>
+            <fk to-table="AnyTypeClass" column="ANYTYPECLASS_ID"/>
+            <index name="I_DRSCHEM_ANYTYPECLASS" column="ANYTYPECLASS_ID"/>
+        </table>
+        <table name="DynRealm">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+        </table>
+        <table name="DynRealmMembership">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="fiql" type="varchar" size="255"/>
+            <column name="DYNREALM_ID" type="varchar" size="255"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <fk to-table="DynRealm" column="DYNREALM_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <index name="I_DYNRSHP_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_DYNRSHP_DYNREALM" column="DYNREALM_ID"/>
+        </table>
+        <table name="DynRoleMembership">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="fiql" type="varchar" size="255"/>
+            <column name="ROLE_ID" type="varchar" size="255"/>
+            <fk to-table="SyncopeRole" column="ROLE_ID"/>
+            <index name="I_DYNRSHP_ROLE" column="ROLE_ID"/>
+        </table>
+        <table name="ExternalResource">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="createTraceLevel" type="varchar" size="20"/>
+            <column name="deleteTraceLevel" type="varchar" size="20"/>
+            <column name="enforceMandatoryCondition" type="integer"/>
+            <column name="jsonConf" type="clob" size="-1"/>
+            <column name="overrideCapabilities" type="integer"/>
+            <column name="propagationPriority" type="integer"/>
+            <column name="provisioningTraceLevel" type="varchar" size="20"/>
+            <column name="randomPwdIfNotProvided" type="integer"/>
+            <column name="updateTraceLevel" type="varchar" size="20"/>
+            <column name="ACCOUNTPOLICY_ID" type="varchar" size="36"/>
+            <column name="CONNECTOR_ID" type="varchar" size="36"/>
+            <column name="PASSWORDPOLICY_ID" type="varchar" size="36"/>
+            <column name="PULLPOLICY_ID" type="varchar" size="36"/>
+            <column name="PUSHPOLICY_ID" type="varchar" size="36"/>
+            <fk to-table="AccountPolicy" column="ACCOUNTPOLICY_ID"/>
+            <fk to-table="ConnInstance" column="CONNECTOR_ID"/>
+            <fk to-table="PasswordPolicy" column="PASSWORDPOLICY_ID"/>
+            <fk to-table="PullPolicy" column="PULLPOLICY_ID"/>
+            <fk to-table="PushPolicy" column="PUSHPOLICY_ID"/>
+            <index name="I_XTRNSRC_ACCOUNTPOLICY" column="ACCOUNTPOLICY_ID"/>
+            <index name="I_XTRNSRC_CONNECTOR" column="CONNECTOR_ID"/>
+            <index name="I_XTRNSRC_PASSWORDPOLICY" column="PASSWORDPOLICY_ID"/>
+            <index name="I_XTRNSRC_PULLPOLICY" column="PULLPOLICY_ID"/>
+            <index name="I_XTRNSRC_PUSHPOLICY" column="PUSHPOLICY_ID"/>
+        </table>
+        <table name="ExternalResourcePropAction">
+            <column name="resource_id" type="varchar" size="255"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="ExternalResource" column="resource_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_XTRNCTN_ELEMENT" column="implementation_id"/>
+            <index name="I_XTRNCTN_RESOURCE_ID" column="resource_id"/>
+            <unique name="U_XTRNCTN_RESOURCE_ID">
+                <on column="resource_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="ExternalResource_capOverride">
+            <column name="resource_id" type="varchar" size="255"/>
+            <column name="capabilityOverride" type="varchar" size="20"/>
+            <fk to-table="ExternalResource" column="resource_id"/>
+            <index name="I_XTRNRRD_RESOURCE_ID" column="resource_id"/>
+        </table>
+        <table name="GPlainAttr">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="OWNER_ID" type="varchar" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <fk to-table="SyncopeGroup" column="OWNER_ID"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <index name="I_GPLNTTR_OWNER" column="OWNER_ID"/>
+            <index name="I_GPLNTTR_SCHEMA" column="schema_id"/>
+        </table>
+        <table name="GPlainAttrUniqueValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <fk to-table="GPlainAttr" column="ATTRIBUTE_ID"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <index name="I_GPLNQVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
+            <index name="I_GPLNQVL_SCHEMA" column="schema_id"/>
+            <unique name="U_GPLNQVL_BOOLEANVALUE">
+                <on column="booleanValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_GPLNQVL_DATEVALUE">
+                <on column="dateValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_GPLNQVL_STRINGVALUE">
+                <on column="stringValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_GPLNQVL_DOUBLEVALUE">
+                <on column="doubleValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_GPLNQVL_LONGVALUE">
+                <on column="longValue"/>
+                <on column="schema_id"/>
+            </unique>
+        </table>
+        <table name="GPlainAttrValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <fk to-table="GPlainAttr" column="ATTRIBUTE_ID"/>
+            <index name="I_GPLNRVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
+        </table>
+        <table name="Implementation">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="body" type="clob" size="-1"/>
+            <column name="engine" type="varchar" not-null="true" size="20"/>
+            <column name="type" type="varchar" not-null="true" size="21"/>
+        </table>
+        <table name="LAPlainAttr">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="ACCOUNT_ID" type="varchar" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <column name="OWNER_ID" type="varchar" size="36"/>
+            <fk to-table="LinkedAccount" column="ACCOUNT_ID"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <fk to-table="SyncopeUser" column="OWNER_ID"/>
+            <index name="I_LPLNTTR_ACCOUNT" column="ACCOUNT_ID"/>
+            <index name="I_LPLNTTR_OWNER" column="OWNER_ID"/>
+            <index name="I_LPLNTTR_SCHEMA" column="schema_id"/>
+        </table>
+        <table name="LAPlainAttrUniqueValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <fk to-table="LAPlainAttr" column="ATTRIBUTE_ID"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <index name="I_LPLNQVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
+            <index name="I_LPLNQVL_SCHEMA" column="schema_id"/>
+        </table>
+        <table name="LAPlainAttrValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <fk to-table="LAPlainAttr" column="ATTRIBUTE_ID"/>
+            <index name="I_LPLNRVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
+        </table>
+        <table name="LinkedAccount">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="cipherAlgorithm" type="varchar" size="20"/>
+            <column name="connObjectKeyValue" type="varchar" size="255"/>
+            <column name="password" type="varchar" size="255"/>
+            <column name="suspended" type="integer"/>
+            <column name="username" type="varchar" size="255"/>
+            <column name="OWNER_ID" type="varchar" size="36"/>
+            <column name="RESOURCE_ID" type="varchar" size="255"/>
+            <fk to-table="SyncopeUser" column="OWNER_ID"/>
+            <fk to-table="ExternalResource" column="RESOURCE_ID"/>
+            <index name="I_LNKDCNT_OWNER" column="OWNER_ID"/>
+            <index name="I_LNKDCNT_RESOURCE" column="RESOURCE_ID"/>
+            <unique name="U_LNKDCNT_CONNOBJECTKEYVALUE">
+                <on column="connObjectKeyValue"/>
+                <on column="RESOURCE_ID"/>
+            </unique>
+        </table>
+        <table name="LinkedAccount_Privilege">
+            <column name="linked_account_id" type="varchar" size="36"/>
+            <column name="privilege_id" type="varchar" size="255"/>
+            <fk to-table="LinkedAccount" column="linked_account_id"/>
+            <fk to-table="Privilege" column="privilege_id"/>
+            <index name="I_LNKDVLG_ELEMENT" column="privilege_id"/>
+            <index name="I_LNKDVLG_LINKED_ACCOUNT_ID" column="linked_account_id"/>
+            <unique name="U_LNKDVLG_LINKED_ACCOUNT_ID">
+                <on column="linked_account_id"/>
+                <on column="privilege_id"/>
+            </unique>
+        </table>
+        <table name="MailTemplate">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="htmlTemplate" type="clob" size="-1"/>
+            <column name="textTemplate" type="clob" size="-1"/>
+        </table>
+        <table name="Mapping">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="connObjectLink" type="varchar" size="255"/>
+            <column name="PROVISION_ID" type="varchar" size="36"/>
+            <fk to-table="Provision" column="PROVISION_ID"/>
+            <index name="I_MAPPING_PROVISION" column="PROVISION_ID"/>
+        </table>
+        <table name="MappingItem">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="connObjectKey" type="integer"/>
+            <column name="extAttrName" type="varchar" size="255"/>
+            <column name="intAttrName" type="varchar" size="255"/>
+            <column name="mandatoryCondition" type="varchar" size="255"/>
+            <column name="password" type="integer"/>
+            <column name="propJEXL" type="varchar" size="255"/>
+            <column name="pullJEXL" type="varchar" size="255"/>
+            <column name="purpose" type="varchar" size="20"/>
+            <column name="MAPPING_ID" type="varchar" size="36"/>
+            <fk to-table="Mapping" column="MAPPING_ID"/>
+            <index name="I_MPPNGTM_MAPPING" column="MAPPING_ID"/>
+        </table>
+        <table name="MappingItemTransformer">
+            <column name="item_id" type="varchar" size="36"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="MappingItem" column="item_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_MPPNRMR_ELEMENT" column="implementation_id"/>
+            <index name="I_MPPNRMR_ITEM_ID" column="item_id"/>
+            <unique name="U_MPPNRMR_ITEM_ID">
+                <on column="item_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="Notification">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="active" type="integer"/>
+            <column name="recipientAttrName" type="varchar" size="255"/>
+            <column name="recipientsFIQL" type="varchar" size="255"/>
+            <column name="selfAsRecipient" type="integer"/>
+            <column name="sender" type="varchar" size="255"/>
+            <column name="subject" type="varchar" size="255"/>
+            <column name="traceLevel" type="varchar" size="20"/>
+            <column name="RECIPIENTSPROVIDER_ID" type="varchar" size="255"/>
+            <column name="template_id" type="varchar" size="255"/>
+            <fk to-table="Implementation" column="RECIPIENTSPROVIDER_ID"/>
+            <fk to-table="MailTemplate" column="template_id"/>
+            <index name="I_NTFCTON_RECIPIENTSPROVIDER" column="RECIPIENTSPROVIDER_ID"/>
+            <index name="I_NTFCTON_TEMPLATE" column="template_id"/>
+        </table>
+        <table name="NotificationTask_recipients">
+            <column name="notificationTask_id" type="varchar" size="36"/>
+            <column name="address" type="varchar" size="255"/>
+            <fk to-table="Task" column="notificationTask_id"/>
+            <index name="I_NTFCNTS_NOTIFICATIONTASK_ID" column="notificationTask_id"/>
+        </table>
+        <table name="Notification_events">
+            <column name="notification_id" type="varchar" size="36"/>
+            <column name="event" type="varchar" size="255"/>
+            <fk to-table="Notification" column="notification_id"/>
+            <index name="I_NTFCNTS_NOTIFICATION_ID" column="notification_id"/>
+        </table>
+        <table name="Notification_staticRecipients">
+            <column name="notification_id" type="varchar" size="36"/>
+            <column name="staticRecipients" type="varchar" size="255"/>
+            <fk to-table="Notification" column="notification_id"/>
+            <index name="I_NTFCNTS_NOTIFICATION_ID1" column="notification_id"/>
+        </table>
+        <table name="OrgUnit">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="connObjectLink" type="varchar" size="255"/>
+            <column name="ignoreCaseMatch" type="integer"/>
+            <column name="objectClass" type="varchar" size="255"/>
+            <column name="serializedSyncToken" type="clob" size="-1"/>
+            <column name="RESOURCE_ID" type="varchar" size="255"/>
+            <fk to-table="ExternalResource" column="RESOURCE_ID"/>
+            <index name="I_ORGUNIT_RESOURCE" column="RESOURCE_ID"/>
+        </table>
+        <table name="OrgUnitItem">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="connObjectKey" type="integer"/>
+            <column name="extAttrName" type="varchar" size="255"/>
+            <column name="intAttrName" type="varchar" size="255"/>
+            <column name="mandatoryCondition" type="varchar" size="255"/>
+            <column name="password" type="integer"/>
+            <column name="propJEXL" type="varchar" size="255"/>
+            <column name="pullJEXL" type="varchar" size="255"/>
+            <column name="purpose" type="varchar" size="20"/>
+            <column name="ORGUNIT_ID" type="varchar" size="36"/>
+            <fk to-table="OrgUnit" column="ORGUNIT_ID"/>
+            <index name="I_RGUNTTM_ORGUNIT" column="ORGUNIT_ID"/>
+        </table>
+        <table name="OrgUnitItemTransformer">
+            <column name="item_id" type="varchar" size="36"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="OrgUnitItem" column="item_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_RGNTRMR_ELEMENT" column="implementation_id"/>
+            <index name="I_RGNTRMR_ITEM_ID" column="item_id"/>
+            <unique name="U_RGNTRMR_ITEM_ID">
+                <on column="item_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="PasswordPolicy">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="description" type="varchar" size="255"/>
+            <column name="allowNullPassword" type="integer"/>
+            <column name="historyLength" type="integer"/>
+        </table>
+        <table name="PasswordPolicyRule">
+            <column name="policy_id" type="varchar" size="36"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="PasswordPolicy" column="policy_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_PSSWYRL_ELEMENT" column="implementation_id"/>
+            <index name="I_PSSWYRL_POLICY_ID" column="policy_id"/>
+            <unique name="U_PSSWYRL_POLICY_ID">
+                <on column="policy_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="PlainSchema">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="cipherAlgorithm" type="varchar" size="20"/>
+            <column name="conversionPattern" type="varchar" size="255"/>
+            <column name="enumerationKeys" type="clob" size="-1"/>
+            <column name="enumerationValues" type="clob" size="-1"/>
+            <column name="mandatoryCondition" type="varchar" size="255"/>
+            <column name="mimeType" type="varchar" size="255"/>
+            <column name="multivalue" type="integer"/>
+            <column name="readonly" type="integer"/>
+            <column name="secretKey" type="varchar" size="255"/>
+            <column name="type" type="varchar" size="20"/>
+            <column name="uniqueConstraint" type="integer"/>
+            <column name="ANYTYPECLASS_ID" type="varchar" size="255"/>
+            <column name="VALIDATOR_ID" type="varchar" size="255"/>
+            <fk to-table="SyncopeSchema" column="id"/>
+            <fk to-table="AnyTypeClass" column="ANYTYPECLASS_ID"/>
+            <fk to-table="Implementation" column="VALIDATOR_ID"/>
+            <index name="I_PLNSCHM_ANYTYPECLASS" column="ANYTYPECLASS_ID"/>
+            <index name="I_PLNSCHM_VALIDATOR" column="VALIDATOR_ID"/>
+        </table>
+        <table name="Privilege">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="description" type="varchar" size="255"/>
+            <column name="spec" type="clob" size="-1"/>
+            <column name="APPLICATION_ID" type="varchar" size="255"/>
+            <fk to-table="Application" column="APPLICATION_ID"/>
+            <index name="I_PRIVILG_APPLICATION" column="APPLICATION_ID"/>
+        </table>
+        <table name="Provision">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="ignoreCaseMatch" type="integer"/>
+            <column name="objectClass" type="varchar" size="255"/>
+            <column name="serializedSyncToken" type="clob" size="-1"/>
+            <column name="RESOURCE_ID" type="varchar" size="255"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <column name="UIDONCREATE_ID" type="varchar" size="255"/>
+            <fk to-table="ExternalResource" column="RESOURCE_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <fk to-table="PlainSchema" column="UIDONCREATE_ID"/>
+            <index name="I_PROVSON_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_PROVSON_RESOURCE" column="RESOURCE_ID"/>
+            <index name="I_PROVSON_UIDONCREATE" column="UIDONCREATE_ID"/>
+            <unique name="U_PROVSON_RESOURCE_ID">
+                <on column="RESOURCE_ID"/>
+                <on column="ANYTYPE_ID"/>
+            </unique>
+        </table>
+        <table name="Provision_AnyTypeClass">
+            <column name="provision_id" type="varchar" size="36"/>
+            <column name="anyTypeClass_id" type="varchar" size="255"/>
+            <fk to-table="Provision" column="provision_id"/>
+            <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
+            <index name="I_PRVSLSS_ELEMENT" column="anyTypeClass_id"/>
+            <index name="I_PRVSLSS_PROVISION_ID" column="provision_id"/>
+            <unique name="U_PRVSLSS_PROVISION_ID">
+                <on column="provision_id"/>
+                <on column="anyTypeClass_id"/>
+            </unique>
+        </table>
+        <table name="PullCorrelationRuleEntity">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="PULLPOLICY_ID" type="varchar" size="36"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <column name="IMPLEMENTATION_ID" type="varchar" size="255"/>
+            <fk to-table="PullPolicy" column="PULLPOLICY_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <fk to-table="Implementation" column="IMPLEMENTATION_ID"/>
+            <index name="I_PLLCTTY_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_PLLCTTY_IMPLEMENTATION" column="IMPLEMENTATION_ID"/>
+            <index name="I_PLLCTTY_PULLPOLICY" column="PULLPOLICY_ID"/>
+            <unique name="U_PLLCTTY_PULLPOLICY_ID">
+                <on column="PULLPOLICY_ID"/>
+                <on column="ANYTYPE_ID"/>
+            </unique>
+        </table>
+        <table name="PullPolicy">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="description" type="varchar" size="255"/>
+            <column name="conflictResolutionAction" type="varchar" size="20"/>
+        </table>
+        <table name="PullTaskAction">
+            <column name="task_id" type="varchar" size="36"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="Task" column="task_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_PLLTCTN_ELEMENT" column="implementation_id"/>
+            <index name="I_PLLTCTN_TASK_ID" column="task_id"/>
+            <unique name="U_PLLTCTN_TASK_ID">
+                <on column="task_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="PushCorrelationRuleEntity">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="PUSHPOLICY_ID" type="varchar" size="36"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <column name="IMPLEMENTATION_ID" type="varchar" size="255"/>
+            <fk to-table="PushPolicy" column="PUSHPOLICY_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <fk to-table="Implementation" column="IMPLEMENTATION_ID"/>
+            <index name="I_PSHCTTY_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_PSHCTTY_IMPLEMENTATION" column="IMPLEMENTATION_ID"/>
+            <index name="I_PSHCTTY_PUSHPOLICY" column="PUSHPOLICY_ID"/>
+            <unique name="U_PSHCTTY_PUSHPOLICY_ID">
+                <on column="PUSHPOLICY_ID"/>
+                <on column="ANYTYPE_ID"/>
+            </unique>
+        </table>
+        <table name="PushPolicy">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="description" type="varchar" size="255"/>
+            <column name="conflictResolutionAction" type="varchar" size="20"/>
+        </table>
+        <table name="PushTaskAction">
+            <column name="task_id" type="varchar" size="36"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="Task" column="task_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_PSHTCTN_ELEMENT" column="implementation_id"/>
+            <index name="I_PSHTCTN_TASK_ID" column="task_id"/>
+            <unique name="U_PSHTCTN_TASK_ID">
+                <on column="task_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="PushTaskAnyFilter">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="fiql" type="varchar" size="255"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <column name="PUSHTASK_ID" type="varchar" size="36"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <fk to-table="Task" column="PUSHTASK_ID"/>
+            <index name="I_PSHTLTR_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_PSHTLTR_PUSHTASK" column="PUSHTASK_ID"/>
+            <unique name="U_PSHTLTR_PUSHTASK_ID">
+                <on column="PUSHTASK_ID"/>
+                <on column="ANYTYPE_ID"/>
+            </unique>
+        </table>
+        <table name="Realm">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="name" type="varchar" size="255"/>
+            <column name="ACCOUNTPOLICY_ID" type="varchar" size="36"/>
+            <column name="PARENT_ID" type="varchar" size="36"/>
+            <column name="PASSWORDPOLICY_ID" type="varchar" size="36"/>
+            <fk to-table="AccountPolicy" column="ACCOUNTPOLICY_ID"/>
+            <fk to-table="Realm" column="PARENT_ID"/>
+            <fk to-table="PasswordPolicy" column="PASSWORDPOLICY_ID"/>
+            <index name="I_REALM_ACCOUNTPOLICY" column="ACCOUNTPOLICY_ID"/>
+            <index name="I_REALM_PARENT" column="PARENT_ID"/>
+            <index name="I_REALM_PASSWORDPOLICY" column="PASSWORDPOLICY_ID"/>
+            <unique name="U_REALM_NAME">
+                <on column="name"/>
+                <on column="PARENT_ID"/>
+            </unique>
+        </table>
+        <table name="RealmAction">
+            <column name="realm_id" type="varchar" size="36"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="Realm" column="realm_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_RLMCTON_ELEMENT" column="implementation_id"/>
+            <index name="I_RLMCTON_REALM_ID" column="realm_id"/>
+            <unique name="U_RLMCTON_REALM_ID">
+                <on column="realm_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="Realm_ExternalResource">
+            <column name="realm_id" type="varchar" size="36"/>
+            <column name="resource_id" type="varchar" size="255"/>
+            <fk to-table="Realm" column="realm_id"/>
+            <fk to-table="ExternalResource" column="resource_id"/>
+            <index name="I_RLM_SRC_ELEMENT" column="resource_id"/>
+            <index name="I_RLM_SRC_REALM_ID" column="realm_id"/>
+            <unique name="U_RLM_SRC_REALM_ID">
+                <on column="realm_id"/>
+                <on column="resource_id"/>
+            </unique>
+        </table>
+        <table name="RelationshipType">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="description" type="varchar" size="255"/>
+        </table>
+        <table name="Remediation">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="error" type="clob" size="-1"/>
+            <column name="instant" type="timestamp"/>
+            <column name="operation" type="varchar" size="20"/>
+            <column name="payload" type="clob" size="-1"/>
+            <column name="remoteName" type="varchar" size="255"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <column name="PULLTASK_ID" type="varchar" size="36"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <fk to-table="Task" column="PULLTASK_ID"/>
+            <index name="I_RMDTION_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_RMDTION_PULLTASK" column="PULLTASK_ID"/>
+        </table>
+        <table name="Report">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="active" type="integer"/>
+            <column name="cronExpression" type="varchar" size="255"/>
+            <column name="name" type="varchar" not-null="true" size="255"/>
+            <column name="template_id" type="varchar" size="255"/>
+            <fk to-table="ReportTemplate" column="template_id"/>
+            <index name="I_REPORT_TEMPLATE" column="template_id"/>
+            <unique name="U_REPORT_NAME" column="name"/>
+        </table>
+        <table name="ReportExec">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="endDate" type="timestamp"/>
+            <column name="message" type="clob" size="-1"/>
+            <column name="startDate" type="timestamp"/>
+            <column name="status" type="varchar" size="255"/>
+            <column name="execResult" type="blob" size="-1"/>
+            <column name="REPORT_ID" type="varchar" size="36"/>
+            <fk to-table="Report" column="REPORT_ID"/>
+            <index name="I_RPORTXC_REPORT" column="REPORT_ID"/>
+        </table>
+        <table name="ReportReportlet">
+            <column name="report_id" type="varchar" size="36"/>
+            <column name="implementation_id" type="varchar" size="255"/>
+            <fk to-table="Report" column="report_id"/>
+            <fk to-table="Implementation" column="implementation_id"/>
+            <index name="I_RPRTTLT_ELEMENT" column="implementation_id"/>
+            <index name="I_RPRTTLT_REPORT_ID" column="report_id"/>
+            <unique name="U_RPRTTLT_REPORT_ID">
+                <on column="report_id"/>
+                <on column="implementation_id"/>
+            </unique>
+        </table>
+        <table name="ReportTemplate">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="csvTemplate" type="clob" size="-1"/>
+            <column name="foTemplate" type="clob" size="-1"/>
+            <column name="htmlTemplate" type="clob" size="-1"/>
+        </table>
+        <table name="SchemaLabel">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="display" type="varchar" not-null="true" size="255"/>
+            <column name="locale" type="varchar" not-null="true" size="255"/>
+            <column name="SCHEMA_ID" type="varchar" size="255"/>
+            <fk to-table="SyncopeSchema" column="SCHEMA_ID"/>
+            <index name="I_SCHMLBL_SCHEMA" column="SCHEMA_ID"/>
+            <unique name="U_SCHMLBL_SCHEMA_ID">
+                <on column="SCHEMA_ID"/>
+                <on column="locale"/>
+            </unique>
+        </table>
+        <table name="SecurityQuestion">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="content" type="varchar" size="255"/>
+            <unique name="U_SCRTSTN_CONTENT" column="content"/>
+        </table>
+        <table name="SyncopeBatch">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="expiryTime" type="timestamp"/>
+            <column name="results" type="clob" size="-1"/>
+        </table>
+        <table name="SyncopeConf">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+        </table>
+        <table name="SyncopeDomain">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="adminCipherAlgorithm" type="varchar" size="20"/>
+            <column name="adminPwd" type="varchar" size="255"/>
+        </table>
+        <table name="SyncopeGroup">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="creationDate" type="timestamp"/>
+            <column name="creator" type="varchar" size="255"/>
+            <column name="lastChangeDate" type="timestamp"/>
+            <column name="lastModifier" type="varchar" size="255"/>
+            <column name="status" type="varchar" size="255"/>
+            <column name="name" type="varchar" size="255"/>
+            <column name="REALM_ID" type="varchar" size="36"/>
+            <column name="GROUPOWNER_ID" type="varchar" size="36"/>
+            <column name="USEROWNER_ID" type="varchar" size="36"/>
+            <fk to-table="Realm" column="REALM_ID"/>
+            <fk to-table="SyncopeGroup" column="GROUPOWNER_ID"/>
+            <fk to-table="SyncopeUser" column="USEROWNER_ID"/>
+            <index name="I_SYNCGRP_GROUPOWNER" column="GROUPOWNER_ID"/>
+            <index name="I_SYNCGRP_REALM" column="REALM_ID"/>
+            <index name="I_SYNCGRP_USEROWNER" column="USEROWNER_ID"/>
+            <unique name="U_SYNCGRP_NAME" column="name"/>
+        </table>
+        <table name="SyncopeGroup_AnyTypeClass">
+            <column name="group_id" type="varchar" size="36"/>
+            <column name="anyTypeClass_id" type="varchar" size="255"/>
+            <fk to-table="SyncopeGroup" column="group_id"/>
+            <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
+            <index name="I_SYNCLSS_ELEMENT1" column="anyTypeClass_id"/>
+            <index name="I_SYNCLSS_GROUP_ID" column="group_id"/>
+            <unique name="U_SYNCLSS_GROUP_ID">
+                <on column="group_id"/>
+                <on column="anyTypeClass_id"/>
+            </unique>
+        </table>
+        <table name="SyncopeGroup_ExternalResource">
+            <column name="group_id" type="varchar" size="36"/>
+            <column name="resource_id" type="varchar" size="255"/>
+            <fk to-table="SyncopeGroup" column="group_id"/>
+            <fk to-table="ExternalResource" column="resource_id"/>
+            <index name="I_SYNCSRC_ELEMENT1" column="resource_id"/>
+            <index name="I_SYNCSRC_GROUP_ID" column="group_id"/>
+            <unique name="U_SYNCSRC_GROUP_ID">
+                <on column="group_id"/>
+                <on column="resource_id"/>
+            </unique>
+        </table>
+        <table name="SyncopeLogger">
+            <pk column="logName"/>
+            <column name="logName" type="varchar" not-null="true" size="255"/>
+            <column name="logLevel" type="varchar" not-null="true" size="20"/>
+            <column name="logType" type="varchar" not-null="true" size="20"/>
+        </table>
+        <table name="SyncopeRole">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="anyLayout" type="clob" size="-1"/>
+        </table>
+        <table name="SyncopeRole_DynRealm">
+            <column name="role_id" type="varchar" size="255"/>
+            <column name="dynamicRealm_id" type="varchar" size="255"/>
+            <fk to-table="SyncopeRole" column="role_id"/>
+            <fk to-table="DynRealm" column="dynamicRealm_id"/>
+            <index name="I_SYNCRLM_ELEMENT" column="dynamicRealm_id"/>
+            <index name="I_SYNCRLM_ROLE_ID" column="role_id"/>
+            <unique name="U_SYNCRLM_ROLE_ID">
+                <on column="role_id"/>
+                <on column="dynamicRealm_id"/>
+            </unique>
+        </table>
+        <table name="SyncopeRole_Privilege">
+            <column name="role_id" type="varchar" size="255"/>
+            <column name="privilege_id" type="varchar" size="255"/>
+            <fk to-table="SyncopeRole" column="role_id"/>
+            <fk to-table="Privilege" column="privilege_id"/>
+            <index name="I_SYNCVLG_ELEMENT" column="privilege_id"/>
+            <index name="I_SYNCVLG_ROLE_ID" column="role_id"/>
+            <unique name="U_SYNCVLG_ROLE_ID">
+                <on column="role_id"/>
+                <on column="privilege_id"/>
+            </unique>
+        </table>
+        <table name="SyncopeRole_Realm">
+            <column name="role_id" type="varchar" size="255"/>
+            <column name="realm_id" type="varchar" size="36"/>
+            <fk to-table="SyncopeRole" column="role_id"/>
+            <fk to-table="Realm" column="realm_id"/>
+            <index name="I_SYNCRLM_ELEMENT1" column="realm_id"/>
+            <index name="I_SYNCRLM_ROLE_ID1" column="role_id"/>
+            <unique name="U_SYNCRLM_ROLE_ID1">
+                <on column="role_id"/>
+                <on column="realm_id"/>
+            </unique>
+        </table>
+        <table name="SyncopeRole_entitlements">
+            <column name="role_id" type="varchar" size="255"/>
+            <column name="entitlement" type="varchar" size="255"/>
+            <fk to-table="SyncopeRole" column="role_id"/>
+            <index name="I_SYNCNTS_ROLE_ID" column="role_id"/>
+        </table>
+        <table name="SyncopeSchema">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+        </table>
+        <table name="SyncopeUser">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="creationDate" type="timestamp"/>
+            <column name="creator" type="varchar" size="255"/>
+            <column name="lastChangeDate" type="timestamp"/>
+            <column name="lastModifier" type="varchar" size="255"/>
+            <column name="status" type="varchar" size="255"/>
+            <column name="changePwdDate" type="timestamp"/>
+            <column name="cipherAlgorithm" type="varchar" size="20"/>
+            <column name="failedLogins" type="integer"/>
+            <column name="lastLoginDate" type="timestamp"/>
+            <column name="mustChangePassword" type="integer"/>
+            <column name="password" type="varchar" size="255"/>
+            <column name="securityAnswer" type="varchar" size="255"/>
+            <column name="suspended" type="integer"/>
+            <column name="token" type="clob" size="-1"/>
+            <column name="tokenExpireTime" type="timestamp"/>
+            <column name="username" type="varchar" size="255"/>
+            <column name="REALM_ID" type="varchar" size="36"/>
+            <column name="SECURITYQUESTION_ID" type="varchar" size="36"/>
+            <fk to-table="Realm" column="REALM_ID"/>
+            <fk to-table="SecurityQuestion" column="SECURITYQUESTION_ID"/>
+            <index name="I_SYNCPSR_REALM" column="REALM_ID"/>
+            <index name="I_SYNCPSR_SECURITYQUESTION" column="SECURITYQUESTION_ID"/>
+            <unique name="U_SYNCPSR_USERNAME" column="username"/>
+        </table>
+        <table name="SyncopeUser_AnyTypeClass">
+            <column name="user_id" type="varchar" size="36"/>
+            <column name="anyTypeClass_id" type="varchar" size="255"/>
+            <fk to-table="SyncopeUser" column="user_id"/>
+            <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
+            <index name="I_SYNCLSS_ELEMENT" column="anyTypeClass_id"/>
+            <index name="I_SYNCLSS_USER_ID" column="user_id"/>
+            <unique name="U_SYNCLSS_USER_ID">
+                <on column="user_id"/>
+                <on column="anyTypeClass_id"/>
+            </unique>
+        </table>
+        <table name="SyncopeUser_ExternalResource">
+            <column name="user_id" type="varchar" size="36"/>
+            <column name="resource_id" type="varchar" size="255"/>
+            <fk to-table="SyncopeUser" column="user_id"/>
+            <fk to-table="ExternalResource" column="resource_id"/>
+            <index name="I_SYNCSRC_ELEMENT" column="resource_id"/>
+            <index name="I_SYNCSRC_USER_ID" column="user_id"/>
+            <unique name="U_SYNCSRC_USER_ID">
+                <on column="user_id"/>
+                <on column="resource_id"/>
+            </unique>
+        </table>
+        <table name="SyncopeUser_SyncopeRole">
+            <column name="user_id" type="varchar" size="36"/>
+            <column name="role_id" type="varchar" size="255"/>
+            <fk to-table="SyncopeUser" column="user_id"/>
+            <fk to-table="SyncopeRole" column="role_id"/>
+            <index name="I_SYNCPRL_ELEMENT" column="role_id"/>
+            <index name="I_SYNCPRL_USER_ID" column="user_id"/>
+            <unique name="U_SYNCPRL_USER_ID">
+                <on column="user_id"/>
+                <on column="role_id"/>
+            </unique>
+        </table>
+        <table name="SyncopeUser_passwordHistory">
+            <column name="user_id" type="varchar" size="36"/>
+            <column name="passwordHistoryValue" type="varchar" size="255"/>
+            <fk to-table="SyncopeUser" column="user_id"/>
+            <index name="I_SYNCTRY_USER_ID" column="user_id"/>
+        </table>
+        <table name="Task">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="DTYPE" type="varchar" size="31"/>
+            <column name="active" type="integer"/>
+            <column name="cronExpression" type="varchar" size="255"/>
+            <column name="description" type="varchar" size="255"/>
+            <column name="name" type="varchar" size="255"/>
+            <column name="startAt" type="timestamp"/>
+            <column name="matchingRule" type="varchar" size="20"/>
+            <column name="performCreate" type="integer"/>
+            <column name="performDelete" type="integer"/>
+            <column name="performUpdate" type="integer"/>
+            <column name="syncStatus" type="integer"/>
+            <column name="unmatchingRule" type="varchar" size="20"/>
+            <column name="JOBDELEGATE_ID" type="varchar" size="255"/>
+            <column name="RESOURCE_ID" type="varchar" size="255"/>
+            <column name="SOURCEREALM_ID" type="varchar" size="36"/>
+            <column name="pullMode" type="varchar" size="23"/>
+            <column name="remediation" type="integer"/>
+            <column name="DESTINATIONREALM_ID" type="varchar" size="36"/>
+            <column name="RECONFILTERBUILDER_ID" type="varchar" size="255"/>
+            <column name="anyTypeKind" type="varchar" size="20"/>
+            <column name="entityKey" type="varchar" size="255"/>
+            <column name="executed" type="integer"/>
+            <column name="htmlBody" type="clob" size="-1"/>
+            <column name="sender" type="varchar" size="255"/>
+            <column name="subject" type="varchar" size="255"/>
+            <column name="textBody" type="clob" size="-1"/>
+            <column name="traceLevel" type="varchar" size="20"/>
+            <column name="NOTIFICATION_ID" type="varchar" size="36"/>
+            <column name="anyType" type="varchar" size="255"/>
+            <column name="attributes" type="clob" size="-1"/>
+            <column name="connObjectKey" type="varchar" size="255"/>
+            <column name="objectClassName" type="varchar" size="255"/>
+            <column name="oldConnObjectKey" type="varchar" size="255"/>
+            <column name="operation" type="varchar" size="20"/>
+            <fk to-table="Implementation" column="JOBDELEGATE_ID"/>
+            <fk to-table="ExternalResource" column="RESOURCE_ID"/>
+            <fk to-table="Realm" column="SOURCEREALM_ID"/>
+            <fk to-table="Realm" column="DESTINATIONREALM_ID"/>
+            <fk to-table="Implementation" column="RECONFILTERBUILDER_ID"/>
+            <fk to-table="Notification" column="NOTIFICATION_ID"/>
+            <index name="I_TASK_DESTINATIONREALM" column="DESTINATIONREALM_ID"/>
+            <index name="I_TASK_DTYPE" column="DTYPE"/>
+            <index name="I_TASK_JOBDELEGATE" column="JOBDELEGATE_ID"/>
+            <index name="I_TASK_NOTIFICATION" column="NOTIFICATION_ID"/>
+            <index name="I_TASK_RECONFILTERBUILDER" column="RECONFILTERBUILDER_ID"/>
+            <index name="I_TASK_RESOURCE" column="RESOURCE_ID"/>
+            <index name="I_TASK_SOURCEREALM" column="SOURCEREALM_ID"/>
+        </table>
+        <table name="TaskExec">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="endDate" type="timestamp"/>
+            <column name="message" type="clob" size="-1"/>
+            <column name="startDate" type="timestamp"/>
+            <column name="status" type="varchar" size="255"/>
+            <column name="TASK_ID" type="varchar" size="36"/>
+            <fk to-table="Task" column="TASK_ID"/>
+            <index name="I_TSKEXEC_TASK" column="TASK_ID"/>
+        </table>
+        <table name="TypeExtension">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="GROUP_ID" type="varchar" size="36"/>
+            <column name="ANYTYPE_ID" type="varchar" size="255"/>
+            <fk to-table="SyncopeGroup" column="GROUP_ID"/>
+            <fk to-table="AnyType" column="ANYTYPE_ID"/>
+            <index name="I_TYPXNSN_ANYTYPE" column="ANYTYPE_ID"/>
+            <index name="I_TYPXNSN_GROUP" column="GROUP_ID"/>
+            <unique name="U_TYPXNSN_GROUP_ID">
+                <on column="GROUP_ID"/>
+                <on column="ANYTYPE_ID"/>
+            </unique>
+        </table>
+        <table name="TypeExtension_AnyTypeClass">
+            <column name="typeExtension_id" type="varchar" size="36"/>
+            <column name="anyTypeClass_id" type="varchar" size="255"/>
+            <fk to-table="TypeExtension" column="typeExtension_id"/>
+            <fk to-table="AnyTypeClass" column="anyTypeClass_id"/>
+            <index name="I_TYPXLSS_ELEMENT" column="anyTypeClass_id"/>
+            <index name="I_TYPXLSS_TYPEEXTENSION_ID" column="typeExtension_id"/>
+            <unique name="U_TYPXLSS_TYPEEXTENSION_ID">
+                <on column="typeExtension_id"/>
+                <on column="anyTypeClass_id"/>
+            </unique>
+        </table>
+        <table name="UDynGroupMembership">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="fiql" type="varchar" size="255"/>
+            <column name="GROUP_ID" type="varchar" size="36"/>
+            <fk to-table="SyncopeGroup" column="GROUP_ID"/>
+            <index name="I_DYNGSHP_GROUP1" column="GROUP_ID"/>
+        </table>
+        <table name="UMembership">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="user_id" type="varchar" size="36"/>
+            <column name="group_id" type="varchar" size="36"/>
+            <fk to-table="SyncopeUser" column="user_id"/>
+            <fk to-table="SyncopeGroup" column="group_id"/>
+            <index name="I_MMBRSHP_LEFTEND" column="user_id"/>
+            <index name="I_MMBRSHP_RIGHTEND" column="group_id"/>
+        </table>
+        <table name="UPlainAttr">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <column name="MEMBERSHIP_ID" type="varchar" size="36"/>
+            <column name="OWNER_ID" type="varchar" size="36"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <fk to-table="UMembership" column="MEMBERSHIP_ID"/>
+            <fk to-table="SyncopeUser" column="OWNER_ID"/>
+            <index name="I_UPLNTTR_MEMBERSHIP" column="MEMBERSHIP_ID"/>
+            <index name="I_UPLNTTR_OWNER" column="OWNER_ID"/>
+            <index name="I_UPLNTTR_SCHEMA" column="schema_id"/>
+        </table>
+        <table name="UPlainAttrUniqueValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <column name="schema_id" type="varchar" size="255"/>
+            <fk to-table="UPlainAttr" column="ATTRIBUTE_ID"/>
+            <fk to-table="PlainSchema" column="schema_id"/>
+            <index name="I_PLNTQVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
+            <index name="I_PLNTQVL_SCHEMA" column="schema_id"/>
+            <unique name="U_PLNTQVL_BOOLEANVALUE">
+                <on column="booleanValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_PLNTQVL_DATEVALUE">
+                <on column="dateValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_PLNTQVL_STRINGVALUE">
+                <on column="stringValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_PLNTQVL_DOUBLEVALUE">
+                <on column="doubleValue"/>
+                <on column="schema_id"/>
+            </unique>
+            <unique name="U_PLNTQVL_LONGVALUE">
+                <on column="longValue"/>
+                <on column="schema_id"/>
+            </unique>
+        </table>
+        <table name="UPlainAttrValue">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="binaryValue" type="blob" size="-1"/>
+            <column name="booleanValue" type="integer"/>
+            <column name="dateValue" type="timestamp"/>
+            <column name="doubleValue" type="double"/>
+            <column name="longValue" type="bigint"/>
+            <column name="stringValue" type="varchar" size="255"/>
+            <column name="ATTRIBUTE_ID" type="varchar" size="36"/>
+            <fk to-table="UPlainAttr" column="ATTRIBUTE_ID"/>
+            <index name="I_PLNTRVL_ATTRIBUTE" column="ATTRIBUTE_ID"/>
+        </table>
+        <table name="URelationship">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="36"/>
+            <column name="user_id" type="varchar" size="36"/>
+            <column name="anyObject_id" type="varchar" size="36"/>
+            <column name="TYPE_ID" type="varchar" size="255"/>
+            <fk to-table="SyncopeUser" column="user_id"/>
+            <fk to-table="AnyObject" column="anyObject_id"/>
+            <fk to-table="RelationshipType" column="TYPE_ID"/>
+            <index name="I_RLTNSHP_LEFTEND" column="user_id"/>
+            <index name="I_RLTNSHP_RIGHTEND" column="anyObject_id"/>
+            <index name="I_RLTNSHP_TYPE" column="TYPE_ID"/>
+            <unique name="U_RLTNSHP_TYPE_ID">
+                <on column="TYPE_ID"/>
+                <on column="user_id"/>
+                <on column="anyObject_id"/>
+            </unique>
+        </table>
+        <table name="VirSchema">
+            <pk column="id"/>
+            <column name="id" type="varchar" not-null="true" size="255"/>
+            <column name="extAttrName" type="varchar" size="255"/>
+            <column name="readonly" type="integer"/>
+            <column name="ANYTYPECLASS_ID" type="varchar" size="255"/>
+            <column name="PROVISION_ID" type="varchar" size="36"/>
+            <fk to-table="SyncopeSchema" column="id"/>
+            <fk to-table="AnyTypeClass" column="ANYTYPECLASS_ID"/>
+            <fk to-table="Provision" column="PROVISION_ID"/>
+            <index name="I_VIRSCHM_ANYTYPECLASS" column="ANYTYPECLASS_ID"/>
+            <index name="I_VIRSCHM_PROVISION" column="PROVISION_ID"/>
+        </table>
+    </schema>
 </schemas>
\ No newline at end of file
diff --git a/docker/core/src/main/resources/domains/MasterContent.xml.all b/docker/core/src/main/resources/domains/MasterContent.xml.all
index fd66eb6..39aa841 100644
--- a/docker/core/src/main/resources/domains/MasterContent.xml.all
+++ b/docker/core/src/main/resources/domains/MasterContent.xml.all
@@ -135,23 +135,6 @@ under the License.
   <CPlainAttrValue id="447e2456-3ff5-41bc-8ff1-cbb0567546cb"
                    attribute_id="cfec3140-562d-459c-ac6a-e3e10758661d" longValue="120"/>
   
-  <!--  Connector and Resource configuration history -->                   
-  <SyncopeSchema id="connector.conf.history.size"/>
-  <PlainSchema id="connector.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="ae36c6ab-0f39-40d7-b6e6-3b8394547c9c"
-              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="connector.conf.history.size"/>
-  <CPlainAttrValue id="4989ce5d-7b42-4a5c-b725-54286888df10"
-                   attribute_id="ae36c6ab-0f39-40d7-b6e6-3b8394547c9c" longValue="10"/>
-  
-  <SyncopeSchema id="resource.conf.history.size"/>
-  <PlainSchema id="resource.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="ae7ae53a-74cf-48b0-9a57-6d2c94928e60"
-              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="resource.conf.history.size"/>
-  <CPlainAttrValue id="059ac3e1-687f-4dd9-a28b-a23f8b436f31"
-                   attribute_id="ae7ae53a-74cf-48b0-9a57-6d2c94928e60" longValue="10"/>
-
   <AnyType id="USER" kind="USER"/>
   <AnyTypeClass id="BaseUser"/>
   <AnyType_AnyTypeClass anyType_id="USER" anyTypeClass_id="BaseUser"/>
diff --git a/docker/core/src/main/resources/domains/MasterContent.xml.myjson b/docker/core/src/main/resources/domains/MasterContent.xml.myjson
index 814b3c6..f606503 100644
--- a/docker/core/src/main/resources/domains/MasterContent.xml.myjson
+++ b/docker/core/src/main/resources/domains/MasterContent.xml.myjson
@@ -77,17 +77,8 @@ under the License.
   <PlainSchema id="jwt.lifetime.minutes" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
     
-  <!--  Connector and Resource configuration history -->                   
-  <SyncopeSchema id="connector.conf.history.size"/>
-  <PlainSchema id="connector.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  
-  <SyncopeSchema id="resource.conf.history.size"/>
-  <PlainSchema id="resource.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  
   <SyncopeConf id="cd64d66f-6fff-4008-b966-a06b1cc1436d"
-               plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SSHA256&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&quot;values&q [...]
+	       plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SSHA256&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&quot;values&quot;:[{ [...]
 
   <AnyType id="USER" kind="USER"/>
   <AnyTypeClass id="BaseUser"/>
diff --git a/docker/core/src/main/resources/domains/MasterContent.xml.pgjsonb b/docker/core/src/main/resources/domains/MasterContent.xml.pgjsonb
index 814b3c6..7bb6501 100644
--- a/docker/core/src/main/resources/domains/MasterContent.xml.pgjsonb
+++ b/docker/core/src/main/resources/domains/MasterContent.xml.pgjsonb
@@ -77,17 +77,8 @@ under the License.
   <PlainSchema id="jwt.lifetime.minutes" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
     
-  <!--  Connector and Resource configuration history -->                   
-  <SyncopeSchema id="connector.conf.history.size"/>
-  <PlainSchema id="connector.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  
-  <SyncopeSchema id="resource.conf.history.size"/>
-  <PlainSchema id="resource.conf.history.size" type="Long"
-               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  
   <SyncopeConf id="cd64d66f-6fff-4008-b966-a06b1cc1436d"
-               plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SSHA256&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&quot;values&q [...]
+	       plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SSHA256&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&quot;values&quot;:[{ [...]
 
   <AnyType id="USER" kind="USER"/>
   <AnyTypeClass id="BaseUser"/>
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
index 9e07481..5118a96 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
@@ -80,7 +80,6 @@ import org.apache.syncope.common.rest.api.service.ApplicationService;
 import org.apache.syncope.common.rest.api.service.AuditService;
 import org.apache.syncope.common.rest.api.service.CamelRouteService;
 import org.apache.syncope.common.rest.api.service.ConfigurationService;
-import org.apache.syncope.common.rest.api.service.ConnectorHistoryService;
 import org.apache.syncope.common.rest.api.service.ConnectorService;
 import org.apache.syncope.common.rest.api.service.DomainService;
 import org.apache.syncope.common.rest.api.service.DynRealmService;
@@ -99,7 +98,6 @@ import org.apache.syncope.common.rest.api.service.ReconciliationService;
 import org.apache.syncope.common.rest.api.service.RelationshipTypeService;
 import org.apache.syncope.common.rest.api.service.RemediationService;
 import org.apache.syncope.common.rest.api.service.ReportTemplateService;
-import org.apache.syncope.common.rest.api.service.ResourceHistoryService;
 import org.apache.syncope.common.rest.api.service.RoleService;
 import org.apache.syncope.common.rest.api.service.SAML2IdPService;
 import org.apache.syncope.common.rest.api.service.SAML2SPService;
@@ -190,6 +188,8 @@ public abstract class AbstractITCase {
 
     protected static final String PRINTER = "PRINTER";
 
+    protected static final int MAX_WAIT_SECONDS = 50;
+
     protected static String ANONYMOUS_UNAME;
 
     protected static String ANONYMOUS_KEY;
@@ -236,14 +236,10 @@ public abstract class AbstractITCase {
 
     protected static ResourceService resourceService;
 
-    protected static ResourceHistoryService resourceHistoryService;
-
     protected static ConfigurationService configurationService;
 
     protected static ConnectorService connectorService;
 
-    protected static ConnectorHistoryService connectorHistoryService;
-
     protected static LoggerService loggerService;
 
     protected static ReportTemplateService reportTemplateService;
@@ -333,10 +329,8 @@ public abstract class AbstractITCase {
         userWorkflowTaskService = adminClient.getService(UserWorkflowTaskService.class);
         groupService = adminClient.getService(GroupService.class);
         resourceService = adminClient.getService(ResourceService.class);
-        resourceHistoryService = adminClient.getService(ResourceHistoryService.class);
         configurationService = adminClient.getService(ConfigurationService.class);
         connectorService = adminClient.getService(ConnectorService.class);
-        connectorHistoryService = adminClient.getService(ConnectorHistoryService.class);
         loggerService = adminClient.getService(LoggerService.class);
         reportTemplateService = adminClient.getService(ReportTemplateService.class);
         reportService = adminClient.getService(ReportService.class);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
index 21718f7..d3f74c7 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
@@ -23,7 +23,6 @@ import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.pages.Types;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AjaxFallbackDataTable;
 import org.apache.wicket.util.tester.FormTester;
-import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 
 public abstract class AbstractTypesITCase extends AbstractConsoleITCase {
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
index 7ebfc38..07803cb 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
@@ -70,7 +70,7 @@ public class AnyObjectsITCase extends AbstractConsoleITCase {
 
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.clickLink(TAB_PANEL + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
-                + "actions:actions:actionRepeater:1:action:action");
+                + "actions:actions:actionRepeater:5:action:action");
 
         FormTester formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
index d347743..de2dde3 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
@@ -78,7 +78,7 @@ public class BatchesITCase extends AbstractConsoleITCase {
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         // manage resource
         TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:5:"
+                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
                 + "action:action");
 
         TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
@@ -131,7 +131,7 @@ public class BatchesITCase extends AbstractConsoleITCase {
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         // enable
         TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
+                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:3:"
                 + "action:action");
 
         TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
@@ -194,7 +194,7 @@ public class BatchesITCase extends AbstractConsoleITCase {
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         // enable
         TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
+                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:3:"
                 + "action:action");
 
         TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
@@ -254,7 +254,7 @@ public class BatchesITCase extends AbstractConsoleITCase {
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         // manage resource
         TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:6:"
+                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:5:"
                 + "action:action");
 
         TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
@@ -302,7 +302,7 @@ public class BatchesITCase extends AbstractConsoleITCase {
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         // manage resource
         TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
-                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:2:"
+                + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:1:"
                 + "action:action");
 
         TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
index 8e8bc70..e47f9cd 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
@@ -53,7 +53,7 @@ public class GroupsITCase extends AbstractConsoleITCase {
 
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.clickLink(TAB_PANEL + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
-                + "actions:actions:actionRepeater:3:action:action");
+                + "actions:actions:actionRepeater:2:action:action");
 
         FormTester formTester = TESTER.newFormTester(TAB_PANEL
                 + "outerObjectsRepeater:7:outer:container:content:togglePanelContainer:membersForm");
@@ -97,7 +97,7 @@ public class GroupsITCase extends AbstractConsoleITCase {
 
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.clickLink(TAB_PANEL + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
-                + "actions:actions:actionRepeater:1:action:action");
+                + "actions:actions:actionRepeater:9:action:action");
 
         TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form:view:name:textField",
                 TextField.class);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java
index a4e84af..5df46f5 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java
@@ -727,7 +727,7 @@ public class PoliciesITCase extends AbstractConsoleITCase {
 
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:"
-                + "1:outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:1:"
+                + "1:outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:9:"
                 + "action:action");
 
         TESTER.assertComponent(
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
index ff0be0f..a79f7e0 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
@@ -75,7 +75,7 @@ public class UsersITCase extends AbstractConsoleITCase {
 
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.clickLink(TAB_PANEL + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
-                + "actions:actions:actionRepeater:2:action:action");
+                + "actions:actions:actionRepeater:1:action:action");
 
         TESTER.assertInfoMessages("Operation executed successfully");
     }
@@ -91,7 +91,7 @@ public class UsersITCase extends AbstractConsoleITCase {
 
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.clickLink(TAB_PANEL + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
-                + "actions:actions:actionRepeater:1:action:action");
+                + "actions:actions:actionRepeater:9:action:action");
 
         TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form:view:username:textField",
                 TextField.class);
@@ -657,7 +657,7 @@ public class UsersITCase extends AbstractConsoleITCase {
 
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.clickLink(TAB_PANEL + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
-                + "actions:actions:actionRepeater:3:action:action");
+                + "actions:actions:actionRepeater:2:action:action");
 
         TESTER.assertLabel(TAB_PANEL + "outerObjectsRepeater:3:outer:form:content:status:resources:"
                 + "firstLevelContainer:first:container:content:group:beans:0:fields:0:field", "syncope");
@@ -682,7 +682,7 @@ public class UsersITCase extends AbstractConsoleITCase {
 
         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.clickLink(TAB_PANEL + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
-                + "actions:actions:actionRepeater:3:action:action");
+                + "actions:actions:actionRepeater:2:action:action");
 
         TESTER.assertLabel(TAB_PANEL + "outerObjectsRepeater:3:outer:form:content:status:resources:"
                 + "firstLevelContainer:first:container:content:group:beans:0:fields:0:field", "syncope");
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java
index 5bfa1b4..43d077e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java
@@ -172,14 +172,14 @@ public abstract class AbstractTaskITCase extends AbstractITCase {
         ExecutorService service = Executors.newFixedThreadPool(taskKeys.size());
         List<Future<ExecTO>> futures = new ArrayList<>();
 
-        for (String key : taskKeys) {
+        taskKeys.forEach(key -> {
             futures.add(service.submit(new ThreadExec(taskService, type, key, maxWaitSeconds, dryRun)));
             // avoid flooding the test server
             try {
                 Thread.sleep(2000);
             } catch (InterruptedException e) {
             }
-        }
+        });
 
         for (Future<ExecTO> future : futures) {
             future.get(100, TimeUnit.SECONDS);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
index e3ceffa..4c1927a 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
@@ -22,25 +22,31 @@ import static org.junit.jupiter.api.Assertions.fail;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
-
+import java.util.Set;
+import org.apache.commons.lang3.SerializationUtils;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AuditEntryTO;
+import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AuditElements;
+import org.apache.syncope.common.lib.types.ConnConfProperty;
+import org.apache.syncope.common.lib.types.ConnectorCapability;
 import org.apache.syncope.common.rest.api.beans.AnyQuery;
 import org.apache.syncope.common.rest.api.beans.AuditQuery;
 import org.apache.syncope.fit.AbstractITCase;
 import org.junit.jupiter.api.Test;
 
 public class AuditITCase extends AbstractITCase {
-    private static final int MAX_WAIT_SECONDS = 50;
 
     private static AuditEntryTO query(final AuditQuery query, final int maxWaitSeconds, final boolean failIfEmpty) {
         List<AuditEntryTO> results = query(query, maxWaitSeconds);
@@ -77,9 +83,10 @@ public class AuditITCase extends AbstractITCase {
         assertEquals(1, entries.size());
 
         PagedResult<UserTO> usersTOs = userService.search(
-            new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
-                fiql(SyncopeClient.getUserSearchConditionBuilder().is("username").equalTo(userTO.getUsername()).query()).
-                build());
+                new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                        fiql(SyncopeClient.getUserSearchConditionBuilder().
+                                is("username").equalTo(userTO.getUsername()).query()).
+                        build());
         assertNotNull(usersTOs);
         assertFalse(usersTOs.getResult().isEmpty());
 
@@ -140,9 +147,10 @@ public class AuditITCase extends AbstractITCase {
         assertEquals(1, entries.size());
 
         PagedResult<GroupTO> groups = groupService.search(
-            new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
-                fiql(SyncopeClient.getGroupSearchConditionBuilder().is("name").equalTo(groupTO.getName()).query()).
-                build());
+                new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                        fiql(SyncopeClient.getGroupSearchConditionBuilder().
+                                is("name").equalTo(groupTO.getName()).query()).
+                        build());
         assertNotNull(groups);
         assertFalse(groups.getResult().isEmpty());
 
@@ -155,7 +163,7 @@ public class AuditITCase extends AbstractITCase {
         AnyObjectTO anyObjectTO = createAnyObject(AnyObjectITCase.getSampleTO("Italy")).getEntity();
         assertNotNull(anyObjectTO.getKey());
         AuditQuery query = new AuditQuery.Builder(anyObjectTO.getKey()).orderBy("event_date desc").
-            page(1).size(1).build();
+                page(1).size(1).build();
         AuditEntryTO entry = query(query, MAX_WAIT_SECONDS, true);
         assertEquals(anyObjectTO.getKey(), entry.getKey());
         anyObjectService.delete(anyObjectTO.getKey());
@@ -172,13 +180,57 @@ public class AuditITCase extends AbstractITCase {
         assertEquals(1, entries.size());
 
         PagedResult<AnyObjectTO> anyObjects = anyObjectService.search(
-            new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
-                fiql(SyncopeClient.getAnyObjectSearchConditionBuilder(anyObjectTO.getType()).query()).
-                build());
+                new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                        fiql(SyncopeClient.getAnyObjectSearchConditionBuilder(anyObjectTO.getType()).query()).
+                        build());
         assertNotNull(anyObjects);
         assertFalse(anyObjects.getResult().isEmpty());
-        
+
         entries = query(query, MAX_WAIT_SECONDS);
         assertEquals(1, entries.size());
     }
+
+    @Test
+    public void findByConnector() throws JsonProcessingException {
+        String connectorKey = "74141a3b-0762-4720-a4aa-fc3e374ef3ef";
+
+        AuditQuery query = new AuditQuery.Builder(connectorKey).
+                orderBy("event_date desc").
+                type(AuditElements.EventCategoryType.LOGIC).
+                category("ConnectorLogic").
+                event("update").
+                result(AuditElements.Result.SUCCESS).
+                build();
+        List<AuditEntryTO> entries = query(query, 0);
+        int pre = entries.size();
+
+        ConnInstanceTO ldapConn = connectorService.read(connectorKey, null);
+        String originalDisplayName = ldapConn.getDisplayName();
+        Set<ConnectorCapability> originalCapabilities = new HashSet<>(ldapConn.getCapabilities());
+        ConnConfProperty originalConfProp = SerializationUtils.clone(
+                ldapConn.getConf("maintainPosixGroupMembership").get());
+        assertEquals(1, originalConfProp.getValues().size());
+        assertEquals("false", originalConfProp.getValues().get(0));
+
+        ldapConn.setDisplayName(originalDisplayName + " modified");
+        ldapConn.getCapabilities().clear();
+        ldapConn.getConf("maintainPosixGroupMembership").get().getValues().set(0, "true");
+        connectorService.update(ldapConn);
+
+        ldapConn = connectorService.read(connectorKey, null);
+        assertNotEquals(originalDisplayName, ldapConn.getDisplayName());
+        assertNotEquals(originalCapabilities, ldapConn.getCapabilities());
+        assertNotEquals(originalConfProp, ldapConn.getConf("maintainPosixGroupMembership"));
+
+        entries = query(query, MAX_WAIT_SECONDS);
+        assertEquals(pre + 1, entries.size());
+
+        ConnInstanceTO restore = MAPPER.readValue(entries.get(0).getBefore(), ConnInstanceTO.class);
+        connectorService.update(restore);
+
+        ldapConn = connectorService.read(connectorKey, null);
+        assertEquals(originalDisplayName, ldapConn.getDisplayName());
+        assertEquals(originalCapabilities, ldapConn.getCapabilities());
+        assertEquals(originalConfProp, ldapConn.getConf("maintainPosixGroupMembership").get());
+    }
 }
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
index cbdb19b..29703fa 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
@@ -535,9 +535,9 @@ public class AuthenticationITCase extends AbstractITCase {
         assertNotNull(user);
 
         // 4. check that the db resource has still the initial password value
-        final JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
-        String value = queryForObject(
-                jdbcTemplate, 50, "SELECT PASSWORD FROM test WHERE ID=?", String.class, user.getUsername());
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
+        String value = queryForObject(jdbcTemplate, MAX_WAIT_SECONDS,
+                "SELECT PASSWORD FROM test WHERE ID=?", String.class, user.getUsername());
         assertEquals(Encryptor.getInstance().encode("password123", CipherAlgorithm.SHA1), value.toUpperCase());
 
         // 5. successfully authenticate with old (on db resource) and new (on internal storage) password values
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
index 7def155..c595475 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
@@ -20,7 +20,6 @@ package org.apache.syncope.fit.core;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -39,14 +38,12 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
 import javax.ws.rs.core.Response;
-import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.ConnBundleTO;
 import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
-import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.ConnPoolConfTO;
 import org.apache.syncope.common.lib.to.ItemTO;
@@ -476,41 +473,6 @@ public class ConnectorITCase extends AbstractITCase {
     }
 
     @Test
-    public void history() {
-        List<ConnInstanceHistoryConfTO> history = connectorHistoryService.list("74141a3b-0762-4720-a4aa-fc3e374ef3ef");
-        assertNotNull(history);
-        int pre = history.size();
-
-        ConnInstanceTO ldapConn = connectorService.read("74141a3b-0762-4720-a4aa-fc3e374ef3ef", null);
-        String originalDisplayName = ldapConn.getDisplayName();
-        Set<ConnectorCapability> originalCapabilities = new HashSet<>(ldapConn.getCapabilities());
-        ConnConfProperty originalConfProp = SerializationUtils.clone(
-                ldapConn.getConf("maintainPosixGroupMembership").get());
-        assertEquals(1, originalConfProp.getValues().size());
-        assertEquals("false", originalConfProp.getValues().get(0));
-
-        ldapConn.setDisplayName(originalDisplayName + " modified");
-        ldapConn.getCapabilities().clear();
-        ldapConn.getConf("maintainPosixGroupMembership").get().getValues().set(0, "true");
-        connectorService.update(ldapConn);
-
-        ldapConn = connectorService.read("74141a3b-0762-4720-a4aa-fc3e374ef3ef", null);
-        assertNotEquals(originalDisplayName, ldapConn.getDisplayName());
-        assertNotEquals(originalCapabilities, ldapConn.getCapabilities());
-        assertNotEquals(originalConfProp, ldapConn.getConf("maintainPosixGroupMembership"));
-
-        history = connectorHistoryService.list("74141a3b-0762-4720-a4aa-fc3e374ef3ef");
-        assertEquals(pre + 1, history.size());
-
-        connectorHistoryService.restore(history.get(0).getKey());
-
-        ldapConn = connectorService.read("74141a3b-0762-4720-a4aa-fc3e374ef3ef", null);
-        assertEquals(originalDisplayName, ldapConn.getDisplayName());
-        assertEquals(originalCapabilities, ldapConn.getCapabilities());
-        assertEquals(originalConfProp, ldapConn.getConf("maintainPosixGroupMembership").get());
-    }
-
-    @Test
     public void authorizations() {
         SyncopeClient puccini = clientFactory.create("puccini", ADMIN_PWD);
         ConnectorService pcs = puccini.getService(ConnectorService.class);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
index 3a20570..c42b60a 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
@@ -963,7 +963,6 @@ public class GroupITCase extends AbstractITCase {
             assertNotNull(exec.getRefKey());
 
             int i = 0;
-            int maxit = 50;
 
             // wait for task exec completion (executions incremented)
             SchedTaskTO taskTO;
@@ -975,7 +974,7 @@ public class GroupITCase extends AbstractITCase {
                 assertNotNull(taskTO);
                 assertNotNull(taskTO.getExecutions());
                 i++;
-            } while (taskTO.getExecutions().isEmpty() && i < maxit);
+            } while (taskTO.getExecutions().isEmpty() && i < MAX_WAIT_SECONDS);
             assertFalse(taskTO.getExecutions().isEmpty());
 
             assertEquals(TaskJob.Status.SUCCESS.name(), taskTO.getExecutions().get(0).getStatus());
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
index 93214d7..829570f 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
@@ -259,7 +259,8 @@ public class LinkedAccountITCase extends AbstractITCase {
             assertNotNull(sendUser);
 
             // 5. execute PushTask
-            AbstractTaskITCase.execProvisioningTask(taskService, TaskType.PUSH, sendUser.getKey(), 50, false);
+            AbstractTaskITCase.execProvisioningTask(
+                    taskService, TaskType.PUSH, sendUser.getKey(), MAX_WAIT_SECONDS, false);
 
             TaskTO task = taskService.read(TaskType.PUSH, sendUser.getKey(), true);
             assertEquals(1, task.getExecutions().size());
@@ -403,7 +404,8 @@ public class LinkedAccountITCase extends AbstractITCase {
             List<LinkedAccountTO> accounts = userService.read("vivaldi").getLinkedAccounts();
             assertTrue(accounts.isEmpty());
 
-            ExecTO exec = AbstractTaskITCase.execProvisioningTask(taskService, TaskType.PULL, pullTaskKey, 50, false);
+            ExecTO exec = AbstractTaskITCase.execProvisioningTask(
+                    taskService, TaskType.PULL, pullTaskKey, MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
             assertTrue(exec.getMessage().contains("Accounts created"));
 
@@ -452,7 +454,8 @@ public class LinkedAccountITCase extends AbstractITCase {
             assertEquals(Response.Status.NO_CONTENT.getStatusCode(), response.getStatus());
 
             // 4. execute pull task again and verify linked accounts were pulled
-            exec = AbstractTaskITCase.execProvisioningTask(taskService, TaskType.PULL, pullTaskKey, 50, false);
+            exec = AbstractTaskITCase.execProvisioningTask(
+                    taskService, TaskType.PULL, pullTaskKey, MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
             assertTrue(exec.getMessage().contains("Accounts updated"));
             assertTrue(exec.getMessage().contains("Accounts deleted"));
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java
index 4fd5e05..5e64d99 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MembershipITCase.java
@@ -255,7 +255,7 @@ public class MembershipITCase extends AbstractITCase {
             // 2. verify that user was found on resource
             JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
             String idOnResource = queryForObject(
-                    jdbcTemplate, 50, "SELECT id FROM testpull WHERE id=?", String.class, "5432");
+                    jdbcTemplate, MAX_WAIT_SECONDS, "SELECT id FROM testpull WHERE id=?", String.class, "5432");
             assertEquals("5432", idOnResource);
 
             // 3. unlink user from resource, then remove it
@@ -277,7 +277,7 @@ public class MembershipITCase extends AbstractITCase {
             assertNotNull(newTask);
 
             ExecTO execution = AbstractTaskITCase.execProvisioningTask(
-                    taskService, TaskType.PULL, newTask.getKey(), 50, false);
+                    taskService, TaskType.PULL, newTask.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             // 5. verify that pulled user has
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
index a2d698b..6c74240 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
@@ -221,7 +221,7 @@ public class MultitenancyITCase extends AbstractITCase {
 
             // pull
             ExecTO execution = AbstractTaskITCase.execProvisioningTask(
-                    adminClient.getService(TaskService.class), TaskType.PULL, task.getKey(), 50, false);
+                    adminClient.getService(TaskService.class), TaskType.PULL, task.getKey(), MAX_WAIT_SECONDS, false);
 
             // verify execution status
             String status = execution.getStatus();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index 760c977..9d266a6 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -237,7 +237,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
                     page(1).size(1).build()).getTotalCount();
             assertNotNull(usersPre);
 
-            ExecTO exec = execProvisioningTask(taskService, TaskType.PULL, PULL_TASK_KEY, 50, false);
+            ExecTO exec = execProvisioningTask(taskService, TaskType.PULL, PULL_TASK_KEY, MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
 
             LOG.debug("Execution of task {}:\n{}", PULL_TASK_KEY, exec);
@@ -305,7 +305,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             Set<String> otherPullTaskKeys = new HashSet<>();
             otherPullTaskKeys.add("feae4e57-15ca-40d9-b973-8b9015efca49");
             otherPullTaskKeys.add("55d5e74b-497e-4bc0-9156-73abef4b9adc");
-            execProvisioningTasks(taskService, TaskType.PULL, otherPullTaskKeys, 50, false);
+            execProvisioningTasks(taskService, TaskType.PULL, otherPullTaskKeys, MAX_WAIT_SECONDS, false);
 
             // Matching --> UNLINK
             assertFalse(userService.read("test9").getResources().contains(RESOURCE_NAME_CSV));
@@ -317,7 +317,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void dryRun() {
-        ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, PULL_TASK_KEY, 50, true);
+        ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, PULL_TASK_KEY, MAX_WAIT_SECONDS, true);
         assertEquals("SUCCESS", execution.getStatus());
     }
 
@@ -327,7 +327,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
         try {
             ExecTO execution = execProvisioningTask(
-                    taskService, TaskType.PULL, "83f7e85d-9774-43fe-adba-ccd856312994", 50, false);
+                    taskService, TaskType.PULL, "83f7e85d-9774-43fe-adba-ccd856312994", MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             userTO = userService.read("testuser1");
@@ -340,7 +340,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
             // re-execute the same PullTask: now user must be active
             execution = execProvisioningTask(
-                    taskService, TaskType.PULL, "83f7e85d-9774-43fe-adba-ccd856312994", 50, false);
+                    taskService, TaskType.PULL, "83f7e85d-9774-43fe-adba-ccd856312994", MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             userTO = userService.read("testuser1");
@@ -361,7 +361,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
         // 0. pull
         ExecTO execution = execProvisioningTask(
-                taskService, TaskType.PULL, "1e419ca4-ea81-4493-a14f-28b90113686d", 50, false);
+                taskService, TaskType.PULL, "1e419ca4-ea81-4493-a14f-28b90113686d", MAX_WAIT_SECONDS, false);
 
         // 1. verify execution status
         assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
@@ -415,11 +415,11 @@ public class PullTaskITCase extends AbstractTaskITCase {
                 userDn.getValues().get(0), Collections.singletonMap("title", (String) null));
 
         // SYNCOPE-317
-        execProvisioningTask(taskService, TaskType.PULL, "1e419ca4-ea81-4493-a14f-28b90113686d", 50, false);
+        execProvisioningTask(
+                taskService, TaskType.PULL, "1e419ca4-ea81-4493-a14f-28b90113686d", MAX_WAIT_SECONDS, false);
 
         // 4. verify that LDAP group membership is pulled as Syncope membership
         int i = 0;
-        int maxit = 50;
         PagedResult<UserTO> members;
         do {
             try {
@@ -433,8 +433,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertNotNull(members);
 
             i++;
-        } while (members.getResult().isEmpty() && i < maxit);
-        if (i == maxit) {
+        } while (members.getResult().isEmpty() && i < MAX_WAIT_SECONDS);
+        if (i == MAX_WAIT_SECONDS) {
             fail("Timeout while checking for memberships of " + groupTO.getName());
         }
         assertEquals(1, members.getResult().size());
@@ -455,10 +455,10 @@ public class PullTaskITCase extends AbstractTaskITCase {
         updateLdapRemoteObject(RESOURCE_LDAP_ADMIN_DN, RESOURCE_LDAP_ADMIN_PWD,
                 groupDn.getValues().get(0), Collections.singletonMap("uniquemember", "uid=admin,ou=system"));
 
-        execProvisioningTask(taskService, TaskType.PULL, "1e419ca4-ea81-4493-a14f-28b90113686d", 50, false);
+        execProvisioningTask(
+                taskService, TaskType.PULL, "1e419ca4-ea81-4493-a14f-28b90113686d", MAX_WAIT_SECONDS, false);
 
         i = 0;
-        maxit = 50;
         do {
             try {
                 Thread.sleep(1000);
@@ -471,8 +471,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertNotNull(members);
 
             i++;
-        } while (!members.getResult().isEmpty() && i < maxit);
-        if (i == maxit) {
+        } while (!members.getResult().isEmpty() && i < MAX_WAIT_SECONDS);
+        if (i == MAX_WAIT_SECONDS) {
             fail("Timeout while checking for memberships of " + groupTO.getName());
         }
         assertEquals(0, members.getResult().size());
@@ -557,7 +557,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertFalse(pullTask.isPerformDelete());
 
             // 4. pull
-            execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), 50, false);
+            execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), MAX_WAIT_SECONDS, false);
 
             // 5. verify that printer was re-created in Syncope (implies that location does not start with given prefix,
             // hence PrefixItemTransformer was applied during pull)
@@ -610,7 +610,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertEquals(reconFilterBuilder.getKey(), task.getReconFilterBuilder());
 
             // 3. exec task
-            ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, task.getKey(), 50, false);
+            ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, task.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             // 4. verify that only enabled user was pulled
@@ -692,7 +692,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
                     + "(1041, 'syncTokenWithErrors2', 'Surname2', "
                     + "false, 'syncTokenWithErrors1@syncope.apache.org', '2015-05-23 13:53:24.293')");
 
-            ExecTO exec = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), 50, false);
+            ExecTO exec = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
 
             resForTest = resourceService.read(resForTest.getKey());
@@ -702,7 +702,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
                     + "SET email='syncTokenWithErrors2@syncope.apache.org', lastModification='2016-05-23 13:53:24.293' "
                     + "WHERE ID=1041");
 
-            exec = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), 50, false);
+            exec = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
 
             resForTest = resourceService.read(resForTest.getKey());
@@ -754,7 +754,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
         try {
             // 3. execute the pull task and verify that:
-            ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), 50, false);
+            ExecTO execution = execProvisioningTask(
+                    taskService, TaskType.PULL, pullTask.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             // 3a. user was not pulled
@@ -859,7 +860,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertFalse(actual.getTemplates().get(AnyTypeKind.USER.name()).getResources().isEmpty());
             assertFalse(((UserTO) actual.getTemplates().get(AnyTypeKind.USER.name())).getMemberships().isEmpty());
 
-            ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, actual.getKey(), 50, false);
+            ExecTO execution = execProvisioningTask(
+                    taskService, TaskType.PULL, actual.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             userTO = userService.read("testuser2");
@@ -884,7 +886,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
                 + "('" + id + "', 'issuesyncope230', 'Surname230', false, 'syncope230@syncope.apache.org', NULL)");
 
         // 2. execute PullTask for resource-db-pull (table TESTPULL on external H2)
-        execProvisioningTask(taskService, TaskType.PULL, "7c2242f4-14af-4ab5-af31-cdae23783655", 50, false);
+        execProvisioningTask(
+                taskService, TaskType.PULL, "7c2242f4-14af-4ab5-af31-cdae23783655", MAX_WAIT_SECONDS, false);
 
         // 3. read e-mail address for user created by the PullTask first execution
         UserTO userTO = userService.read("issuesyncope230");
@@ -896,7 +899,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
         jdbcTemplate.execute("UPDATE TESTPULL SET email='updatedSYNCOPE230@syncope.apache.org' WHERE id='" + id + "'");
 
         // 5. re-execute the PullTask
-        execProvisioningTask(taskService, TaskType.PULL, "7c2242f4-14af-4ab5-af31-cdae23783655", 50, false);
+        execProvisioningTask(
+                taskService, TaskType.PULL, "7c2242f4-14af-4ab5-af31-cdae23783655", MAX_WAIT_SECONDS, false);
 
         // 6. verify that the e-mail was updated
         userTO = userService.read("issuesyncope230");
@@ -967,7 +971,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
         userService.update(userPatch);
 
-        execProvisioningTask(taskService, TaskType.PULL, task.getKey(), 50, false);
+        execProvisioningTask(taskService, TaskType.PULL, task.getKey(), MAX_WAIT_SECONDS, false);
 
         PullTaskTO executed = taskService.read(TaskType.PULL, task.getKey(), true);
         assertEquals(1, executed.getExecutions().size());
@@ -993,7 +997,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertEquals(ExecStatus.SUCCESS, result.getPropagationStatuses().get(0).getStatus());
 
             ExecTO taskExecTO = execProvisioningTask(
-                    taskService, TaskType.PULL, "986867e2-993b-430e-8feb-aa9abb4c1dcd", 50, false);
+                    taskService, TaskType.PULL, "986867e2-993b-430e-8feb-aa9abb4c1dcd", MAX_WAIT_SECONDS, false);
 
             assertNotNull(taskExecTO.getStatus());
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(taskExecTO.getStatus()));
@@ -1037,7 +1041,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         taskService.update(TaskType.PULL, task);
 
         // exec task: one user from CSV will match the user created above and template will be applied
-        execProvisioningTask(taskService, TaskType.PULL, task.getKey(), 50, false);
+        execProvisioningTask(taskService, TaskType.PULL, task.getKey(), MAX_WAIT_SECONDS, false);
 
         // check that template was successfully applied...
         userTO = userService.read(userTO.getKey());
@@ -1045,8 +1049,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
         // ...and that propagation to db succeeded
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
-        String value = queryForObject(
-                jdbcTemplate, 50, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, userTO.getKey());
+        String value = queryForObject(jdbcTemplate,
+                MAX_WAIT_SECONDS, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, userTO.getKey());
         assertEquals("virtualvalue", value);
     }
 
@@ -1062,8 +1066,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
         // 2. Check that the DB resource has the correct password
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
-        String value = queryForObject(
-                jdbcTemplate, 50, "SELECT PASSWORD FROM test WHERE ID=?", String.class, user.getUsername());
+        String value = queryForObject(jdbcTemplate,
+                MAX_WAIT_SECONDS, "SELECT PASSWORD FROM test WHERE ID=?", String.class, user.getUsername());
         assertEquals(Encryptor.getInstance().encode("security123", CipherAlgorithm.SHA1), value.toUpperCase());
 
         // 3. Update the password in the DB
@@ -1101,7 +1105,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         assertEquals(actual.getKey(), pullTask.getKey());
         assertEquals(actual.getJobDelegate(), pullTask.getJobDelegate());
 
-        ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), 50, false);
+        ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), MAX_WAIT_SECONDS, false);
         assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
         // 5. Test the pulled user
@@ -1186,7 +1190,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
             pullTask = getObject(taskResponse.getLocation(), TaskService.class, PullTaskTO.class);
             assertNotNull(pullTask);
 
-            ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), 50, false);
+            ExecTO execution = execProvisioningTask(
+                    taskService, TaskType.PULL, pullTask.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             // 7. Test the pulled user
@@ -1246,7 +1251,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertFalse(pullTask.getTemplates().isEmpty());
 
             // 3. exec the pull task
-            ExecTO execution = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), 50, false);
+            ExecTO execution = execProvisioningTask(
+                    taskService, TaskType.PULL, pullTask.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             // the user is successfully pulled...
@@ -1282,7 +1288,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertEquals("pullFromLDAP2@syncope.apache.org", connObject.getAttr("mail").get().getValues().get(0));
 
             // 5. exec the pull task again
-            execution = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), 50, false);
+            execution = execProvisioningTask(taskService, TaskType.PULL, pullTask.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(execution.getStatus()));
 
             // the internal is updated...
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
index 6c3fed5..de6836a 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
@@ -131,7 +131,8 @@ public class PushTaskITCase extends AbstractTaskITCase {
         assertFalse(groupService.read("29f96485-729e-4d31-88a1-6fc60e4677f3").
                 getResources().contains(RESOURCE_NAME_LDAP));
 
-        execProvisioningTask(taskService, TaskType.PUSH, "fd905ba5-9d56-4f51-83e2-859096a67b75", 50, false);
+        execProvisioningTask(
+                taskService, TaskType.PUSH, "fd905ba5-9d56-4f51-83e2-859096a67b75", MAX_WAIT_SECONDS, false);
 
         assertNotNull(resourceService.readConnObject(
                 RESOURCE_NAME_LDAP, AnyTypeKind.GROUP.name(), "29f96485-729e-4d31-88a1-6fc60e4677f3"));
@@ -156,7 +157,8 @@ public class PushTaskITCase extends AbstractTaskITCase {
         // ------------------------------------------
         // Unmatching --> Assign --> dryRuyn
         // ------------------------------------------
-        execProvisioningTask(taskService, TaskType.PUSH, "af558be4-9d2f-4359-bf85-a554e6e90be1", 50, true);
+        execProvisioningTask(
+                taskService, TaskType.PUSH, "af558be4-9d2f-4359-bf85-a554e6e90be1", MAX_WAIT_SECONDS, true);
         assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='vivaldi'").size());
         assertFalse(userService.read("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee").
                 getResources().contains(RESOURCE_NAME_TESTDB2));
@@ -167,7 +169,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
         pushTaskKeys.add("97f327b6-2eff-4d35-85e8-d581baaab855");
         pushTaskKeys.add("03aa2a04-4881-4573-9117-753f81b04865");
         pushTaskKeys.add("5e5f7c7e-9de7-4c6a-99f1-4df1af959807");
-        execProvisioningTasks(taskService, TaskType.PUSH, pushTaskKeys, 50, false);
+        execProvisioningTasks(taskService, TaskType.PUSH, pushTaskKeys, MAX_WAIT_SECONDS, false);
 
         // ------------------------------------------
         // Unatching --> Ignore
@@ -218,7 +220,8 @@ public class PushTaskITCase extends AbstractTaskITCase {
         // ------------------------------------------
         // Matching --> Deprovision --> dryRuyn
         // ------------------------------------------
-        execProvisioningTask(taskService, TaskType.PUSH, "c46edc3a-a18b-4af2-b707-f4a415507496", 50, true);
+        execProvisioningTask(
+                taskService, TaskType.PUSH, "c46edc3a-a18b-4af2-b707-f4a415507496", MAX_WAIT_SECONDS, true);
         assertTrue(userService.read("1417acbe-cbf6-4277-9372-e75e04f97000").
                 getResources().contains(RESOURCE_NAME_TESTDB2));
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
@@ -229,7 +232,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
         pushTaskKeys.add("c46edc3a-a18b-4af2-b707-f4a415507496");
         pushTaskKeys.add("5e5f7c7e-9de7-4c6a-99f1-4df1af959807");
 
-        execProvisioningTasks(taskService, TaskType.PUSH, pushTaskKeys, 50, false);
+        execProvisioningTasks(taskService, TaskType.PUSH, pushTaskKeys, MAX_WAIT_SECONDS, false);
 
         // ------------------------------------------
         // Matching --> Deprovision && Ignore
@@ -252,7 +255,8 @@ public class PushTaskITCase extends AbstractTaskITCase {
         // ------------------------------------------
         // Matching --> Link
         // ------------------------------------------
-        execProvisioningTask(taskService, TaskType.PUSH, "51318433-cce4-4f71-8f45-9534b6c9c819", 50, false);
+        execProvisioningTask(
+                taskService, TaskType.PUSH, "51318433-cce4-4f71-8f45-9534b6c9c819", MAX_WAIT_SECONDS, false);
         assertTrue(userService.read("74cd8ece-715a-44a4-a736-e17b46c4e7e6").
                 getResources().contains(RESOURCE_NAME_TESTDB2));
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
@@ -262,7 +266,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
         pushTaskKeys.add("24b1be9c-7e3b-443a-86c9-798ebce5eaf2");
         pushTaskKeys.add("375c7b7f-9e3a-4833-88c9-b7787b0a69f2");
 
-        execProvisioningTasks(taskService, TaskType.PUSH, pushTaskKeys, 50, false);
+        execProvisioningTasks(taskService, TaskType.PUSH, pushTaskKeys, MAX_WAIT_SECONDS, false);
 
         // ------------------------------------------
         // Matching --> Unlink && Update
@@ -300,7 +304,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
             assertNotNull(sendVivaldi);
 
             // 3. execute push: vivaldi is found on ldap
-            execProvisioningTask(taskService, TaskType.PUSH, sendVivaldi.getKey(), 50, false);
+            execProvisioningTask(taskService, TaskType.PUSH, sendVivaldi.getKey(), MAX_WAIT_SECONDS, false);
 
             ReconStatus status = reconciliationService.status(
                     new ReconQuery.Builder(AnyTypeKind.USER.name(), RESOURCE_NAME_LDAP).anyKey("vivaldi").build());
@@ -318,7 +322,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
 
             // 5. execute push again: propagation task for CREATE will be generated, but that will fail
             // as task executor is not able any more to identify the entry to UPDATE
-            execProvisioningTask(taskService, TaskType.PUSH, sendVivaldi.getKey(), 50, false);
+            execProvisioningTask(taskService, TaskType.PUSH, sendVivaldi.getKey(), MAX_WAIT_SECONDS, false);
 
             status = reconciliationService.status(
                     new ReconQuery.Builder(AnyTypeKind.USER.name(), RESOURCE_NAME_LDAP).anyKey("vivaldi").build());
@@ -349,7 +353,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
         PushTaskTO pushTask = getObject(response.getLocation(), TaskService.class, PushTaskTO.class);
         assertNotNull(pushTask);
 
-        ExecTO exec = execProvisioningTask(taskService, TaskType.PUSH, pushTask.getKey(), 50, false);
+        ExecTO exec = execProvisioningTask(taskService, TaskType.PUSH, pushTask.getKey(), MAX_WAIT_SECONDS, false);
         assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
 
         // 2. check
@@ -437,7 +441,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
             assertNotNull(push);
 
             // execute the new task
-            ExecTO exec = execProvisioningTask(taskService, TaskType.PUSH, push.getKey(), 50, false);
+            ExecTO exec = execProvisioningTask(taskService, TaskType.PUSH, push.getKey(), MAX_WAIT_SECONDS, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
         } finally {
             groupService.delete(groupTO.getKey());
@@ -486,7 +490,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
         notification = getObject(responseNotification.getLocation(), NotificationService.class, NotificationTO.class);
         assertNotNull(notification);
 
-        execProvisioningTask(taskService, TaskType.PUSH, actual.getKey(), 50, false);
+        execProvisioningTask(taskService, TaskType.PUSH, actual.getKey(), MAX_WAIT_SECONDS, false);
 
         NotificationTaskTO taskTO = findNotificationTask(notification.getKey(), 50);
         assertNotNull(taskTO);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
index d8c5d27..ba579bd 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
@@ -69,7 +69,6 @@ public class ReportITCase extends AbstractITCase {
         assertNotNull(exec);
 
         int i = 0;
-        int maxit = 50;
 
         // wait for completion (executions incremented)
         do {
@@ -84,8 +83,8 @@ public class ReportITCase extends AbstractITCase {
             assertNotNull(reportTO.getExecutions());
 
             i++;
-        } while (preExecSize == reportTO.getExecutions().size() && i < maxit);
-        if (i == maxit) {
+        } while (preExecSize == reportTO.getExecutions().size() && i < MAX_WAIT_SECONDS);
+        if (i == MAX_WAIT_SECONDS) {
             fail("Timeout when executing report " + reportKey);
         }
         exec = reportTO.getExecutions().get(reportTO.getExecutions().size() - 1);
@@ -362,7 +361,7 @@ public class ReportITCase extends AbstractITCase {
         ExecTO execution = reportService.execute(new ExecuteQuery.Builder().key(reportTO.getKey()).build());
         assertNotNull(execution);
 
-        int maxit = 50;
+        int maxit = MAX_WAIT_SECONDS;
         do {
             try {
                 Thread.sleep(1000);
@@ -393,7 +392,7 @@ public class ReportITCase extends AbstractITCase {
         }
 
         // Wait for one execution
-        int maxit = 50;
+        int maxit = MAX_WAIT_SECONDS;
         do {
             try {
                 Thread.sleep(1000);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
index 24eacad..04c4778 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
@@ -108,7 +108,6 @@ public class SchedTaskITCase extends AbstractTaskITCase {
         taskService.execute(new ExecuteQuery.Builder().key(task.getKey()).startAt(later).build());
 
         int i = 0;
-        int maxit = 50;
 
         // wait for completion (executions incremented)
         do {
@@ -123,7 +122,7 @@ public class SchedTaskITCase extends AbstractTaskITCase {
             assertNotNull(task.getExecutions());
 
             i++;
-        } while (task.getExecutions().isEmpty() && i < maxit);
+        } while (task.getExecutions().isEmpty() && i < MAX_WAIT_SECONDS);
 
         PagedResult<ExecTO> execs =
                 taskService.listExecutions(new ExecQuery.Builder().key(task.getKey()).build());
@@ -187,7 +186,7 @@ public class SchedTaskITCase extends AbstractTaskITCase {
 
         taskService.actionJob(task.getKey(), JobAction.START);
 
-        int i = 0, maxit = 50;
+        int i = 0;
 
         do {
             try {
@@ -196,9 +195,9 @@ public class SchedTaskITCase extends AbstractTaskITCase {
                 // ignore
             }
 
-            jobs = taskService.listJobs().stream().filter(job -> job.isRunning()).collect(Collectors.toList());
+            jobs = taskService.listJobs().stream().filter(JobTO::isRunning).collect(Collectors.toList());
             i++;
-        } while (jobs.size() < 1 && i < maxit);
+        } while (jobs.size() < 1 && i < MAX_WAIT_SECONDS);
 
         assertEquals(1, jobs.size());
         assertEquals(task.getKey(), jobs.get(0).getRefKey());
@@ -216,7 +215,7 @@ public class SchedTaskITCase extends AbstractTaskITCase {
 
             jobs = taskService.listJobs().stream().filter(job -> job.isRunning()).collect(Collectors.toList());
             i++;
-        } while (jobs.size() >= 1 && i < maxit);
+        } while (jobs.size() >= 1 && i < MAX_WAIT_SECONDS);
 
         assertTrue(jobs.isEmpty());
     }
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
index 9d2a101..e78d26d 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
@@ -159,7 +159,7 @@ public class UserIssuesITCase extends AbstractITCase {
 
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
         String username = queryForObject(
-                jdbcTemplate, 50, "SELECT id FROM test WHERE id=?", String.class, userTO.getUsername());
+                jdbcTemplate, MAX_WAIT_SECONDS, "SELECT id FROM test WHERE id=?", String.class, userTO.getUsername());
         assertEquals(userTO.getUsername(), username);
 
         UserPatch userPatch = new UserPatch();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
index 2fad213..555f57c 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
@@ -323,8 +323,8 @@ public class UserSelfITCase extends AbstractITCase {
 
         // verify propagation (including password) on external db
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
-        String pwdOnResource = queryForObject(
-                jdbcTemplate, 50, "SELECT password FROM test WHERE id=?", String.class, user.getUsername());
+        String pwdOnResource = queryForObject(jdbcTemplate,
+                MAX_WAIT_SECONDS, "SELECT password FROM test WHERE id=?", String.class, user.getUsername());
         assertTrue(StringUtils.isNotBlank(pwdOnResource));
 
         // 2. verify that new user is able to authenticate
@@ -377,8 +377,8 @@ public class UserSelfITCase extends AbstractITCase {
         assertNull(read.getToken());
 
         // 7. verify that password was changed on external resource
-        String newPwdOnResource = queryForObject(
-                jdbcTemplate, 50, "SELECT password FROM test WHERE id=?", String.class, user.getUsername());
+        String newPwdOnResource = queryForObject(jdbcTemplate,
+                MAX_WAIT_SECONDS, "SELECT password FROM test WHERE id=?", String.class, user.getUsername());
         assertTrue(StringUtils.isNotBlank(newPwdOnResource));
         assertNotEquals(pwdOnResource, newPwdOnResource);
     }
@@ -612,8 +612,8 @@ public class UserSelfITCase extends AbstractITCase {
         assertEquals("active", userTO.getStatus());
         assertEquals(Collections.singleton(RESOURCE_NAME_TESTDB), userTO.getResources());
 
-        String username = queryForObject(
-                jdbcTemplate, 50, "SELECT id FROM test WHERE id=?", String.class, userTO.getUsername());
+        String username = queryForObject(jdbcTemplate,
+                MAX_WAIT_SECONDS, "SELECT id FROM test WHERE id=?", String.class, userTO.getUsername());
         assertEquals(userTO.getUsername(), username);
 
         // 6. update user
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
index f57a4ec..14e84b8 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
@@ -230,14 +230,14 @@ public class VirAttrITCase extends AbstractITCase {
 
         // 3. update virtual attribute directly
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
-        String value = queryForObject(
-                jdbcTemplate, 50, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, actual.getKey());
+        String value = queryForObject(jdbcTemplate, 
+                MAX_WAIT_SECONDS, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, actual.getKey());
         assertEquals("virattrcache", value);
 
         jdbcTemplate.update("UPDATE testpull set USERNAME='virattrcache2' WHERE ID=?", actual.getKey());
 
-        value = queryForObject(
-                jdbcTemplate, 50, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, actual.getKey());
+        value = queryForObject(jdbcTemplate, 
+                MAX_WAIT_SECONDS, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, actual.getKey());
         assertEquals("virattrcache2", value);
 
         // 4. check for cached attribute value
@@ -388,13 +388,13 @@ public class VirAttrITCase extends AbstractITCase {
         // ----------------------------------------
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
         String value = queryForObject(
-                jdbcTemplate, 50, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, userTO.getKey());
+                jdbcTemplate, MAX_WAIT_SECONDS, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, userTO.getKey());
         assertEquals("virattrcache", value);
 
         jdbcTemplate.update("UPDATE testpull set USERNAME='virattrcache2' WHERE ID=?", userTO.getKey());
 
         value = queryForObject(
-                jdbcTemplate, 50, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, userTO.getKey());
+                jdbcTemplate, MAX_WAIT_SECONDS, "SELECT USERNAME FROM testpull WHERE ID=?", String.class, userTO.getKey());
         assertEquals("virattrcache2", value);
         // ----------------------------------------
 
diff --git a/src/main/asciidoc/reference-guide/concepts/externalresources.adoc b/src/main/asciidoc/reference-guide/concepts/externalresources.adoc
index 6f91ed6..6a5ebc0 100644
--- a/src/main/asciidoc/reference-guide/concepts/externalresources.adoc
+++ b/src/main/asciidoc/reference-guide/concepts/externalresources.adoc
@@ -221,21 +221,6 @@ example, which leverage the `syncope:fullPath2Dn()` custom JEXL function:
 * Groups: `'cn=' + name + syncope:fullPath2Dn(realm, 'ou', ',') + ',o=isp'`
 ====
 
-[[connectors-resources-history]]
-[NOTE]
-.Connector Instances and External Resources Configuration History Management
-====
-When either developing an IdM solution or managing a production deployment, it often happens to play with
-Connector Instances and / or External Resources configuration; sometimes, this results in failures which prevent
-<<provisioning,provisioning>> to work properly.
-
-In such situations it is possible to revert a Connector Instance's and / or External Resource's configuration to a
-previous working state.
-
-The maximum number of configurations to keep, for each Connector Instance and for each External Resource, is set by
-`connector.conf.history.size` and `resource.conf.history.size`: see <<configuration-parameters, below>> for details.
-====
-
 ==== Linked Accounts
 
 Sometimes the information provided by the <<mapping,mapping>> is not enough to define a one-to-one correspondence
diff --git a/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc b/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc
index 559a9de..5aa46a5 100644
--- a/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc
+++ b/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc
@@ -57,10 +57,6 @@ mechanism to work properly;
 Suspended Users are anyway not allowed to authenticate.
 * `log.lastlogindate` - whether the system updates the `lastLoginDate` field of users upon authentication;
 * `return.password.value` - whether the hashed password value shall be returned when reading users;
-* `connector.conf.history.size` - how many previous configurations shall be kept for each Connector Instance,
-for usage with <<connectors-resources-history, connectors and resources configuration history management>>;
-* `resource.conf.history.size` - how many previous configurations shall be kept for each External Resource,
-for usage with <<connectors-resources-history, connectors and resources configuration history management>>;
 * `connector.test.timeout` - timeout (in seconds) to check connector connection in <<Admin Console>>;
 `0` to skip any check;
 


[syncope] 01/02: Upgrading Elasticsearch

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

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

commit 2e35db1b6ec14b6a0b86fbfdefce1c036f0b785b
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Dec 19 08:24:40 2019 +0100

    Upgrading Elasticsearch
---
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index 788c419..e9a8f11 100644
--- a/pom.xml
+++ b/pom.xml
@@ -430,7 +430,7 @@ under the License.
     <slf4j.version>1.7.30</slf4j.version>
     <opensaml.version>3.3.1</opensaml.version>
 
-    <elasticsearch.version>6.8.5</elasticsearch.version>
+    <elasticsearch.version>6.8.6</elasticsearch.version>
 
     <apacheds.version>2.0.0.AM25</apacheds.version>
     <apachedirapi.version>2.0.0.AM2</apachedirapi.version>
@@ -2479,7 +2479,7 @@ under the License.
             <link>https://docs.spring.io/spring-security/site/docs/5.1.x/api/</link>
             <link>http://www.flowable.org/docs/javadocs/</link>
             <link>https://build.shibboleth.net/nexus/content/sites/site/java-opensaml/3.3.1/apidocs/</link>
-            <link>https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.8.5/index.html</link>
+            <link>https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.8.6/index.html</link>
             <link>http://docs.swagger.io/swagger-core/v2.0.10/apidocs/</link>
           </links>
         </configuration>