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/09/18 10:37:34 UTC

[syncope] branch master updated: NOJIRA - Small improvements/changes from static analysis reports (#116)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ca8fd6c  NOJIRA - Small improvements/changes from static analysis reports (#116)
ca8fd6c is described below

commit ca8fd6c5df41c35ba3ed6e04c70daceb599509e1
Author: Misagh Moayyed <mm...@gmail.com>
AuthorDate: Wed Sep 18 14:37:29 2019 +0400

    NOJIRA - Small improvements/changes from static analysis reports (#116)
---
 .travis.yml                                        |  15 ++-
 .../console/panels/GatewayRouteDirectoryPanel.java |  10 +-
 .../console/panels/GatewayRouteWizardBuilder.java  |   6 +-
 .../console/rest/GatewayRouteRestClient.java       |  12 +--
 .../commons/IdMExternalResourceProvider.java       |   2 +-
 .../commons/IdMImplementationInfoProvider.java     |   7 +-
 .../ConnInstanceHistoryConfDirectoryPanel.java     |   8 +-
 .../console/panels/ConnObjectListViewPanel.java    |   2 +-
 .../client/console/panels/HistoryConfDetails.java  |   4 +-
 .../client/console/panels/HistoryConfList.java     |   9 +-
 .../console/panels/ProvisionAuxClassesPanel.java   |  14 +--
 .../console/panels/RemediationDirectoryPanel.java  |  29 +++--
 .../panels/ResourceHistoryConfDirectoryPanel.java  |   8 +-
 .../client/console/panels/VirSchemaDetails.java    |  12 +--
 .../policies/ProvisioningPolicyModalPanel.java     |  17 ++-
 .../console/rest/ConnectorHistoryRestClient.java   |   6 +-
 .../client/console/rest/ConnectorRestClient.java   |  34 +++---
 .../console/rest/ReconciliationRestClient.java     |  22 ++--
 .../client/console/rest/RemediationRestClient.java |  14 +--
 .../console/rest/ResourceHistoryRestClient.java    |   6 +-
 .../client/console/rest/ResourceRestClient.java    |  30 +++---
 .../console/status/AnyStatusDirectoryPanel.java    |   2 +-
 .../client/console/status/ReconStatusUtils.java    |   4 +-
 .../client/console/status/ReconTaskPanel.java      |  14 ++-
 .../syncope/client/console/topology/Topology.java  |  10 +-
 .../client/console/topology/TopologyNodePanel.java |   4 +-
 .../console/topology/TopologyTogglePanel.java      |  32 +++---
 .../topology/TopologyWebSocketBehavior.java        |  12 +--
 .../markup/html/list/ConnConfPropertyListView.java |   4 +-
 .../client/console/widgets/RemediationsWidget.java |   7 +-
 .../wizards/resources/AbstractMappingPanel.java    |   8 +-
 .../wizards/resources/ConnectorDetailsPanel.java   |   4 +-
 .../wizards/resources/ConnectorWizardBuilder.java  |  10 +-
 .../resources/ItemTransformersTogglePanel.java     |   4 +-
 .../wizards/resources/ProvisionWizardBuilder.java  |   4 +-
 .../wizards/resources/ResourceConnConfPanel.java   |   4 +-
 .../wizards/resources/ResourceDetailsPanel.java    |   4 +-
 .../wizards/resources/ResourceMappingPanel.java    |  10 +-
 .../wizards/resources/ResourceProvisionPanel.java  |  10 +-
 .../wizards/resources/ResourceSecurityPanel.java   |  10 +-
 .../wizards/resources/ResourceWizardBuilder.java   |  12 +--
 .../ui/commons/SyncopeUIRequestCycleListener.java  |   2 +-
 .../commons/markup/html/form/AjaxPaletteConf.java  |   6 +-
 .../commons/markup/html/form/AjaxPalettePanel.java |   4 +-
 .../ui/commons/wizards/AjaxWizardBuilder.java      |   3 +-
 .../syncope/client/console/PreferenceManager.java  |  14 +--
 .../client/console/chartjs/ChartJSPanel.java       |   2 +-
 .../commons/IdRepoImplementationInfoProvider.java  |   4 +-
 .../client/console/commons/PreviewUtils.java       |   2 +-
 .../client/console/events/EventCategoryPanel.java  |   6 +-
 .../client/console/events/EventSelectionPanel.java |   2 +-
 .../init/ClassPathScanImplementationLookup.java    |   2 +-
 .../client/console/layout/ConsoleLayoutInfo.java   |   2 +-
 .../client/console/layout/FormLayoutInfoUtils.java |   4 +-
 .../notifications/NotificationDirectoryPanel.java  |   9 +-
 .../notifications/NotificationWizardBuilder.java   |  28 ++---
 .../apache/syncope/client/console/pages/Audit.java |  10 +-
 .../syncope/client/console/pages/BasePage.java     |   8 +-
 .../syncope/client/console/pages/LogViewer.java    |   9 +-
 .../client/console/pages/MustChangePassword.java   |   4 +-
 .../syncope/client/console/pages/Realms.java       |   6 +-
 .../console/panels/AccessTokenDirectoryPanel.java  |   6 +-
 .../client/console/panels/AnyDirectoryPanel.java   |  10 +-
 .../syncope/client/console/panels/AnyPanel.java    |   6 +-
 .../console/panels/AnyTypeClassDetailsPanel.java   |  10 +-
 .../client/console/panels/AnyTypeClassesPanel.java |  10 +-
 .../client/console/panels/AnyTypeDetailsPanel.java |   4 +-
 .../client/console/panels/AnyTypeMenuItem.java     |   2 +-
 .../client/console/panels/AnyTypesPanel.java       |  10 +-
 .../console/panels/ApplicationDirectoryPanel.java  |  12 +--
 .../console/panels/ApplicationModalPanel.java      |   6 +-
 .../syncope/client/console/panels/BeanPanel.java   |  10 +-
 .../client/console/panels/ConsoleLogPanel.java     |   8 +-
 .../client/console/panels/CoreLogPanel.java        |   6 +-
 .../console/panels/DashboardOverviewPanel.java     |  14 ++-
 .../client/console/panels/DirectoryPanel.java      |   4 +-
 .../panels/DisplayAttributesModalPanel.java        |   6 +-
 .../console/panels/DynRealmDirectoryPanel.java     |   8 +-
 .../client/console/panels/DynRealmModalPanel.java  |  10 +-
 .../client/console/panels/GroupDirectoryPanel.java |  17 ++-
 .../panels/ImplementationDirectoryPanel.java       |   6 +-
 .../console/panels/ImplementationModalPanel.java   |   6 +-
 .../client/console/panels/ListViewPanel.java       |   2 +-
 .../client/console/panels/LogStatementPanel.java   |   2 +-
 .../client/console/panels/MembersTogglePanel.java  |   2 +-
 .../client/console/panels/PlainSchemaDetails.java  |   4 +-
 .../console/panels/PrivilegeDirectoryPanel.java    |   2 +-
 .../console/panels/PrivilegeWizardBuilder.java     |   4 +-
 .../syncope/client/console/panels/Realm.java       |   2 +-
 .../client/console/panels/RealmChoicePanel.java    |   6 +-
 .../client/console/panels/RealmDetails.java        |  10 +-
 .../client/console/panels/RealmWizardBuilder.java  |   6 +-
 .../console/panels/RelationshipTypesPanel.java     |  10 +-
 .../client/console/panels/RoleDirectoryPanel.java  |  23 ++--
 .../client/console/panels/SchemaTypePanel.java     |  14 +--
 .../console/panels/SchemaTypeWizardBuilder.java    |   6 +-
 .../panels/SecurityQuestionsModalPanel.java        |   6 +-
 .../console/panels/SecurityQuestionsPanel.java     |   6 +-
 .../syncope/client/console/panels/TogglePanel.java |   4 +-
 .../console/panels/search/AbstractSearchPanel.java |   8 +-
 .../console/panels/search/SearchClausePanel.java   |  10 +-
 .../console/panels/search/UserSearchPanel.java     |   8 +-
 .../console/policies/PolicyDirectoryPanel.java     |   8 +-
 .../console/policies/PolicyModalPanelBuilder.java  |   6 +-
 .../console/policies/PolicyRuleDirectoryPanel.java |  12 +--
 .../console/policies/PolicyRuleWizardBuilder.java  |  19 ++--
 .../console/reports/ReportDirectoryPanel.java      |  10 +-
 .../console/reports/ReportExecutionDetails.java    |   2 +-
 .../console/reports/ReportWizardBuilder.java       |   4 +-
 .../console/reports/ReportletDirectoryPanel.java   |  12 +--
 .../console/reports/ReportletWizardBuilder.java    |  16 ++-
 .../client/console/rest/AbstractAnyRestClient.java |   4 +-
 .../client/console/rest/AccessTokenRestClient.java |   6 +-
 .../client/console/rest/AnyObjectRestClient.java   |   2 +-
 .../console/rest/AnyTypeClassRestClient.java       |  12 +--
 .../client/console/rest/AnyTypeRestClient.java     |  14 ++-
 .../client/console/rest/ApplicationRestClient.java |  10 +-
 .../client/console/rest/DynRealmRestClient.java    |   8 +-
 .../client/console/rest/GroupRestClient.java       |   4 +-
 .../console/rest/ImplementationRestClient.java     |  10 +-
 .../client/console/rest/LoggerRestClient.java      |  20 ++--
 .../console/rest/NotificationRestClient.java       |  14 +--
 .../client/console/rest/PolicyRestClient.java      |  10 +-
 .../client/console/rest/RealmRestClient.java       |  12 +--
 .../console/rest/RelationshipTypeRestClient.java   |  10 +-
 .../client/console/rest/ReportRestClient.java      |  18 ++--
 .../client/console/rest/RoleRestClient.java        |  18 ++--
 .../client/console/rest/SchemaRestClient.java      |  28 ++---
 .../console/rest/SecurityQuestionRestClient.java   |  10 +-
 .../client/console/rest/SyncopeRestClient.java     |   6 +-
 .../client/console/rest/TaskRestClient.java        |  52 ++++-----
 .../client/console/rest/UserRestClient.java        |   2 +-
 .../client/console/rest/UserSelfRestClient.java    |   2 +-
 .../tasks/AnyPropagationTaskDirectoryPanel.java    |   5 +-
 .../syncope/client/console/tasks/CrontabPanel.java |  14 +--
 .../tasks/NotificationTaskDirectoryPanel.java      |   7 +-
 .../tasks/PropagationTaskDirectoryPanel.java       |   7 +-
 .../tasks/ProvisioningTaskDirectoryPanel.java      |   7 +-
 .../client/console/tasks/PushTaskFilters.java      |   2 +-
 .../console/tasks/SchedTaskDirectoryPanel.java     |  10 +-
 .../console/tasks/SchedTaskWizardBuilder.java      |   8 +-
 .../console/tasks/TaskAttributesDetailsView.java   |   2 +-
 .../client/console/tasks/TaskDirectoryPanel.java   |   2 +-
 .../console/tasks/TaskStartAtTogglePanel.java      |   2 +-
 .../client/console/tasks/TemplatesTogglePanel.java |   4 +-
 .../ajax/form/AbstractAjaxDownloadBehavior.java    |   2 +-
 .../html/repeater/data/table/AttrColumn.java       |   2 +-
 .../repeater/data/table/ConnObjectAttrColumn.java  |   2 +-
 .../console/wicket/markup/head/MetaHeaderItem.java |   2 +-
 .../wicket/markup/html/form/AjaxDownload.java      |   4 +-
 .../wicket/markup/html/form/BinaryFieldPanel.java  |   4 +-
 .../markup/html/form/SelectableRecorder.java       |   2 +-
 .../client/console/widgets/JobActionPanel.java     |  18 ++--
 .../syncope/client/console/widgets/JobWidget.java  |  22 ++--
 .../syncope/client/console/widgets/LoadWidget.java |   2 +-
 .../client/console/widgets/NumberWidget.java       |   4 +-
 .../client/console/widgets/ProgressPanel.java      |   4 +-
 .../console/widgets/ReconciliationWidget.java      |  12 +--
 .../console/widgets/UsersByStatusWidget.java       |   2 +-
 .../client/console/wizards/any/AbstractAttrs.java  |   8 +-
 .../wizards/any/AnyObjectWizardBuilder.java        |   2 +-
 .../console/wizards/any/ConnObjectPanel.java       |   2 +-
 .../console/wizards/any/ConsoleAuxClasses.java     |   2 +-
 .../client/console/wizards/any/Details.java        |   4 +-
 .../console/wizards/any/DynamicMemberships.java    |   4 +-
 .../console/wizards/any/GroupWizardBuilder.java    |   2 +-
 .../client/console/wizards/any/Ownership.java      |  10 +-
 .../client/console/wizards/any/Relationships.java  |  15 ++-
 .../syncope/client/console/wizards/any/Roles.java  |   2 +-
 .../client/console/wizards/any/StatusPanel.java    |  10 +-
 .../wizards/any/TypeExtensionWizardBuilder.java    |   4 +-
 .../console/wizards/any/UserWizardBuilder.java     |   2 +-
 .../console/wizards/role/RoleWizardBuilder.java    |  14 ++-
 .../client/enduser/SyncopeWebApplication.java      |   6 +-
 .../client/enduser/commons/PreviewUtils.java       |   2 +-
 .../init/ClassPathScanImplementationLookup.java    |   2 +-
 .../enduser/markup/html/form/AjaxDownload.java     |   4 +-
 .../enduser/markup/html/form/BinaryFieldPanel.java |   4 +-
 .../client/enduser/pages/MustChangePassword.java   |   4 +-
 .../apache/syncope/client/enduser/pages/Self.java  |   2 +-
 .../client/enduser/rest/AnyTypeRestClient.java     |  12 +--
 .../client/enduser/rest/GroupRestClient.java       |  12 +--
 .../client/enduser/rest/RealmRestClient.java       |   2 +-
 .../client/enduser/rest/RoleRestClient.java        |  18 ++--
 .../client/enduser/rest/SchemaRestClient.java      |  28 ++---
 .../enduser/rest/SecurityQuestionRestClient.java   |   2 +-
 .../client/enduser/rest/SyncopeRestClient.java     |   4 +-
 .../client/enduser/rest/UserSelfRestClient.java    |   4 +-
 .../client/enduser/wizards/any/AbstractAttrs.java  |  16 ++-
 .../enduser/wizards/any/EnduserAuxClasses.java     |   2 +-
 .../syncope/client/enduser/wizards/any/Groups.java |   4 +-
 .../client/enduser/wizards/any/PlainAttrs.java     |   2 +-
 .../client/enduser/wizards/any/UserDetails.java    |   4 +-
 .../enduser/wizards/any/UserWizardBuilder.java     |   2 +-
 .../client/lib/RestClientExceptionMapper.java      |   2 +-
 .../apache/syncope/client/lib/SyncopeClient.java   |  14 +--
 .../client/lib/SyncopeClientFactoryBean.java       |  10 +-
 .../apache/syncope/common/lib/PropertyUtils.java   |   2 +-
 .../common/lib/collections/CircularFifoQueue.java  |   2 +-
 .../common/lib/search/SyncopeFiqlParser.java       |   8 +-
 .../syncope/common/lib/types/AnyEntitlement.java   |   2 +-
 .../syncope/common/lib/types/AuditLoggerName.java  |   6 +-
 .../common/lib/types/ClientExceptionType.java      |   2 +-
 .../syncope/common/lib/types/MatchingRule.java     |   2 +-
 .../syncope/common/lib/types/UnmatchingRule.java   |   2 +-
 .../common/lib/search/SyncopeFiqlParserTest.java   |   2 +-
 .../syncope/common/rest/api/RESTHeaders.java       |   2 +-
 .../common/keymaster/client/api/model/Domain.java  |   2 +-
 .../client/zookeper/ZookeeperConfParamOps.java     |   4 +-
 .../client/zookeper/ZookeeperDomainOps.java        |   6 +-
 .../zookeper/ZookeeperServiceDiscoveryOps.java     |   6 +-
 .../client/zookeper/ZookeeperServiceOps.java       |   6 +-
 .../syncope/core/logic/ConnectorHistoryLogic.java  |   6 +-
 .../apache/syncope/core/logic/ConnectorLogic.java  |   8 +-
 .../syncope/core/logic/ReconciliationLogic.java    |  10 +-
 .../syncope/core/logic/RemediationLogic.java       |  10 +-
 .../syncope/core/logic/ResourceHistoryLogic.java   |   6 +-
 .../apache/syncope/core/logic/ResourceLogic.java   |  40 +++----
 .../syncope/core/logic/AbstractAnyLogic.java       |   2 +-
 .../syncope/core/logic/AccessTokenLogic.java       |   2 +-
 .../syncope/core/logic/AnyTypeClassLogic.java      |   6 +-
 .../apache/syncope/core/logic/AnyTypeLogic.java    |   6 +-
 .../syncope/core/logic/ApplicationLogic.java       |   8 +-
 .../apache/syncope/core/logic/DynRealmLogic.java   |   6 +-
 .../org/apache/syncope/core/logic/GroupLogic.java  |   2 +-
 .../syncope/core/logic/ImplementationLogic.java    |   8 +-
 .../org/apache/syncope/core/logic/LoggerLogic.java |   4 +-
 .../syncope/core/logic/MailTemplateLogic.java      |  10 +-
 .../syncope/core/logic/NotificationLogic.java      |   6 +-
 .../org/apache/syncope/core/logic/RealmLogic.java  |   6 +-
 .../syncope/core/logic/RelationshipTypeLogic.java  |   6 +-
 .../org/apache/syncope/core/logic/ReportLogic.java |   4 +-
 .../syncope/core/logic/ReportTemplateLogic.java    |  10 +-
 .../org/apache/syncope/core/logic/RoleLogic.java   |  12 +--
 .../org/apache/syncope/core/logic/SchemaLogic.java |   6 +-
 .../syncope/core/logic/SecurityQuestionLogic.java  |   8 +-
 .../apache/syncope/core/logic/SyncopeLogic.java    |  20 ++--
 .../org/apache/syncope/core/logic/UserLogic.java   |   2 +-
 .../syncope/core/logic/cocoon/XSLTTransformer.java |   2 +-
 .../init/ClassPathScanImplementationLookup.java    |   2 +-
 .../syncope/core/logic/init/LoggerAccessor.java    |   2 +-
 .../syncope/core/logic/init/LoggerLoader.java      |  10 +-
 .../core/rest/cxf/RestServiceExceptionMapper.java  |  17 ++-
 .../core/rest/cxf/UnwrappedObjectMapper.java       |   2 +-
 .../apache/syncope/core/rest/cxf/WADLServlet.java  |   2 +-
 .../core/rest/cxf/service/ReportServiceImpl.java   |   4 +-
 .../core/rest/cxf/service/SyncopeServiceImpl.java  |   2 +-
 .../persistence/api/search/SearchCondVisitor.java  |   2 +-
 .../persistence/jpa/dao/AbstractJPAJSONAnyDAO.java |   2 +-
 .../core/persistence/jpa/dao/MyJPAJSONAnyDAO.java  |   6 +-
 .../persistence/jpa/dao/MyJPAJSONAnySearchDAO.java |  16 +--
 .../core/persistence/jpa/dao/PGJPAJSONAnyDAO.java  |   4 +-
 .../persistence/jpa/dao/PGJPAJSONAnySearchDAO.java |  12 +--
 .../core/persistence/jpa/DomainConfFactory.java    |   8 +-
 .../jpa/attrvalue/validation/BasicValidator.java   |   2 +-
 .../jpa/attrvalue/validation/BinaryValidator.java  |   4 +-
 .../jpa/content/XMLContentExporter.java            |   9 +-
 .../persistence/jpa/content/XMLContentLoader.java  |   4 +-
 .../core/persistence/jpa/dao/AbstractAnyDAO.java   |  18 ++--
 .../persistence/jpa/dao/AbstractAnySearchDAO.java  |  14 +--
 .../persistence/jpa/dao/JPAAccessTokenDAO.java     |   4 +-
 .../core/persistence/jpa/dao/JPAAnyMatchDAO.java   |  20 ++--
 .../core/persistence/jpa/dao/JPAAnySearchDAO.java  | 118 ++++++++++-----------
 .../jpa/dao/JPAExternalResourceDAO.java            |   2 +-
 .../core/persistence/jpa/dao/JPAGroupDAO.java      |   2 +-
 .../core/persistence/jpa/dao/JPAPolicyDAO.java     |   2 +-
 .../core/persistence/jpa/dao/JPARealmDAO.java      |   2 +-
 .../core/persistence/jpa/dao/JPAReportExecDAO.java |   2 +-
 .../core/persistence/jpa/dao/JPATaskDAO.java       |  31 +++---
 .../core/persistence/jpa/dao/JPATaskExecDAO.java   |   2 +-
 .../core/persistence/jpa/dao/JPAUserDAO.java       |   2 +-
 .../core/persistence/jpa/dao/SearchSupport.java    |   8 +-
 .../jpa/openjpa/BooleanValueHandler.java           |   2 +-
 .../jpa/openjpa/LocaleValueHandler.java            |   2 +-
 .../jpa/validation/entity/AbstractValidator.java   |   6 +-
 .../jpa/validation/entity/AnyValidator.java        |   8 +-
 .../entity/EntityValidationListener.java           |   3 +-
 .../entity/ExternalResourceValidator.java          |   6 +-
 .../entity/PropagationTaskValidator.java           |   2 +-
 .../jpa/validation/entity/ReportValidator.java     |   2 +-
 .../jpa/validation/entity/SchedTaskValidator.java  |   2 +-
 .../orm/jpa/vendor/OpenJpaDialect.java             |   2 +-
 .../orm/jpa/vendor/OpenJpaVendorAdapter.java       |   2 +-
 .../persistence/jpa/inner/PlainSchemaTest.java     |   2 +-
 .../core/persistence/jpa/outer/UserTest.java       |   4 +-
 .../api/propagation/PropagationException.java      |   2 +-
 .../core/provisioning/api/utils/RealmUtils.java    |   2 +-
 .../syncope/core/provisioning/java/AuditEntry.java |   2 +-
 .../provisioning/java/ConnectorFacadeProxy.java    |   4 +-
 .../core/provisioning/java/ConnectorManager.java   |   2 +-
 .../core/provisioning/java/DerAttrHandlerImpl.java |   6 +-
 .../core/provisioning/java/MappingManagerImpl.java |   2 +-
 .../java/data/AbstractAnyDataBinder.java           |  58 +++++-----
 .../java/data/ConnInstanceDataBinderImpl.java      |   2 +-
 .../java/data/GroupDataBinderImpl.java             |   4 +-
 .../java/data/PolicyDataBinderImpl.java            |   4 +-
 .../java/data/RealmDataBinderImpl.java             |   2 +-
 .../java/data/ReportDataBinderImpl.java            |   2 +-
 .../java/data/ResourceDataBinderImpl.java          |   6 +-
 .../java/data/SchemaDataBinderImpl.java            |   8 +-
 .../provisioning/java/data/TaskDataBinderImpl.java |   6 +-
 .../java/jexl/SyncopeJexlFunctions.java            |   9 +-
 .../job/GroupMemberProvisionTaskJobDelegate.java   |   8 +-
 .../core/provisioning/java/job/JobManagerImpl.java |   2 +-
 .../DefaultNotificationJobDelegate.java            |  20 ++--
 .../java/job/report/GroupReportlet.java            |   7 +-
 .../java/job/report/ReconciliationReportlet.java   |  20 ++--
 .../java/job/report/StaticReportlet.java           |   2 +-
 .../java/job/report/UserReportlet.java             |   8 +-
 .../notification/DefaultNotificationManager.java   |   2 +-
 .../java/propagation/AzurePropagationActions.java  |   4 +-
 .../propagation/DBPasswordPropagationActions.java  |   5 +-
 .../propagation/GoogleAppsPropagationActions.java  |   2 +-
 .../LDAPMembershipPropagationActions.java          |   4 +-
 .../LDAPPasswordPropagationActions.java            |  11 +-
 .../PriorityPropagationTaskExecutor.java           |   4 +-
 .../java/pushpull/DBPasswordPullActions.java       |   2 +-
 .../pushpull/DefaultRealmPullResultHandler.java    |   6 +-
 .../pushpull/DefaultRealmPushResultHandler.java    |   8 +-
 .../pushpull/DefaultUserPullResultHandler.java     |   4 +-
 .../java/pushpull/PullJobDelegate.java             |   6 +-
 .../core/provisioning/java/pushpull/PullUtils.java |   2 +-
 .../java/pushpull/PushJobDelegate.java             |   8 +-
 .../core/provisioning/java/pushpull/PushUtils.java |  10 +-
 .../java/pushpull/SinglePullJobDelegate.java       |   2 +-
 .../provisioning/java/utils/ConnObjectUtils.java   |   3 +-
 .../provisioning/java/utils/TemplateUtils.java     |  10 +-
 .../core/provisioning/java/MailTemplateTest.java   |   4 +-
 .../core/spring/policy/DefaultPasswordRule.java    |  22 ++--
 .../core/spring/security/AuthDataAccessor.java     |   2 +-
 .../spring/security/DefaultPasswordGenerator.java  |  20 ++--
 .../security/DelegatedAdministrationException.java |   4 +-
 .../core/spring/ImplementationManagerTest.java     |   2 +-
 .../spring/security/PasswordGeneratorTest.java     |   2 +-
 .../syncope/client/console/pages/CamelRoutes.java  |   8 +-
 .../console/panels/CamelRoutesDirectoryPanel.java  |   8 +-
 .../client/console/rest/CamelRoutesRestClient.java |  10 +-
 .../client/console/widgets/CamelMetricsWidget.java |   8 +-
 .../syncope/core/logic/init/CamelRouteLoader.java  |   8 +-
 .../client/ElasticsearchIndexManager.java          |  18 ++--
 .../elasticsearch/client/ElasticsearchUtils.java   |   4 +-
 .../jpa/dao/ElasticsearchAnySearchDAO.java         |  24 ++---
 .../java/job/ElasticsearchReindex.java             |   6 +-
 .../console/panels/BpmnProcessDirectoryPanel.java  |  14 ++-
 .../client/console/panels/NewBpmnProcess.java      |   4 +-
 .../console/panels/UserRequestDirectoryPanel.java  |   9 +-
 .../console/panels/UserRequestFormDetails.java     |   2 +-
 .../panels/UserRequestFormDirectoryPanel.java      |  15 ++-
 .../console/panels/UserRequestFormModal.java       |   4 +-
 .../resources/AbstractBpmnProcessResource.java     |   4 +-
 .../console/resources/BpmnProcessGETResource.java  |   2 +-
 .../console/resources/BpmnProcessPUTResource.java  |   3 +-
 .../client/console/rest/BpmnProcessRestClient.java |  12 +--
 .../client/console/rest/UserRequestRestClient.java |  18 ++--
 .../console/rest/UserWorkflowTaskRestClient.java   |   2 +-
 .../console/widgets/UserRequestFormsWidget.java    |   6 +-
 .../syncope/client/enduser/pages/Flowable.java     |  20 ++--
 .../client/enduser/rest/BpmnProcessRestClient.java |   8 +-
 .../client/enduser/rest/UserRequestRestClient.java |  26 ++---
 .../core/flowable/impl/FlowableRuntimeUtils.java   |   2 +-
 .../flowable/impl/FlowableUserRequestHandler.java  |   8 +-
 .../flowable/impl/FlowableUserWorkflowAdapter.java |   2 +-
 .../core/flowable/impl/FlowableWorkflowUtils.java  |   2 +-
 .../flowable/support/SyncopeGroupQueryImpl.java    |   4 +-
 .../flowable/support/SyncopeTaskFormHandler.java   |   4 +-
 .../flowable/support/SyncopeUserQueryImpl.java     |   2 +-
 .../syncope/core/logic/UserRequestLogic.java       |   2 +-
 .../panels/OIDCProvidersDirectoryPanel.java        |  14 +--
 .../console/rest/OIDCProviderRestClient.java       |  12 +--
 .../console/wizards/OIDCProviderWizardBuilder.java |  14 +--
 .../resources/OIDCProviderMappingPanel.java        |   6 +-
 .../apache/syncope/core/logic/OIDCClientLogic.java |  27 ++---
 .../syncope/core/logic/OIDCProviderLogic.java      |   8 +-
 .../syncope/core/logic/oidc/OIDCUserManager.java   |   2 +-
 .../java/data/OIDCProviderDataBinderImpl.java      |   6 +-
 .../ext/saml2lsp/agent/AbstractSAML2SPServlet.java |   4 +-
 .../client/console/panels/ImportMetadata.java      |   4 +-
 .../console/panels/SAML2IdPsDirectoryPanel.java    |  16 +--
 .../client/console/rest/SAML2IdPsRestClient.java   |  10 +-
 .../console/wizards/SAML2IdPWizardBuilder.java     |  10 +-
 .../wizards/resources/SAML2IdPMappingPanel.java    |   6 +-
 .../apache/syncope/core/logic/SAML2IdPLogic.java   |   8 +-
 .../apache/syncope/core/logic/SAML2SPLogic.java    |  30 +++---
 .../core/logic/saml2/SAML2ReaderWriter.java        |  12 +--
 .../java/data/SAML2IdPDataBinderImpl.java          |   6 +-
 .../syncope/client/console/pages/SCIMConfPage.java |   6 +-
 .../client/console/panels/SCIMConfPanel.java       |   4 +-
 .../client/console/panels/SCIMConfTabPanel.java    |   2 +-
 .../client/console/panels/SCIMConfUserPanel.java   |   6 +-
 .../client/console/rest/SCIMConfRestClient.java    |   4 +-
 .../apache/syncope/core/logic/SCIMDataBinder.java  |  40 +++----
 .../org/apache/syncope/core/logic/SCIMLogic.java   |   6 +-
 .../core/logic/scim/SearchCondConverter.java       |   2 +-
 .../syncope/core/logic/scim/SearchCondVisitor.java |  14 +--
 .../ext/scimv2/cxf/SCIMExceptionMapper.java        |   6 +-
 .../ext/scimv2/cxf/service/GroupServiceImpl.java   |   5 +-
 .../ext/scimv2/cxf/service/SCIMServiceImpl.java    |   4 +-
 .../syncope/core/logic/NetworkServiceLogic.java    |   6 +-
 .../fit/buildtools/ApacheDSStartStopListener.java  |   2 +-
 .../ConnectorServerStartStopListener.java          |   2 +-
 .../fit/buildtools/ServiceTimeoutServlet.java      |   2 +-
 .../fit/buildtools/cxf/ProvisioningImpl.java       |  14 +--
 .../org/apache/syncope/fit/AbstractITCase.java     |   2 +-
 .../apache/syncope/fit/console/BatchesITCase.java  |   2 +-
 .../apache/syncope/fit/console/GroupsITCase.java   |   2 +-
 .../org/apache/syncope/fit/console/LogsITCase.java |   2 +-
 .../syncope/fit/console/NotificationsITCase.java   |   2 +-
 .../apache/syncope/fit/console/PoliciesITCase.java |  40 +++----
 .../apache/syncope/fit/console/ReportsITCase.java  |   4 +-
 .../apache/syncope/fit/console/RolesITCase.java    |   2 +-
 .../fit/console/SecurityQuestionsITCase.java       |   2 +-
 .../fit/core/AbstractNotificationTaskITCase.java   |  12 +--
 .../syncope/fit/core/AuthenticationITCase.java     |   2 +-
 .../org/apache/syncope/fit/core/BatchITCase.java   |   6 +-
 .../apache/syncope/fit/core/CamelRouteITCase.java  |   2 +-
 .../apache/syncope/fit/core/DynRealmITCase.java    |   6 +-
 .../syncope/fit/core/ExceptionMapperITCase.java    |   4 +-
 .../org/apache/syncope/fit/core/GroupITCase.java   |   2 +-
 .../org/apache/syncope/fit/core/JWTITCase.java     |   4 +-
 .../org/apache/syncope/fit/core/LoggerITCase.java  |   2 +-
 .../syncope/fit/core/NotificationITCase.java       |   2 +-
 .../syncope/fit/core/NotificationTaskITCase.java   |   2 +-
 .../apache/syncope/fit/core/PlainSchemaITCase.java |   2 +-
 .../syncope/fit/core/PropagationTaskITCase.java    |   2 +-
 .../apache/syncope/fit/core/PullTaskITCase.java    |  12 +--
 .../org/apache/syncope/fit/core/RESTITCase.java    |   8 +-
 .../org/apache/syncope/fit/core/RealmITCase.java   |   2 +-
 .../org/apache/syncope/fit/core/ReportITCase.java  |   4 +-
 .../apache/syncope/fit/core/ResourceITCase.java    |   4 +-
 .../org/apache/syncope/fit/core/SAML2ITCase.java   |   8 +-
 .../org/apache/syncope/fit/core/SCIMITCase.java    |   6 +-
 .../org/apache/syncope/fit/core/UserITCase.java    |   8 +-
 .../apache/syncope/fit/core/UserIssuesITCase.java  |   4 +-
 .../apache/syncope/fit/enduser/EnduserITCase.java  |   8 +-
 .../org/apache/syncope/fit/OIDCClientITCase.java   |   2 +-
 .../java/org/apache/syncope/fit/SAML2SPITCase.java |   4 +-
 .../syncope/ide/netbeans/ConnectionParams.java     |   2 +-
 .../service/MailTemplateManagerService.java        |   2 +-
 .../service/ReportTemplateManagerService.java      |   2 +-
 .../view/ResourceExplorerTopComponent.java         |  10 +-
 .../ide/netbeans/view/ServerDetailsView.java       |  10 +-
 .../resources/org/apache/syncope/checkstyle.xml    |   2 +-
 442 files changed, 1619 insertions(+), 1786 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 027590f..37f328a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -49,7 +49,7 @@ jobs:
       name: "Warm Up Dependencies"
       #######################################################
     - stage: build
-      script: mvn install --quiet -T 4 -P all,skipTests,skipLegalFiles -Dcheckstyle.skip=true -Dmaven.javadoc.skip=true -Denforcer.skip=true
+      script: mvn install --quiet -T 4 -P all,skipTests,skipLegalFiles,docker -Dcheckstyle.skip=true -Dmaven.javadoc.skip=true -Denforcer.skip=true
       name: "Build"
       #######################################################
     - stage: validate
@@ -64,14 +64,23 @@ jobs:
     - stage: validate
       script: mvn -T 4 --quiet modernizer:modernizer
       name: "Modernizer Legacy API Analysis"
+    - stage: validate
+      script: mvn -T 4 --quiet apache-rat:check
+      name: "Release Audit Tool (RAT) Analysis"
       ######################################################
     - stage: test
       script: mvn clean test -T 4 -P skipLegalFiles,skipSass -T 4 --quiet -Dinvoker.streamLogs=true -Denforcer.skip=true -Dmodernizer.skip=true
       name: "Unit Tests"
       ######################################################
     - stage: fit
-      script: travis_wait 30 mvn -f fit/core-reference/pom.xml verify -P skipLegalFiles,skipSass -T 4 -Dinvoker.streamLogs=true -Denforcer.skip=true -Dmodernizer.skip=true -Djacoco.skip=true
-      name: "Full Integration Tests"
+      script: travis_wait 55 mvn -f fit/core-reference/pom.xml verify -P full-it,all,skipLegalFiles,skipSass -T 4 -Dinvoker.streamLogs=true -Denforcer.skip=true -Dmodernizer.skip=true -Djacoco.skip=true -Drat.skip=true
+      name: "Full Integration Tests via JSON Content-Type"
+    # - stage: fit
+    #   script: travis_wait 55 mvn -f fit/core-reference/pom.xml verify -P full-it,all,skipLegalFiles,skipSass -T 4 -DjaxrsContentType=application/xml -Dinvoker.streamLogs=true -Denforcer.skip=true -Dmodernizer.skip=true -Djacoco.skip=true -Drat.skip=true
+    #   name: "Full Integration Tests via XML Content-Type"
+    # - stage: fit
+    #   script: travis_wait 55 mvn -f fit/core-reference/pom.xml verify -P full-it,all,skipLegalFiles,skipSass -T 4 -DjaxrsContentType=application/yaml -Dinvoker.streamLogs=true -Denforcer.skip=true -Dmodernizer.skip=true -Djacoco.skip=true -Drat.skip=true
+    #   name: "Full Integration Tests via YAML Content-Type"
       #####################################################
   after_failure:
     - cat fit/core-reference/target/log/*
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteDirectoryPanel.java b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteDirectoryPanel.java
index 7ea715a..368e67a 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteDirectoryPanel.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteDirectoryPanel.java
@@ -82,7 +82,7 @@ public class GatewayRouteDirectoryPanel
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 try {
-                    restClient.push();
+                    GatewayRouteRestClient.push();
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (Exception e) {
@@ -124,7 +124,7 @@ public class GatewayRouteDirectoryPanel
             public void onClick(final AjaxRequestTarget target, final GatewayRouteTO ignore) {
                 send(GatewayRouteDirectoryPanel.this, Broadcast.EXACT,
                         new AjaxWizard.EditItemActionEvent<>(
-                                restClient.read(model.getObject().getKey()), target));
+                                GatewayRouteRestClient.read(model.getObject().getKey()), target));
             }
         }, ActionLink.ActionType.EDIT, AMEntitlement.GATEWAY_ROUTE_UPDATE);
 
@@ -149,7 +149,7 @@ public class GatewayRouteDirectoryPanel
             public void onClick(final AjaxRequestTarget target, final GatewayRouteTO ignore) {
                 GatewayRouteTO route = model.getObject();
                 try {
-                    restClient.delete(route.getKey());
+                    GatewayRouteRestClient.delete(route.getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -193,14 +193,14 @@ public class GatewayRouteDirectoryPanel
 
         @Override
         public Iterator<? extends GatewayRouteTO> iterator(final long first, final long count) {
-            List<GatewayRouteTO> list = restClient.list();
+            List<GatewayRouteTO> list = GatewayRouteRestClient.list();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return GatewayRouteRestClient.list().size();
         }
 
         @Override
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteWizardBuilder.java b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteWizardBuilder.java
index c944944..6dad69f 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteWizardBuilder.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteWizardBuilder.java
@@ -43,8 +43,6 @@ public class GatewayRouteWizardBuilder extends BaseAjaxWizardBuilder<GatewayRout
 
     private static final long serialVersionUID = 2060352959114706419L;
 
-    private final GatewayRouteRestClient restClient = new GatewayRouteRestClient();
-
     public GatewayRouteWizardBuilder(final GatewayRouteTO route, final PageReference pageRef) {
         super(route, pageRef);
     }
@@ -52,9 +50,9 @@ public class GatewayRouteWizardBuilder extends BaseAjaxWizardBuilder<GatewayRout
     @Override
     protected Serializable onApplyInternal(final GatewayRouteTO modelObject) {
         if (modelObject.getKey() == null) {
-            restClient.create(modelObject);
+            GatewayRouteRestClient.create(modelObject);
         } else {
-            restClient.update(modelObject);
+            GatewayRouteRestClient.update(modelObject);
         }
         return modelObject;
     }
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/rest/GatewayRouteRestClient.java b/client/am/console/src/main/java/org/apache/syncope/client/console/rest/GatewayRouteRestClient.java
index cd08975..2d628e5 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/rest/GatewayRouteRestClient.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/rest/GatewayRouteRestClient.java
@@ -26,27 +26,27 @@ public class GatewayRouteRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -7379778542101161274L;
 
-    public List<GatewayRouteTO> list() {
+    public static List<GatewayRouteTO> list() {
         return getService(GatewayRouteService.class).list();
     }
 
-    public GatewayRouteTO read(final String key) {
+    public static GatewayRouteTO read(final String key) {
         return getService(GatewayRouteService.class).read(key);
     }
 
-    public void create(final GatewayRouteTO route) {
+    public static void create(final GatewayRouteTO route) {
         getService(GatewayRouteService.class).create(route);
     }
 
-    public void update(final GatewayRouteTO route) {
+    public static void update(final GatewayRouteTO route) {
         getService(GatewayRouteService.class).update(route);
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(GatewayRouteService.class).delete(key);
     }
 
-    public void push() {
+    public static void push() {
         getService(GatewayRouteService.class).pushToSRA();
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMExternalResourceProvider.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMExternalResourceProvider.java
index 407aafb..d66548e 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMExternalResourceProvider.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMExternalResourceProvider.java
@@ -29,6 +29,6 @@ public class IdMExternalResourceProvider implements ExternalResourceProvider {
 
     @Override
     public List<String> get() {
-        return new ResourceRestClient().list().stream().map(EntityTO::getKey).collect(Collectors.toList());
+        return ResourceRestClient.list().stream().map(EntityTO::getKey).collect(Collectors.toList());
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
index a7ab2c4..5dfbba3 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
+import org.apache.syncope.client.console.rest.ImplementationRestClient;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.to.ImplementationTO;
 import org.apache.syncope.common.lib.types.IdMImplementationType;
@@ -136,7 +137,7 @@ public class IdMImplementationInfoProvider extends IdRepoImplementationInfoProvi
 
             @Override
             protected List<String> load() {
-                return implRestClient.list(IdMImplementationType.RECON_FILTER_BUILDER).stream().
+                return ImplementationRestClient.list(IdMImplementationType.RECON_FILTER_BUILDER).stream().
                         map(EntityTO::getKey).sorted().collect(Collectors.toList());
             }
         };
@@ -150,7 +151,7 @@ public class IdMImplementationInfoProvider extends IdRepoImplementationInfoProvi
 
             @Override
             protected List<String> load() {
-                return implRestClient.list(IdMImplementationType.PULL_ACTIONS).stream().
+                return ImplementationRestClient.list(IdMImplementationType.PULL_ACTIONS).stream().
                         map(EntityTO::getKey).sorted().collect(Collectors.toList());
             }
         };
@@ -164,7 +165,7 @@ public class IdMImplementationInfoProvider extends IdRepoImplementationInfoProvi
 
             @Override
             protected List<String> load() {
-                return implRestClient.list(IdMImplementationType.PUSH_ACTIONS).stream().
+                return ImplementationRestClient.list(IdMImplementationType.PUSH_ACTIONS).stream().
                         map(EntityTO::getKey).sorted().collect(Collectors.toList());
             }
         };
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
index 9e1bd2c..69e3483 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
@@ -128,7 +128,7 @@ public abstract class ConnInstanceHistoryConfDirectoryPanel extends DirectoryPan
             @Override
             public void onClick(final AjaxRequestTarget target, final ConnInstanceHistoryConfTO modelObject) {
                 try {
-                    restClient.restore(modelObject.getKey());
+                    ConnectorHistoryRestClient.restore(modelObject.getKey());
                     ConnInstanceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -148,7 +148,7 @@ public abstract class ConnInstanceHistoryConfDirectoryPanel extends DirectoryPan
             @Override
             public void onClick(final AjaxRequestTarget target, final ConnInstanceHistoryConfTO modelObject) {
                 try {
-                    restClient.delete(modelObject.getKey());
+                    ConnectorHistoryRestClient.delete(modelObject.getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                     ConnInstanceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
@@ -212,7 +212,7 @@ public abstract class ConnInstanceHistoryConfDirectoryPanel extends DirectoryPan
 
         @Override
         public Iterator<ConnInstanceHistoryConfTO> iterator(final long first, final long count) {
-            final List<ConnInstanceHistoryConfTO> configurations = restClient.list(entityKey);
+            final List<ConnInstanceHistoryConfTO> configurations = ConnectorHistoryRestClient.list(entityKey);
 
             Collections.sort(configurations, comparator);
             return configurations.iterator();
@@ -220,7 +220,7 @@ public abstract class ConnInstanceHistoryConfDirectoryPanel extends DirectoryPan
 
         @Override
         public long size() {
-            return restClient.list(entityKey).size();
+            return ConnectorHistoryRestClient.list(entityKey).size();
         }
 
         @Override
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
index e7006c7..e49c0e1 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
@@ -123,7 +123,7 @@ public abstract class ConnObjectListViewPanel extends Panel {
             final String anyType,
             final String cookie) {
 
-        Pair<String, List<ConnObjectTO>> items = new ResourceRestClient().listConnObjects(resource,
+        Pair<String, List<ConnObjectTO>> items = ResourceRestClient.listConnObjects(resource,
                 anyType,
                 SIZE,
                 cookie,
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfDetails.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfDetails.java
index 510be55..9af04c7 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfDetails.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfDetails.java
@@ -225,12 +225,12 @@ public class HistoryConfDetails<T extends AbstractHistoryConf> extends Multileve
         T conf = null;
 
         if (selectedHistoryConfTO instanceof ConnInstanceHistoryConfTO) {
-            ConnInstanceTO current = new ConnectorRestClient().read(
+            ConnInstanceTO current = 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(
+            ResourceTO current = ResourceRestClient.read(
                     ResourceHistoryConfTO.class.cast(selectedHistoryConfTO).getResourceTO().getKey());
             conf = (T) new ResourceHistoryConfTO();
             ((ResourceHistoryConfTO) conf).setResourceTO(current);
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfList.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfList.java
index b4f4125..bb31ade 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfList.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/HistoryConfList.java
@@ -19,6 +19,9 @@
 package org.apache.syncope.client.console.panels;
 
 import java.io.Serializable;
+
+import org.apache.syncope.client.console.rest.ConnectorHistoryRestClient;
+import org.apache.syncope.client.console.rest.ResourceHistoryRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.ui.commons.panels.ModalPanel;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -55,7 +58,8 @@ public class HistoryConfList<T extends Serializable> extends Panel implements Mo
                     final AjaxRequestTarget target) {
                 mlp.next(
                         new StringResourceModel("history.diff.view", this).getObject(),
-                        new HistoryConfDetails<>(modal, historyTO, pageReference, restClient.list(entityKey)), target);
+                        new HistoryConfDetails<>(modal, historyTO, pageReference,
+                            ConnectorHistoryRestClient.list(entityKey)), target);
             }
         } : new ResourceHistoryConfDirectoryPanel(baseModal, mlp, entityKey, pageReference) {
 
@@ -66,7 +70,8 @@ public class HistoryConfList<T extends Serializable> extends Panel implements Mo
                     final AjaxRequestTarget target) {
                 mlp.next(
                         new StringResourceModel("history.diff.view", this).getObject(),
-                        new HistoryConfDetails<>(modal, historyTO, pageReference, restClient.list(entityKey)), target);
+                        new HistoryConfDetails<>(modal, historyTO, pageReference,
+                            ResourceHistoryRestClient.list(entityKey)), target);
             }
         });
 
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
index 2a03b9e..377a8c4 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
@@ -46,12 +46,6 @@ public class ProvisionAuxClassesPanel extends Panel {
 
     private static final Logger LOG = LoggerFactory.getLogger(ProvisionAuxClassesPanel.class);
 
-    private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
-    private final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient();
-
-    private final SchemaRestClient schemaRestClient = new SchemaRestClient();
-
     private final ProvisionTO provision;
 
     public ProvisionAuxClassesPanel(final String id, final ProvisionTO provision) {
@@ -76,12 +70,12 @@ public class ProvisionAuxClassesPanel extends Panel {
             choices = new ArrayList<>();
 
             try {
-                anyType = anyTypeRestClient.read(provision.getAnyType());
+                anyType = AnyTypeRestClient.read(provision.getAnyType());
             } catch (Exception e) {
                 LOG.error("Could not read AnyType {}", provision.getAnyType(), e);
             }
             if (anyType != null) {
-                for (AnyTypeClassTO aux : anyTypeClassRestClient.list()) {
+                for (AnyTypeClassTO aux : AnyTypeClassRestClient.list()) {
                     if (!anyType.getClasses().contains(aux.getKey())) {
                         choices.add(aux.getKey());
                     }
@@ -103,11 +97,11 @@ public class ProvisionAuxClassesPanel extends Panel {
         addOrReplace(uidOnCreate);
     }
 
-    private List<String> getSchemas(final AnyTypeTO anyType, final List<String> anyTypeClasses) {
+    private static List<String> getSchemas(final AnyTypeTO anyType, final List<String> anyTypeClasses) {
         List<String> classes = new ArrayList<>(anyType.getClasses());
         classes.addAll(anyTypeClasses);
 
-        return schemaRestClient.<PlainSchemaTO>getSchemas(
+        return SchemaRestClient.<PlainSchemaTO>getSchemas(
                 SchemaType.PLAIN, null, classes.toArray(new String[] {})).
                 stream().map(EntityTO::getKey).collect(Collectors.toList());
     }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
index 0d1f06b..b5018e4 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
@@ -153,7 +153,7 @@ public class RemediationDirectoryPanel
                 @Override
                 public void onClick(final AjaxRequestTarget target, final RemediationTO ignore) {
                     try {
-                        restClient.remedy(model.getObject().getKey(), model.getObject().getKeyPayload());
+                        RemediationRestClient.remedy(model.getObject().getKey(), model.getObject().getKeyPayload());
                         SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                         target.add(container);
                     } catch (SyncopeClientException e) {
@@ -211,7 +211,7 @@ public class RemediationDirectoryPanel
                                     model.getObject(),
                                     previousUserTO,
                                     newUserTO,
-                                    new AnyTypeRestClient().read(remediationTO.getAnyType()).getClasses(),
+                                    AnyTypeRestClient.read(remediationTO.getAnyType()).getClasses(),
                                     FormLayoutInfoUtils.fetch(List.of(remediationTO.getAnyType())).getLeft(),
                                     pageRef
                             ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
@@ -238,7 +238,7 @@ public class RemediationDirectoryPanel
                                     model.getObject(),
                                     previousGroupTO,
                                     newGroupTO,
-                                    new AnyTypeRestClient().read(remediationTO.getAnyType()).getClasses(),
+                                    AnyTypeRestClient.read(remediationTO.getAnyType()).getClasses(),
                                     FormLayoutInfoUtils.fetch(List.of(remediationTO.getAnyType())).getMiddle(),
                                     pageRef
                             ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
@@ -265,7 +265,7 @@ public class RemediationDirectoryPanel
                                     model.getObject(),
                                     previousAnyObjectTO,
                                     newAnyObjectTO,
-                                    new AnyTypeRestClient().read(remediationTO.getAnyType()).getClasses(),
+                                    AnyTypeRestClient.read(remediationTO.getAnyType()).getClasses(),
                                     FormLayoutInfoUtils.fetch(List.of(remediationTO.getAnyType())).
                                             getRight().values().iterator().next(),
                                     pageRef
@@ -283,7 +283,7 @@ public class RemediationDirectoryPanel
             @Override
             public void onClick(final AjaxRequestTarget target, final RemediationTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    RemediationRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -317,8 +317,6 @@ public class RemediationDirectoryPanel
 
         private static final long serialVersionUID = -2311716167583335852L;
 
-        private final RemediationRestClient restClient = new RemediationRestClient();
-
         public RemediationProvider(final int paginatorRows) {
             super(paginatorRows);
 
@@ -328,12 +326,13 @@ public class RemediationDirectoryPanel
         @Override
         public Iterator<RemediationTO> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return restClient.getRemediations((page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
+            return RemediationRestClient.getRemediations((page < 0 ? 0 : page) + 1,
+                paginatorRows, getSort()).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.countRemediations();
+            return RemediationRestClient.countRemediations();
         }
 
         @Override
@@ -381,7 +380,7 @@ public class RemediationDirectoryPanel
                 UserCR req = new UserCR();
                 EntityTOUtils.toAnyCR(inner, req);
 
-                result = restClient.remedy(remediationTO.getKey(), req);
+                result = RemediationRestClient.remedy(remediationTO.getKey(), req);
             } else {
                 UserUR req = AnyOperations.diff(inner, previousUserTO, false);
 
@@ -397,7 +396,7 @@ public class RemediationDirectoryPanel
                     result = new ProvisioningResult<>();
                     result.setEntity(inner);
                 } else {
-                    result = restClient.remedy(remediationTO.getKey(), req);
+                    result = RemediationRestClient.remedy(remediationTO.getKey(), req);
                 }
             }
 
@@ -436,7 +435,7 @@ public class RemediationDirectoryPanel
                 GroupCR req = new GroupCR();
                 EntityTOUtils.toAnyCR(inner, req);
 
-                result = restClient.remedy(remediationTO.getKey(), req);
+                result = RemediationRestClient.remedy(remediationTO.getKey(), req);
             } else {
                 GroupUR req = AnyOperations.diff(inner, previousGroupTO, false);
 
@@ -445,7 +444,7 @@ public class RemediationDirectoryPanel
                     result = new ProvisioningResult<>();
                     result.setEntity(inner);
                 } else {
-                    result = restClient.remedy(remediationTO.getKey(), req);
+                    result = RemediationRestClient.remedy(remediationTO.getKey(), req);
                 }
             }
 
@@ -484,7 +483,7 @@ public class RemediationDirectoryPanel
                 AnyObjectCR req = new AnyObjectCR();
                 EntityTOUtils.toAnyCR(inner, req);
 
-                result = restClient.remedy(remediationTO.getKey(), req);
+                result = RemediationRestClient.remedy(remediationTO.getKey(), req);
             } else {
                 AnyObjectUR req = AnyOperations.diff(inner, previousAnyObjectTO, false);
 
@@ -493,7 +492,7 @@ public class RemediationDirectoryPanel
                     result = new ProvisioningResult<>();
                     result.setEntity(inner);
                 } else {
-                    result = restClient.remedy(remediationTO.getKey(), req);
+                    result = RemediationRestClient.remedy(remediationTO.getKey(), req);
                 }
             }
 
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
index 612ebc1..d800f5f 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
@@ -129,7 +129,7 @@ public abstract class ResourceHistoryConfDirectoryPanel extends DirectoryPanel<
             @Override
             public void onClick(final AjaxRequestTarget target, final ResourceHistoryConfTO modelObject) {
                 try {
-                    restClient.restore(modelObject.getKey());
+                    ResourceHistoryRestClient.restore(modelObject.getKey());
                     ResourceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -149,7 +149,7 @@ public abstract class ResourceHistoryConfDirectoryPanel extends DirectoryPanel<
             @Override
             public void onClick(final AjaxRequestTarget target, final ResourceHistoryConfTO modelObject) {
                 try {
-                    restClient.delete(modelObject.getKey());
+                    ResourceHistoryRestClient.delete(modelObject.getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                     ResourceHistoryConfDirectoryPanel.this.getTogglePanel().close(target);
@@ -213,7 +213,7 @@ public abstract class ResourceHistoryConfDirectoryPanel extends DirectoryPanel<
 
         @Override
         public Iterator<ResourceHistoryConfTO> iterator(final long first, final long count) {
-            final List<ResourceHistoryConfTO> configurations = restClient.list(entityKey);
+            final List<ResourceHistoryConfTO> configurations = ResourceHistoryRestClient.list(entityKey);
 
             Collections.sort(configurations, comparator);
             return configurations.iterator();
@@ -221,7 +221,7 @@ public abstract class ResourceHistoryConfDirectoryPanel extends DirectoryPanel<
 
         @Override
         public long size() {
-            return restClient.list(entityKey).size();
+            return ResourceHistoryRestClient.list(entityKey).size();
         }
 
         @Override
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
index 1c91f53..23baedd 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
@@ -45,10 +45,6 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
 
     private static final long serialVersionUID = 5979623248182851337L;
 
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
-    private final ResourceRestClient resourceRestClient = new ResourceRestClient();
-
     private final Map<String, String> anyTypes = new HashMap<>();
 
     private final AjaxDropDownChoicePanel<String> anyType;
@@ -65,7 +61,7 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
         final AjaxDropDownChoicePanel<String> resource = new AjaxDropDownChoicePanel<>(
                 "resource", getString("resource"), new PropertyModel<String>(schemaTO, "resource"), false).
                 setNullValid(false);
-        resource.setChoices(resourceRestClient.list().stream().map(EntityTO::getKey).collect(Collectors.toList()));
+        resource.setChoices(ResourceRestClient.list().stream().map(EntityTO::getKey).collect(Collectors.toList()));
         resource.setOutputMarkupId(true);
         resource.addRequiredLabel();
         if (resource.getModelObject() != null) {
@@ -132,7 +128,7 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
     private String getAdminRealm(final String connectorKey) {
         String adminRealm = null;
         try {
-            adminRealm = connectorRestClient.read(connectorKey).getAdminRealm();
+            adminRealm = ConnectorRestClient.read(connectorKey).getAdminRealm();
         } catch (Exception e) {
             LOG.error("Could not read Admin Realm for External Resource {}", selectedResource.getKey());
         }
@@ -143,7 +139,7 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
     private void populateAnyTypes(final String resourceKey) {
         anyTypes.clear();
         if (resourceKey != null) {
-            ResourceTO resource = resourceRestClient.read(resourceKey);
+            ResourceTO resource = ResourceRestClient.read(resourceKey);
             String adminRealm = getAdminRealm(resource.getConnector());
 
             if (SyncopeConsoleSession.get().owns(IdMEntitlement.RESOURCE_READ, adminRealm)) {
@@ -160,7 +156,7 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
         connInstanceTO.getConf().addAll(selectedResource.getConfOverride());
 
         Optional<ConnIdObjectClassTO> connIdObjectClass =
-                connectorRestClient.buildObjectClassInfo(connInstanceTO, false).stream().
+                ConnectorRestClient.buildObjectClassInfo(connInstanceTO, false).stream().
                         filter(object -> object.getType().equals(anyTypes.get(anyType.getModelObject()))).
                         findAny();
 
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
index d8f9065..2ebb777 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
@@ -69,12 +69,6 @@ public class ProvisioningPolicyModalPanel extends AbstractModalPanel<Provisionin
 
     private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
 
-    private final PolicyRestClient restClient = new PolicyRestClient();
-
-    private final ImplementationRestClient implRestClient = new ImplementationRestClient();
-
-    private final SchemaRestClient schemaRestClient = new SchemaRestClient();
-
     private final IModel<Map<String, ImplementationTO>> implementations;
 
     private final IModel<List<CorrelationRule>> model;
@@ -94,7 +88,7 @@ public class ProvisioningPolicyModalPanel extends AbstractModalPanel<Provisionin
 
             @Override
             protected Map<String, ImplementationTO> load() {
-                return implRestClient.list(policyTO instanceof PullPolicyTO
+                return ImplementationRestClient.list(policyTO instanceof PullPolicyTO
                         ? IdMImplementationType.PULL_CORRELATION_RULE
                         : IdMImplementationType.PUSH_CORRELATION_RULE).stream().
                         collect(Collectors.toMap(EntityTO::getKey, Function.identity()));
@@ -158,13 +152,14 @@ public class ProvisioningPolicyModalPanel extends AbstractModalPanel<Provisionin
 
                 if (rule.getImpl().getEngine() == ImplementationEngine.JAVA && rule.getDefaultRuleConf() != null) {
                     try {
-                        implRestClient.update(rule.getImpl());
+                        ImplementationRestClient.update(rule.getImpl());
                     } catch (Exception e) {
                         throw new RuntimeException(e);
                     }
                 }
             });
-            restClient.updatePolicy(getItem() instanceof PullPolicyTO ? PolicyType.PULL : PolicyType.PUSH, getItem());
+            PolicyRestClient.updatePolicy(getItem() instanceof PullPolicyTO
+                ? PolicyType.PULL : PolicyType.PUSH, getItem());
 
             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
             this.modal.close(target);
@@ -186,7 +181,7 @@ public class ProvisioningPolicyModalPanel extends AbstractModalPanel<Provisionin
             AjaxDropDownChoicePanel<String> anyType = new AjaxDropDownChoicePanel<>(
                     "anyType", "anyType", new PropertyModel<String>(correlationRule.getObject(), "anyType")).
                     setNullValid(true).
-                    setChoices(new AnyTypeRestClient().list());
+                    setChoices(AnyTypeRestClient.list());
             anyType.setNullValid(false);
             anyType.setRequired(true);
             anyType.setOutputMarkupId(true);
@@ -322,7 +317,7 @@ public class ProvisioningPolicyModalPanel extends AbstractModalPanel<Provisionin
         private List<String> getSchemas(final CorrelationRule rule) {
             List<String> choices = StringUtils.isEmpty(rule.getAnyType())
                     ? new ArrayList<>()
-                    : schemaRestClient.getSchemas(SchemaType.PLAIN,
+                    : SchemaRestClient.getSchemas(SchemaType.PLAIN,
                             rule.getAnyType().equals(AnyTypeKind.USER.name())
                             ? AnyTypeKind.USER
                             : rule.getAnyType().equals(AnyTypeKind.GROUP.name())
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
index 3d0e2e1..5940abd 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
@@ -29,7 +29,7 @@ public class ConnectorHistoryRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -1917949374689773018L;
 
-    public List<ConnInstanceHistoryConfTO> list(final String key) {
+    public static List<ConnInstanceHistoryConfTO> list(final String key) {
         List<ConnInstanceHistoryConfTO> connHistoryConfs = List.of();
         try {
             connHistoryConfs = getService(ConnectorHistoryService.class).list(key);
@@ -39,11 +39,11 @@ public class ConnectorHistoryRestClient extends BaseRestClient {
         return connHistoryConfs;
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(ConnectorHistoryService.class).delete(key);
     }
 
-    public void restore(final String key) {
+    public static void restore(final String key) {
         getService(ConnectorHistoryService.class).restore(key);
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
index 1975fd8..ff3f884 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
@@ -41,7 +41,7 @@ public class ConnectorRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -6870366819966266617L;
 
-    public List<ConnInstanceTO> getAllConnectors() {
+    public static List<ConnInstanceTO> getAllConnectors() {
         List<ConnInstanceTO> connectors = List.of();
         try {
             connectors = getService(ConnectorService.class).list(SyncopeConsoleSession.get().getLocale().toString());
@@ -51,7 +51,7 @@ public class ConnectorRestClient extends BaseRestClient {
         return connectors;
     }
 
-    public ConnInstanceTO create(final ConnInstanceTO connectorTO) {
+    public static ConnInstanceTO create(final ConnInstanceTO connectorTO) {
         List<ConnConfProperty> filteredConf = filterProperties(connectorTO.getConf());
         connectorTO.getConf().clear();
         connectorTO.getConf().addAll(filteredConf);
@@ -62,7 +62,7 @@ public class ConnectorRestClient extends BaseRestClient {
         return getObject(service, response.getLocation(), ConnInstanceTO.class);
     }
 
-    public List<String> getObjectClasses(final String connectorKey) {
+    public static List<String> getObjectClasses(final String connectorKey) {
         List<String> result = new ArrayList<>();
         try {
             ConnectorService service = getService(ConnectorService.class);
@@ -78,11 +78,11 @@ public class ConnectorRestClient extends BaseRestClient {
         return result;
     }
 
-    public List<String> getExtAttrNames(
-            final String adminRealm,
-            final String objectClass,
-            final String connectorKey,
-            final Collection<ConnConfProperty> conf) {
+    public static List<String> getExtAttrNames(
+        final String adminRealm,
+        final String objectClass,
+        final String connectorKey,
+        final Collection<ConnConfProperty> conf) {
 
         ConnInstanceTO connInstanceTO = new ConnInstanceTO();
         connInstanceTO.setAdminRealm(adminRealm);
@@ -103,7 +103,7 @@ public class ConnectorRestClient extends BaseRestClient {
      * @param key the id
      * @return ConnInstanceTO
      */
-    public ConnInstanceTO read(final String key) {
+    public static ConnInstanceTO read(final String key) {
         ConnInstanceTO connectorTO = null;
 
         try {
@@ -116,21 +116,21 @@ public class ConnectorRestClient extends BaseRestClient {
         return connectorTO;
     }
 
-    public void update(final ConnInstanceTO connectorTO) {
+    public static void update(final ConnInstanceTO connectorTO) {
         List<ConnConfProperty> filteredConf = filterProperties(connectorTO.getConf());
         connectorTO.getConf().clear();
         connectorTO.getConf().addAll(filteredConf);
         getService(ConnectorService.class).update(connectorTO);
     }
 
-    public ConnInstanceTO delete(final String key) {
+    public static ConnInstanceTO delete(final String key) {
         ConnInstanceTO connectorTO = getService(ConnectorService.class).
                 read(key, SyncopeConsoleSession.get().getLocale().toString());
         getService(ConnectorService.class).delete(key);
         return connectorTO;
     }
 
-    public List<ConnBundleTO> getAllBundles() {
+    public static List<ConnBundleTO> getAllBundles() {
         List<ConnBundleTO> bundles = List.of();
 
         try {
@@ -142,7 +142,7 @@ public class ConnectorRestClient extends BaseRestClient {
         return bundles;
     }
 
-    private List<ConnConfProperty> filterProperties(final Collection<ConnConfProperty> properties) {
+    private static List<ConnConfProperty> filterProperties(final Collection<ConnConfProperty> properties) {
         List<ConnConfProperty> newProperties = new ArrayList<>();
 
         properties.stream().map(property -> {
@@ -161,7 +161,7 @@ public class ConnectorRestClient extends BaseRestClient {
         return newProperties;
     }
 
-    public Pair<Boolean, String> check(final ConnInstanceTO connectorTO) {
+    public static Pair<Boolean, String> check(final ConnInstanceTO connectorTO) {
         ConnInstanceTO toBeChecked = new ConnInstanceTO();
         BeanUtils.copyProperties(connectorTO, toBeChecked, new String[] { "configuration", "configurationMap" });
         toBeChecked.getConf().addAll(filterProperties(connectorTO.getConf()));
@@ -179,8 +179,8 @@ public class ConnectorRestClient extends BaseRestClient {
         return Pair.of(check, errorMessage);
     }
 
-    public List<ConnIdObjectClassTO> buildObjectClassInfo(
-            final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
+    public static List<ConnIdObjectClassTO> buildObjectClassInfo(
+        final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
 
         List<ConnIdObjectClassTO> result = List.of();
         try {
@@ -192,7 +192,7 @@ public class ConnectorRestClient extends BaseRestClient {
         return result;
     }
 
-    public void reload() {
+    public static void reload() {
         getService(ConnectorService.class).reload();
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
index 16960de..7f43da4 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
@@ -28,24 +28,24 @@ public class ReconciliationRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -3161863874876938094L;
 
-    public ReconStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
+    public static ReconStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
         return getService(ReconciliationService.class).status(anyTypeKind, anyKey, resourceKey);
     }
 
-    public void push(
-            final AnyTypeKind anyTypeKind,
-            final String anyKey,
-            final String resourceKey,
-            final PushTaskTO pushTask) {
+    public static void push(
+        final AnyTypeKind anyTypeKind,
+        final String anyKey,
+        final String resourceKey,
+        final PushTaskTO pushTask) {
 
         getService(ReconciliationService.class).push(anyTypeKind, anyKey, resourceKey, pushTask);
     }
 
-    public void pull(
-            final AnyTypeKind anyTypeKind,
-            final String anyKey,
-            final String resourceKey,
-            final PullTaskTO pullTask) {
+    public static void pull(
+        final AnyTypeKind anyTypeKind,
+        final String anyKey,
+        final String resourceKey,
+        final PullTaskTO pullTask) {
 
         getService(ReconciliationService.class).pull(anyTypeKind, anyKey, resourceKey, pullTask);
     }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/RemediationRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/RemediationRestClient.java
index d2f2074..7f4aa0d 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/RemediationRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/RemediationRestClient.java
@@ -34,41 +34,41 @@ public class RemediationRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -7033745375669316378L;
 
-    public int countRemediations() {
+    public static int countRemediations() {
         return getService(RemediationService.class).
                 list(new RemediationQuery.Builder().page(1).size(1).build()).
                 getTotalCount();
     }
 
-    public List<RemediationTO> getRemediations(final int page, final int size, final SortParam<String> sort) {
+    public static List<RemediationTO> getRemediations(final int page, final int size, final SortParam<String> sort) {
         return getService(RemediationService.class).
                 list(new RemediationQuery.Builder().page(page).size(size).orderBy(toOrderBy(sort)).build()).
                 getResult();
     }
 
-    public RemediationTO getRemediation(final String key) {
+    public static RemediationTO getRemediation(final String key) {
         return getService(RemediationService.class).read(key);
     }
 
-    public <C extends AnyCR, A extends AnyTO> ProvisioningResult<A> remedy(final String key, final C anyCR) {
+    public static <C extends AnyCR, A extends AnyTO> ProvisioningResult<A> remedy(final String key, final C anyCR) {
         Response response = getService(RemediationService.class).remedy(key, anyCR);
         return response.readEntity(new GenericType<ProvisioningResult<A>>() {
         });
     }
 
-    public <T extends AnyTO> ProvisioningResult<T> remedy(final String key, final AnyUR anyUR) {
+    public static <T extends AnyTO> ProvisioningResult<T> remedy(final String key, final AnyUR anyUR) {
         Response response = getService(RemediationService.class).remedy(key, anyUR);
         return response.readEntity(new GenericType<ProvisioningResult<T>>() {
         });
     }
 
-    public ProvisioningResult<? extends AnyTO> remedy(final String key, final String anyKey) {
+    public static ProvisioningResult<? extends AnyTO> remedy(final String key, final String anyKey) {
         Response response = getService(RemediationService.class).remedy(key, anyKey);
         return response.readEntity(new GenericType<ProvisioningResult<? extends AnyTO>>() {
         });
     }
 
-    public void delete(final String remediation) {
+    public static void delete(final String remediation) {
         getService(RemediationService.class).delete(remediation);
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
index a840d9e..0439902 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
@@ -29,7 +29,7 @@ public class ResourceHistoryRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -5722829010510310887L;
 
-    public List<ResourceHistoryConfTO> list(final String key) {
+    public static List<ResourceHistoryConfTO> list(final String key) {
         List<ResourceHistoryConfTO> resHistoryConfs = List.of();
         try {
             resHistoryConfs = getService(ResourceHistoryService.class).list(key);
@@ -39,11 +39,11 @@ public class ResourceHistoryRestClient extends BaseRestClient {
         return resHistoryConfs;
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(ResourceHistoryService.class).delete(key);
     }
 
-    public void restore(final String key) {
+    public static void restore(final String key) {
         getService(ResourceHistoryService.class).restore(key);
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
index 927ab1f..9f7159d 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
@@ -38,7 +38,7 @@ public class ResourceRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -6898907679835668987L;
 
-    public Pair<Boolean, String> check(final ResourceTO resourceTO) {
+    public static Pair<Boolean, String> check(final ResourceTO resourceTO) {
         boolean check = false;
         String errorMessage = null;
         try {
@@ -52,16 +52,16 @@ public class ResourceRestClient extends BaseRestClient {
         return Pair.of(check, errorMessage);
     }
 
-    public ConnObjectTO readConnObject(final String resource, final String anyTypeKey, final String anyKey) {
+    public static ConnObjectTO readConnObject(final String resource, final String anyTypeKey, final String anyKey) {
         return getService(ResourceService.class).readConnObject(resource, anyTypeKey, anyKey);
     }
 
-    public Pair<String, List<ConnObjectTO>> listConnObjects(
-            final String resource,
-            final String anyTypeKey,
-            final int size,
-            final String pagedResultCookie,
-            final SortParam<String> sort) {
+    public static Pair<String, List<ConnObjectTO>> listConnObjects(
+        final String resource,
+        final String anyTypeKey,
+        final int size,
+        final String pagedResultCookie,
+        final SortParam<String> sort) {
 
         ConnObjectTOListQuery.Builder builder = new ConnObjectTOListQuery.Builder().
                 pagedResultsCookie(pagedResultCookie).
@@ -83,11 +83,11 @@ public class ResourceRestClient extends BaseRestClient {
         return Pair.of(nextPageResultCookie, result);
     }
 
-    public ResourceTO read(final String name) {
+    public static ResourceTO read(final String name) {
         return getService(ResourceService.class).read(name);
     }
 
-    public List<ResourceTO> list() {
+    public static List<ResourceTO> list() {
         List<ResourceTO> resources = List.of();
         try {
             resources = getService(ResourceService.class).list();
@@ -99,25 +99,25 @@ public class ResourceRestClient extends BaseRestClient {
         return resources;
     }
 
-    public ResourceTO create(final ResourceTO resourceTO) {
+    public static ResourceTO create(final ResourceTO resourceTO) {
         ResourceService service = getService(ResourceService.class);
         Response response = service.create(resourceTO);
         return getObject(service, response.getLocation(), ResourceTO.class);
     }
 
-    public void update(final ResourceTO resourceTO) {
+    public static void update(final ResourceTO resourceTO) {
         getService(ResourceService.class).update(resourceTO);
     }
 
-    public void delete(final String name) {
+    public static void delete(final String name) {
         getService(ResourceService.class).delete(name);
     }
 
-    public void setLatestSyncToken(final String key, final String anyType) {
+    public static void setLatestSyncToken(final String key, final String anyType) {
         getService(ResourceService.class).setLatestSyncToken(key, anyType);
     }
 
-    public void removeSyncToken(final String key, final String anyType) {
+    public static void removeSyncToken(final String key, final String anyType) {
         getService(ResourceService.class).removeSyncToken(key, anyType);
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
index 495ddd7..edb28b8 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
@@ -110,7 +110,7 @@ public class AnyStatusDirectoryPanel
             anyTypeKind = AnyTypeKind.ANY_OBJECT;
         }
 
-        resources = new ResourceRestClient().list().stream().
+        resources = ResourceRestClient.list().stream().
                 filter(resource -> resource.getProvision(anyTO.getType()).isPresent()).
                 map(EntityTO::getKey).collect(Collectors.toList());
 
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusUtils.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusUtils.java
index 18ce8e1..6f89e06 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusUtils.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusUtils.java
@@ -36,14 +36,12 @@ public final class ReconStatusUtils implements Serializable {
 
     private static final Logger LOG = LoggerFactory.getLogger(ReconStatusUtils.class);
 
-    private static final ReconciliationRestClient RECONCILIATION_REST_CLIENT = new ReconciliationRestClient();
-
     public static List<Pair<String, ReconStatus>> getReconStatuses(
             final AnyTypeKind anyTypeKind, final String anyKey, final Collection<String> resources) {
 
         return resources.stream().map(resource -> {
             try {
-                return Pair.of(resource, RECONCILIATION_REST_CLIENT.status(anyTypeKind, anyKey, resource));
+                return Pair.of(resource, ReconciliationRestClient.status(anyTypeKind, anyKey, resource));
             } catch (Exception e) {
                 LOG.warn("Unexpected error for {} {} on {}", anyTypeKind, anyKey, resource, e);
                 return null;
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
index 038421b..9d50891 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
@@ -56,17 +56,13 @@ public class ReconTaskPanel extends MultilevelPanel.SecondLevel {
 
     protected static final Logger LOG = LoggerFactory.getLogger(ReconTaskPanel.class);
 
-    private final ReconciliationRestClient restClient = new ReconciliationRestClient();
-
-    private final ImplementationRestClient implRestClient = new ImplementationRestClient();
-
     private final IModel<List<String>> pullActions = new LoadableDetachableModel<List<String>>() {
 
         private static final long serialVersionUID = 5275935387613157437L;
 
         @Override
         protected List<String> load() {
-            return implRestClient.list(IdMImplementationType.PULL_ACTIONS).stream().
+            return ImplementationRestClient.list(IdMImplementationType.PULL_ACTIONS).stream().
                     map(EntityTO::getKey).sorted().collect(Collectors.toList());
         }
     };
@@ -77,7 +73,7 @@ public class ReconTaskPanel extends MultilevelPanel.SecondLevel {
 
         @Override
         protected List<String> load() {
-            return implRestClient.list(IdMImplementationType.PUSH_ACTIONS).stream().
+            return ImplementationRestClient.list(IdMImplementationType.PUSH_ACTIONS).stream().
                     map(EntityTO::getKey).sorted().collect(Collectors.toList());
         }
     };
@@ -141,9 +137,11 @@ public class ReconTaskPanel extends MultilevelPanel.SecondLevel {
             protected void onSubmit(final AjaxRequestTarget target) {
                 try {
                     if (taskTO instanceof PushTaskTO) {
-                        restClient.push(anyTypeKind, anyKey, resource, (PushTaskTO) form.getModelObject());
+                        ReconciliationRestClient.push(anyTypeKind, anyKey, resource,
+                            (PushTaskTO) form.getModelObject());
                     } else {
-                        restClient.pull(anyTypeKind, anyKey, resource, (PullTaskTO) form.getModelObject());
+                        ReconciliationRestClient.pull(anyTypeKind, anyKey, resource,
+                            (PullTaskTO) form.getModelObject());
                     }
 
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
index 00884dc..27ca0f4 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
@@ -72,10 +72,6 @@ public class Topology extends BasePage {
 
     public static final String CONNECTOR_SERVER_LOCATION_PREFIX = "connid://";
 
-    private final ResourceRestClient resourceRestClient = new ResourceRestClient();
-
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
     private final int origX = 3100;
 
     private final int origY = 2800;
@@ -94,7 +90,7 @@ public class Topology extends BasePage {
 
         @Override
         protected List<ResourceTO> load() {
-            return resourceRestClient.list();
+            return ResourceRestClient.list();
         }
     };
 
@@ -107,7 +103,7 @@ public class Topology extends BasePage {
         protected Map<String, List<ConnInstanceTO>> load() {
             final Map<String, List<ConnInstanceTO>> res = new HashMap<>();
 
-            connectorRestClient.getAllConnectors().forEach(conn -> {
+            ConnectorRestClient.getAllConnectors().forEach(conn -> {
                 final List<ConnInstanceTO> conns;
                 if (res.containsKey(conn.getLocation())) {
                     conns = res.get(conn.getLocation());
@@ -526,7 +522,7 @@ public class Topology extends BasePage {
         newlyCreatedContainer.add(newlyCreated);
     }
 
-    private List<String> createConnections(final Map<Serializable, Map<Serializable, TopologyNode>> targets) {
+    private static List<String> createConnections(final Map<Serializable, Map<Serializable, TopologyNode>> targets) {
         List<String> list = new ArrayList<>();
 
         targets.forEach((key, value) -> value.forEach((label, node) -> list.add(
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java
index b674879..b5907de 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java
@@ -78,7 +78,7 @@ public class TopologyNodePanel extends Panel implements IAjaxIndicatorAware {
                 break;
             case CONNECTOR:
                 title = (StringUtils.isBlank(node.getConnectionDisplayName())
-                        ? "" : node.getConnectionDisplayName() + ":") + node.getDisplayName();
+                        ? "" : node.getConnectionDisplayName() + ':') + node.getDisplayName();
                 add(new AttributeAppender("class", "topology_conn", " "));
                 break;
             default:
@@ -121,7 +121,7 @@ public class TopologyNodePanel extends Panel implements IAjaxIndicatorAware {
             final AjaxRequestTarget target = updateEvent.getTarget();
 
             if (node.getKind() == Kind.CONNECTOR && key.equalsIgnoreCase(node.getKey())) {
-                ConnInstanceTO conn = new ConnectorRestClient().read(key);
+                ConnInstanceTO conn = ConnectorRestClient.read(key);
 
                 String displayName =
                         // [SYNCOPE-1233]
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index a936bb2..6732c06 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -70,10 +70,6 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
     private static final long serialVersionUID = -2025535531121434056L;
 
-    private final ResourceRestClient resourceRestClient = new ResourceRestClient();
-
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
     private final WebMarkupContainer container;
 
     protected final BaseModal<Serializable> propTaskModal;
@@ -187,7 +183,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 try {
-                    connectorRestClient.reload();
+                    ConnectorRestClient.reload();
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                 } catch (Exception e) {
                     LOG.error("While reloading all connectors", e);
@@ -266,7 +262,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 try {
-                    connectorRestClient.delete(String.class.cast(node.getKey()));
+                    ConnectorRestClient.delete(String.class.cast(node.getKey()));
                     target.appendJavaScript(String.format("jsPlumb.remove('%s');", node.getKey()));
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     toggle(target, false);
@@ -316,7 +312,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                ConnInstanceTO connInstance = connectorRestClient.read(String.class.cast(node.getKey()));
+                ConnInstanceTO connInstance = ConnectorRestClient.read(String.class.cast(node.getKey()));
 
                 final IModel<ConnInstanceTO> model = new CompoundPropertyModel<>(connInstance);
                 modal.setFormModel(model);
@@ -349,7 +345,7 @@ 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);
+                ConnInstanceTO connInstance = ConnectorRestClient.read(connKey);
 
                 target.add(historyModal.setContent(
                         new HistoryConfList<>(historyModal, connKey, pageRef, connInstance)));
@@ -382,7 +378,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 try {
-                    resourceRestClient.delete(node.getKey());
+                    ResourceRestClient.delete(node.getKey());
                     target.appendJavaScript(String.format("jsPlumb.remove('%s');", node.getKey()));
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     toggle(target, false);
@@ -403,8 +399,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                ResourceTO resource = resourceRestClient.read(node.getKey());
-                ConnInstanceTO connInstance = connectorRestClient.read(resource.getConnector());
+                ResourceTO resource = ResourceRestClient.read(node.getKey());
+                ConnInstanceTO connInstance = ConnectorRestClient.read(resource.getConnector());
 
                 IModel<ResourceTO> model = new CompoundPropertyModel<>(resource);
                 modal.setFormModel(model);
@@ -435,7 +431,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                ResourceTO modelObject = resourceRestClient.read(node.getKey());
+                ResourceTO modelObject = ResourceRestClient.read(node.getKey());
                 target.add(propTaskModal.setContent(
                         new ResourceStatusModal(propTaskModal, pageRef, modelObject)));
                 propTaskModal.header(
@@ -458,8 +454,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                ResourceTO resource = resourceRestClient.read(node.getKey());
-                ConnInstanceTO connInstance = connectorRestClient.read(resource.getConnector());
+                ResourceTO resource = ResourceRestClient.read(node.getKey());
+                ConnInstanceTO connInstance = ConnectorRestClient.read(resource.getConnector());
 
                 if (SyncopeConsoleSession.get().
                         owns(IdMEntitlement.RESOURCE_UPDATE, connInstance.getAdminRealm())) {
@@ -494,7 +490,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                ResourceTO resource = resourceRestClient.read(node.getKey());
+                ResourceTO resource = ResourceRestClient.read(node.getKey());
 
                 target.add(propTaskModal.setContent(new ConnObjects(resource, pageRef)));
                 propTaskModal.header(new StringResourceModel("resource.explore.list", Model.of(node)));
@@ -580,7 +576,7 @@ 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()));
+                final ResourceTO modelObject = ResourceRestClient.read(String.class.cast(node.getKey()));
 
                 target.add(historyModal.setContent(
                         new HistoryConfList<>(historyModal, resourceKey, pageRef, modelObject)));
@@ -608,7 +604,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 try {
-                    ResourceTO resource = resourceRestClient.read(node.getKey());
+                    ResourceTO resource = ResourceRestClient.read(node.getKey());
                     resource.setKey("Copy of " + resource.getKey());
                     // reset some resource objects keys
                     if (resource.getOrgUnit() != null) {
@@ -627,7 +623,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
                         }
                         provision.getVirSchemas().clear();
                     }
-                    resourceRestClient.create(resource);
+                    ResourceRestClient.create(resource);
 
                     // refresh Topology
                     send(pageRef.getPage(), Broadcast.DEPTH, new AbstractResourceWizardBuilder.CreateEvent(
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
index d35ffd7..5b3f99a 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
@@ -73,10 +73,6 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
 
     private final Set<String> runningConnCheck = Collections.synchronizedSet(new HashSet<>());
 
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
-    private final ResourceRestClient resourceRestClient = new ResourceRestClient();
-
     public TopologyWebSocketBehavior() {
         // Handling with timeout as per SYNCOPE-1379
         try {
@@ -290,9 +286,9 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
             ThreadContext.setSession(session);
 
             try {
-                final ConnInstanceTO connector = connectorRestClient.read(key);
+                final ConnInstanceTO connector = ConnectorRestClient.read(key);
                 return String.format("{ \"status\": \"%s\", \"target\": \"%s\"}",
-                        connectorRestClient.check(connector).getLeft()
+                        ConnectorRestClient.check(connector).getLeft()
                         ? TopologyNode.Status.REACHABLE : TopologyNode.Status.UNREACHABLE, key);
             } catch (Exception e) {
                 LOG.warn("Error checking connection for {}", key, e);
@@ -316,9 +312,9 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
             ThreadContext.setSession(session);
 
             try {
-                final ResourceTO resource = resourceRestClient.read(key);
+                final ResourceTO resource = ResourceRestClient.read(key);
                 return String.format("{ \"status\": \"%s\", \"target\": \"%s\"}",
-                        resourceRestClient.check(resource).getLeft()
+                        ResourceRestClient.check(resource).getLeft()
                         ? TopologyNode.Status.REACHABLE : TopologyNode.Status.UNREACHABLE, key);
             } catch (Exception e) {
                 LOG.warn("Error checking connection for {}", key, e);
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
index 276a92b..bafd73d 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/ConnConfPropertyListView.java
@@ -141,11 +141,11 @@ public class ConnConfPropertyListView extends ListView<ConnConfProperty> {
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    private void setNewFieldModel(final FieldPanel field, final List<Object> values) {
+    private static void setNewFieldModel(final FieldPanel field, final List<Object> values) {
         field.setNewModel(values);
     }
 
-    private FormComponent<?> addCheckboxToggle(final ConnConfProperty property) {
+    private static FormComponent<?> addCheckboxToggle(final ConnConfProperty property) {
         final BootstrapToggleConfig config = new BootstrapToggleConfig().
                 withOnStyle(BootstrapToggleConfig.Style.success).
                 withOffStyle(BootstrapToggleConfig.Style.danger).
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/widgets/RemediationsWidget.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/widgets/RemediationsWidget.java
index 0475b69..c471e99 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/widgets/RemediationsWidget.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/widgets/RemediationsWidget.java
@@ -46,8 +46,6 @@ public class RemediationsWidget extends ExtAlertWidget<RemediationTO> {
 
     private static final long serialVersionUID = 1817429725840355068L;
 
-    private final RemediationRestClient restClient = new RemediationRestClient();
-
     private final List<RemediationTO> lastRemediations = new ArrayList<>();
 
     public RemediationsWidget(final String id, final PageReference pageRef) {
@@ -88,7 +86,7 @@ public class RemediationsWidget extends ExtAlertWidget<RemediationTO> {
     protected int getLatestAlertsSize() {
         return SyncopeConsoleSession.get().owns(IdMEntitlement.REMEDIATION_LIST)
                 && SyncopeConsoleSession.get().owns(IdMEntitlement.REMEDIATION_READ)
-                ? restClient.countRemediations()
+                ? RemediationRestClient.countRemediations()
                 : 0;
     }
 
@@ -104,7 +102,8 @@ public class RemediationsWidget extends ExtAlertWidget<RemediationTO> {
                 if (SyncopeConsoleSession.get().owns(IdMEntitlement.REMEDIATION_LIST)
                         && SyncopeConsoleSession.get().owns(IdMEntitlement.REMEDIATION_READ)) {
 
-                    updatedRemediations = restClient.getRemediations(1, MAX_SIZE, new SortParam<>("instant", true));
+                    updatedRemediations = RemediationRestClient.getRemediations(1,
+                        MAX_SIZE, new SortParam<>("instant", true));
                 } else {
                     updatedRemediations = List.of();
                 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractMappingPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractMappingPanel.java
index 7aa7fc8..d54982f 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractMappingPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractMappingPanel.java
@@ -27,7 +27,6 @@ import java.util.List;
 import org.apache.syncope.client.console.commons.ConnIdSpecialName;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
-import org.apache.syncope.client.console.rest.AnyTypeRestClient;
 import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
@@ -56,11 +55,6 @@ public abstract class AbstractMappingPanel extends Panel {
     private static final long serialVersionUID = -8295587900937040104L;
 
     /**
-     * Any type rest client.
-     */
-    protected final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
-    /**
      * Any type class rest client.
      */
     protected final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient();
@@ -395,7 +389,7 @@ public abstract class AbstractMappingPanel extends Panel {
      * @param connObjectKey connObjectKey checkbox.
      * @param password password checkbox.
      */
-    private void setConnObjectKey(final AjaxCheckBoxPanel connObjectKey, final AjaxCheckBoxPanel password) {
+    private static void setConnObjectKey(final AjaxCheckBoxPanel connObjectKey, final AjaxCheckBoxPanel password) {
         if (password.getModelObject()) {
             connObjectKey.setReadOnly(true);
             connObjectKey.setModelObject(false);
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
index abe1230..659296f 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
@@ -55,7 +55,7 @@ public class ConnectorDetailsPanel extends WizardStep {
 
             @Override
             protected List<String> load() {
-                return new RealmRestClient().list().stream().
+                return RealmRestClient.list().stream().
                         filter(realm -> authRealms.stream().
                         anyMatch(authRealm -> realm.getFullPath().startsWith(authRealm))).
                         map(RealmTO::getFullPath).
@@ -160,7 +160,7 @@ public class ConnectorDetailsPanel extends WizardStep {
                 new PropertyModel<Long>(connInstanceTO.getPoolConf(), "minEvictableIdleTimeMillis")));
     }
 
-    private List<String> getVersions(final ConnInstanceTO connInstanceTO, final List<ConnBundleTO> bundles) {
+    private static List<String> getVersions(final ConnInstanceTO connInstanceTO, final List<ConnBundleTO> bundles) {
         return bundles.stream().filter(object
                 -> object.getLocation().equals(connInstanceTO.getLocation())
                 && object.getBundleName().equals(connInstanceTO.getBundleName())).
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
index 1e812e5..7a5ae9c 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
@@ -41,13 +41,11 @@ public class ConnectorWizardBuilder extends AbstractResourceWizardBuilder<ConnIn
 
     private static final long serialVersionUID = -2025535531121434050L;
 
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
     private final List<ConnBundleTO> bundles;
 
     public ConnectorWizardBuilder(final ConnInstanceTO defaultItem, final PageReference pageRef) {
         super(defaultItem, pageRef);
-        this.bundles = connectorRestClient.getAllBundles().stream().
+        this.bundles = ConnectorRestClient.getAllBundles().stream().
                 filter(object -> object.getLocation().equals(defaultItem.getLocation())).collect(Collectors.toList());
     }
 
@@ -68,7 +66,7 @@ public class ConnectorWizardBuilder extends AbstractResourceWizardBuilder<ConnIn
                 connInstanceTO.setBundleName(bundleTO.getBundleName());
                 connInstanceTO.setVersion(bundleTO.getVersion());
 
-                return connectorRestClient.check(connInstanceTO);
+                return ConnectorRestClient.check(connInstanceTO);
             }
 
             @Override
@@ -103,9 +101,9 @@ public class ConnectorWizardBuilder extends AbstractResourceWizardBuilder<ConnIn
 
         ConnInstanceTO res;
         if (mode == AjaxWizard.Mode.CREATE) {
-            res = connectorRestClient.create(connInstanceTO);
+            res = ConnectorRestClient.create(connInstanceTO);
         } else {
-            connectorRestClient.update(connInstanceTO);
+            ConnectorRestClient.update(connInstanceTO);
             res = connInstanceTO;
         }
 
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ItemTransformersTogglePanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ItemTransformersTogglePanel.java
index 0ba22c9..49274aa 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ItemTransformersTogglePanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ItemTransformersTogglePanel.java
@@ -42,8 +42,6 @@ public class ItemTransformersTogglePanel extends TogglePanel<Serializable> {
 
     private static final long serialVersionUID = -3195479265440591519L;
 
-    private final ImplementationRestClient implRestClient = new ImplementationRestClient();
-
     private ItemTO item;
 
     public ItemTransformersTogglePanel(final WebMarkupContainer container, final PageReference pageRef) {
@@ -65,7 +63,7 @@ public class ItemTransformersTogglePanel extends TogglePanel<Serializable> {
         Form<?> form = new Form<>("form");
         addInnerObject(form);
 
-        List<String> choices = implRestClient.list(IdMImplementationType.ITEM_TRANSFORMER).stream().
+        List<String> choices = ImplementationRestClient.list(IdMImplementationType.ITEM_TRANSFORMER).stream().
                 map(EntityTO::getKey).sorted().collect(Collectors.toList());
 
         form.add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).setRenderer(new IChoiceRenderer<String>() {
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
index 866d82c..41afe27 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
@@ -49,8 +49,6 @@ public class ProvisionWizardBuilder extends BaseAjaxWizardBuilder<ResourceProvis
 
     private static final long serialVersionUID = 3739399543837732640L;
 
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
     private final ResourceTO resourceTO;
 
     private final String adminRealm;
@@ -75,7 +73,7 @@ public class ProvisionWizardBuilder extends BaseAjaxWizardBuilder<ResourceProvis
             clazz = new AjaxTextFieldPanel(
                     "clazz", "clazz", new PropertyModel<>(resourceProvision, "objectClass"));
             clazz.setRequired(true);
-            clazz.setChoices(connectorRestClient.getObjectClasses(resourceTO.getConnector()));
+            clazz.setChoices(ConnectorRestClient.getObjectClasses(resourceTO.getConnector()));
             container.add(clazz);
 
             AjaxCheckBoxPanel ignoreCaseMatch = new AjaxCheckBoxPanel(
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
index f7de8f9..55bc92a 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
@@ -33,8 +33,6 @@ public abstract class ResourceConnConfPanel extends AbstractConnConfPanel<Resour
 
     private static final long serialVersionUID = -7982691107029848579L;
 
-    private final ConnectorRestClient restClient = new ConnectorRestClient();
-
     private final boolean createFlag;
 
     public ResourceConnConfPanel(final ResourceTO resourceTO, final boolean createFlag) {
@@ -91,7 +89,7 @@ public abstract class ResourceConnConfPanel extends AbstractConnConfPanel<Resour
         List<ConnConfProperty> props = new ArrayList<>();
 
         if (resourceTO.getConnector() != null) {
-            restClient.read(resourceTO.getConnector()).getConf().stream().
+            ConnectorRestClient.read(resourceTO.getConnector()).getConf().stream().
                     filter(ConnConfProperty::isOverridable).
                     forEachOrdered(props::add);
         }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
index 6d2d686..d4f08c2 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
@@ -44,15 +44,13 @@ public class ResourceDetailsPanel extends WizardStep {
 
     private static final long serialVersionUID = -7982691107029848579L;
 
-    private final ImplementationRestClient implRestClient = new ImplementationRestClient();
-
     private final IModel<List<String>> propagationActions = new LoadableDetachableModel<List<String>>() {
 
         private static final long serialVersionUID = 5275935387613157437L;
 
         @Override
         protected List<String> load() {
-            return implRestClient.list(IdMImplementationType.PROPAGATION_ACTIONS).stream().
+            return ImplementationRestClient.list(IdMImplementationType.PROPAGATION_ACTIONS).stream().
                     map(EntityTO::getKey).sorted().collect(Collectors.toList());
         }
     };
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
index 123eedb..444b1b5 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
@@ -24,6 +24,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
+import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -91,7 +93,7 @@ public class ResourceMappingPanel extends AbstractMappingPanel {
 
             @Override
             protected List<String> load() {
-                return new ConnectorRestClient().getExtAttrNames(
+                return ConnectorRestClient.getExtAttrNames(
                         adminRealm,
                         provision.getObjectClass(),
                         resourceTO.getConnector(),
@@ -129,7 +131,7 @@ public class ResourceMappingPanel extends AbstractMappingPanel {
         } else {
             AnyTypeTO anyType = null;
             try {
-                anyType = anyTypeRestClient.read(provision.getAnyType());
+                anyType = AnyTypeRestClient.read(provision.getAnyType());
             } catch (Exception e) {
                 LOG.error("Could not read AnyType {}", provision.getAnyType(), e);
             }
@@ -137,14 +139,14 @@ public class ResourceMappingPanel extends AbstractMappingPanel {
             List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<>();
             if (anyType != null) {
                 try {
-                    anyTypeClassTOs.addAll(anyTypeClassRestClient.list(anyType.getClasses()));
+                    anyTypeClassTOs.addAll(AnyTypeClassRestClient.list(anyType.getClasses()));
                 } catch (Exception e) {
                     LOG.error("Could not read AnyType classes for {}", anyType.getClasses(), e);
                 }
             }
             provision.getAuxClasses().forEach(auxClass -> {
                 try {
-                    anyTypeClassTOs.add(anyTypeClassRestClient.read(auxClass));
+                    anyTypeClassTOs.add(AnyTypeClassRestClient.read(auxClass));
                 } catch (Exception e) {
                     LOG.error("Could not read AnyTypeClass for {}", auxClass, e);
                 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
index 2fe458d..f3ce952 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
@@ -56,8 +56,6 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
 
     private static final long serialVersionUID = -7982691107029848579L;
 
-    private final ResourceRestClient resourceRestClient = new ResourceRestClient();
-
     private final ResourceTO resourceTO;
 
     private final List<ResourceProvision> provisions;
@@ -174,7 +172,7 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final ResourceProvision provision) {
                         try {
-                            resourceRestClient.setLatestSyncToken(resourceTO.getKey(), provision.getAnyType());
+                            ResourceRestClient.setLatestSyncToken(resourceTO.getKey(), provision.getAnyType());
                             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                         } catch (Exception e) {
                             LOG.error("While setting latest sync token for {}/{}",
@@ -192,7 +190,7 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final ResourceProvision provision) {
                         try {
-                            resourceRestClient.removeSyncToken(resourceTO.getKey(), provision.getAnyType());
+                            ResourceRestClient.removeSyncToken(resourceTO.getKey(), provision.getAnyType());
                             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                         } catch (Exception e) {
                             LOG.error("While removing sync token for {}/{}",
@@ -291,7 +289,7 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
                         }
                     });
 
-            resourceRestClient.update(resourceTO);
+            ResourceRestClient.update(resourceTO);
             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
             modal.close(target);
         } catch (Exception e) {
@@ -314,7 +312,7 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
 
             @Override
             protected List<String> load() {
-                List<String> anyTypes = new AnyTypeRestClient().list().stream().
+                List<String> anyTypes = AnyTypeRestClient.list().stream().
                         filter(anyType -> resourceTO.getProvision(anyType).isEmpty()).
                         collect(Collectors.toList());
                 if (resourceTO.getOrgUnit() == null) {
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
index d8793c3..92420b9 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
@@ -39,15 +39,13 @@ public class ResourceSecurityPanel extends WizardStep {
 
     private static final long serialVersionUID = -7982691107029848579L;
 
-    private final PolicyRestClient policyRestClient = new PolicyRestClient();
-
     private final IModel<Map<String, String>> passwordPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = 5275935387613157437L;
 
         @Override
         protected Map<String, String> load() {
-            return policyRestClient.getPolicies(PolicyType.PASSWORD).stream().
+            return PolicyRestClient.getPolicies(PolicyType.PASSWORD).stream().
                     collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getDescription));
         }
     };
@@ -58,7 +56,7 @@ public class ResourceSecurityPanel extends WizardStep {
 
         @Override
         protected Map<String, String> load() {
-            return policyRestClient.getPolicies(PolicyType.ACCOUNT).stream().
+            return PolicyRestClient.getPolicies(PolicyType.ACCOUNT).stream().
                     collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getDescription));
         }
     };
@@ -69,7 +67,7 @@ public class ResourceSecurityPanel extends WizardStep {
 
         @Override
         protected Map<String, String> load() {
-            return policyRestClient.getPolicies(PolicyType.PULL).stream().
+            return PolicyRestClient.getPolicies(PolicyType.PULL).stream().
                     collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getDescription));
         }
     };
@@ -80,7 +78,7 @@ public class ResourceSecurityPanel extends WizardStep {
 
         @Override
         protected Map<String, String> load() {
-            return policyRestClient.getPolicies(PolicyType.PUSH).stream().
+            return PolicyRestClient.getPolicies(PolicyType.PUSH).stream().
                     collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getDescription));
         }
     };
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
index fff254a..d8c9198 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
@@ -37,10 +37,6 @@ public class ResourceWizardBuilder extends AbstractResourceWizardBuilder<Resourc
 
     private static final long serialVersionUID = 1734415311027284221L;
 
-    private final ResourceRestClient resourceRestClient = new ResourceRestClient();
-
-    private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
-
     private boolean createFlag;
 
     public ResourceWizardBuilder(final ResourceTO resourceTO, final PageReference pageRef) {
@@ -63,7 +59,7 @@ public class ResourceWizardBuilder extends AbstractResourceWizardBuilder<Resourc
 
             @Override
             protected Pair<Boolean, String> check(final AjaxRequestTarget target) {
-                return resourceRestClient.check(modelObject);
+                return ResourceRestClient.check(modelObject);
             }
 
             @Override
@@ -73,7 +69,7 @@ public class ResourceWizardBuilder extends AbstractResourceWizardBuilder<Resourc
 
         });
         wizardModel.add(new ResourceConnCapabilitiesPanel(
-                resourceTO, connectorRestClient.read(resourceTO.getConnector()).getCapabilities()));
+                resourceTO, ConnectorRestClient.read(resourceTO.getConnector()).getCapabilities()));
 
         wizardModel.add(new ResourceSecurityPanel(resourceTO));
         return wizardModel;
@@ -83,9 +79,9 @@ public class ResourceWizardBuilder extends AbstractResourceWizardBuilder<Resourc
     protected ResourceTO onApplyInternal(final Serializable modelObject) {
         ResourceTO resourceTO = ResourceTO.class.cast(modelObject);
         if (createFlag) {
-            resourceTO = resourceRestClient.create(resourceTO);
+            resourceTO = ResourceRestClient.create(resourceTO);
         } else {
-            resourceRestClient.update(resourceTO);
+            ResourceRestClient.update(resourceTO);
         }
         return resourceTO;
     }
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/SyncopeUIRequestCycleListener.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/SyncopeUIRequestCycleListener.java
index 2197063..7b14cfc 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/SyncopeUIRequestCycleListener.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/SyncopeUIRequestCycleListener.java
@@ -48,7 +48,7 @@ public abstract class SyncopeUIRequestCycleListener implements IRequestCycleList
 
     private static final String REST = "Error while contacting Syncope core";
 
-    private Throwable instanceOf(final Exception e, final Class<? extends Exception> clazz) {
+    private static Throwable instanceOf(final Exception e, final Class<? extends Exception> clazz) {
         return clazz.isAssignableFrom(e.getClass())
                 ? e
                 : e.getCause() != null && clazz.isAssignableFrom(e.getCause().getClass())
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPaletteConf.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPaletteConf.java
index c9771d1..40a1cd9 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPaletteConf.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPaletteConf.java
@@ -23,13 +23,15 @@ import java.io.Serializable;
 /**
  * To be overridden in order to change the default filter option.
  */
-public class AjaxPaletteConf implements Serializable {
+public final class AjaxPaletteConf implements Serializable {
 
     private static final long serialVersionUID = -1;
 
     private static final String DEFAULT_FILTER = "*";
 
-    public String getDefaultFilter() {
+    private AjaxPaletteConf() {
+    }
+    public static String getDefaultFilter() {
         return DEFAULT_FILTER;
     }
 }
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
index 46dab17..5af8052 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
@@ -213,9 +213,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
         private boolean filtered;
 
-        private final AjaxPaletteConf conf = new AjaxPaletteConf();
-
-        private String filter = conf.getDefaultFilter();
+        private String filter = AjaxPaletteConf.getDefaultFilter();
 
         private String name;
 
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/AjaxWizardBuilder.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/AjaxWizardBuilder.java
index e80ae84..3aecf67 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/AjaxWizardBuilder.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/AjaxWizardBuilder.java
@@ -169,7 +169,8 @@ public abstract class AjaxWizardBuilder<T extends Serializable> extends Abstract
      * @param target ajax request target
      * @return payload to be sent.
      */
-    protected Serializable getEditCustomPayloadEvent(final Serializable afterObject, final AjaxRequestTarget target) {
+    protected static Serializable getEditCustomPayloadEvent(final Serializable afterObject,
+                                                            final AjaxRequestTarget target) {
         return null;
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
index cb53054..3eca648 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
@@ -62,17 +62,17 @@ public class PreferenceManager implements Serializable {
         COOKIE_UTILS = new CookieUtils(cookieDefaults);
     }
 
-    public List<Integer> getPaginatorChoices() {
+    public static List<Integer> getPaginatorChoices() {
         return PAGINATOR_CHOICES;
     }
 
-    private Map<String, String> getPrefs(final String value) {
+    private static Map<String, String> getPrefs(final String value) {
         Map<String, String> prefs;
         try {
             if (StringUtils.isNotBlank(value)) {
                 prefs = MAPPER.readValue(value, MAP_TYPE_REF);
             } else {
-                throw new Exception("Invalid cookie value '" + value + "'");
+                throw new Exception("Invalid cookie value '" + value + '\'');
             }
         } catch (Exception e) {
             LOG.debug("No preferences found", e);
@@ -82,14 +82,14 @@ public class PreferenceManager implements Serializable {
         return prefs;
     }
 
-    private String setPrefs(final Map<String, String> prefs) throws IOException {
+    private static String setPrefs(final Map<String, String> prefs) throws IOException {
         StringWriter writer = new StringWriter();
         MAPPER.writeValue(writer, prefs);
 
         return writer.toString();
     }
 
-    public String get(final Request request, final String key) {
+    public static String get(final Request request, final String key) {
         String result = null;
 
         String prefString = COOKIE_UTILS.load(COOKIE_NAME);
@@ -101,7 +101,7 @@ public class PreferenceManager implements Serializable {
         return result;
     }
 
-    public Integer getPaginatorRows(final Request request, final String key) {
+    public static Integer getPaginatorRows(final Request request, final String key) {
         Integer result = getPaginatorChoices().get(0);
 
         String value = get(request, key);
@@ -112,7 +112,7 @@ public class PreferenceManager implements Serializable {
         return result;
     }
 
-    public List<String> getList(final Request request, final String key) {
+    public static List<String> getList(final Request request, final String key) {
         final List<String> result = new ArrayList<>();
 
         final String compound = get(request, key);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/chartjs/ChartJSPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/chartjs/ChartJSPanel.java
index a06c6c3..e751a16 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/chartjs/ChartJSPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/chartjs/ChartJSPanel.java
@@ -75,6 +75,6 @@ public class ChartJSPanel extends Panel {
         }
 
         return "var " + container.getMarkupId() + " = WicketCharts['" + container.getMarkupId() + "']."
-                + model.getObject().getClass().getSimpleName() + "(" + dataString + ", " + optionString + ");";
+                + model.getObject().getClass().getSimpleName() + '(' + dataString + ", " + optionString + ");";
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
index a01e647..2ed938d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
@@ -40,8 +40,6 @@ public class IdRepoImplementationInfoProvider implements ImplementationInfoProvi
 
     protected final ClassPathScanImplementationLookup lookup;
 
-    protected final ImplementationRestClient implRestClient = new ImplementationRestClient();
-
     public IdRepoImplementationInfoProvider(final ClassPathScanImplementationLookup lookup) {
         this.lookup = lookup;
     }
@@ -159,7 +157,7 @@ public class IdRepoImplementationInfoProvider implements ImplementationInfoProvi
 
             @Override
             protected List<String> load() {
-                return implRestClient.list(IdRepoImplementationType.TASKJOB_DELEGATE).stream().
+                return ImplementationRestClient.list(IdRepoImplementationType.TASKJOB_DELEGATE).stream().
                         map(EntityTO::getKey).sorted().collect(Collectors.toList());
             }
         };
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
index 791a34e..20bb2bb 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
@@ -32,7 +32,7 @@ public class PreviewUtils {
     @Autowired
     private ClassPathScanImplementationLookup lookup;
 
-    public AbstractBinaryPreviewer getDefaultPreviewer(final String mimeType) {
+    public static AbstractBinaryPreviewer getDefaultPreviewer(final String mimeType) {
         return new DefaultPreviewer("previewer", mimeType);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventCategoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventCategoryPanel.java
index 3dcab7c..9904684 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventCategoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventCategoryPanel.java
@@ -258,7 +258,7 @@ public abstract class EventCategoryPanel extends Panel {
         });
     }
 
-    private List<String> filter(final List<EventCategory> eventCategoryTOs, final EventCategoryType type) {
+    private static List<String> filter(final List<EventCategory> eventCategoryTOs, final EventCategoryType type) {
         Set<String> res = new HashSet<>();
 
         eventCategoryTOs.stream().filter(eventCategory
@@ -270,8 +270,8 @@ public abstract class EventCategoryPanel extends Panel {
         return filtered;
     }
 
-    private List<String> filter(
-            final List<EventCategory> eventCategoryTOs, final EventCategoryType type, final String category) {
+    private static List<String> filter(
+        final List<EventCategory> eventCategoryTOs, final EventCategoryType type, final String category) {
 
         Set<String> res = new HashSet<>();
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventSelectionPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventSelectionPanel.java
index 916b97d..8518e86 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventSelectionPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventSelectionPanel.java
@@ -184,7 +184,7 @@ public abstract class EventSelectionPanel extends Panel {
         failureGroup.add(failureView);
     }
 
-    private List<String> getEvents(final EventCategory eventCategoryTO) {
+    private static List<String> getEvents(final EventCategory eventCategoryTO) {
         final List<String> res;
 
         res = eventCategoryTO.getEvents();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
index 5f250a7..8decb9b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
@@ -153,7 +153,7 @@ public class ClassPathScanImplementationLookup {
      *
      * @return basePackage for classpath scanning
      */
-    protected String getBasePackage() {
+    protected static String getBasePackage() {
         return DEFAULT_BASE_PACKAGE;
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/ConsoleLayoutInfo.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/ConsoleLayoutInfo.java
index c82eccd..883dc42 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/ConsoleLayoutInfo.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/ConsoleLayoutInfo.java
@@ -42,6 +42,6 @@ public class ConsoleLayoutInfo implements Serializable {
     }
 
     public void setContent(final String content) {
-        this.content = FormLayoutInfoUtils.defaultConsoleLayoutInfoIfEmpty(content, new AnyTypeRestClient().list());
+        this.content = FormLayoutInfoUtils.defaultConsoleLayoutInfoIfEmpty(content, AnyTypeRestClient.list());
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/FormLayoutInfoUtils.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/FormLayoutInfoUtils.java
index b3caa6c..c34c901 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/FormLayoutInfoUtils.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/FormLayoutInfoUtils.java
@@ -43,8 +43,6 @@ import org.apache.wicket.PageReference;
  */
 public final class FormLayoutInfoUtils {
 
-    private static final RoleRestClient ROLE_REST_CLIENT = new RoleRestClient();
-
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
     public static Triple<UserFormLayoutInfo, GroupFormLayoutInfo, Map<String, AnyObjectFormLayoutInfo>> fetch(
@@ -54,7 +52,7 @@ public final class FormLayoutInfoUtils {
         try {
             JsonNode tree = null;
             for (int i = 0; i < ownedRoles.size() && tree == null; i++) {
-                String consoleLayoutInfo = ROLE_REST_CLIENT.readConsoleLayoutInfo(ownedRoles.get(i));
+                String consoleLayoutInfo = RoleRestClient.readConsoleLayoutInfo(ownedRoles.get(i));
                 if (StringUtils.isNotBlank(consoleLayoutInfo)) {
                     tree = MAPPER.readTree(consoleLayoutInfo);
                 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
index ea4b64c..1d97526 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
@@ -111,7 +111,8 @@ public class NotificationDirectoryPanel
             public void onClick(final AjaxRequestTarget target, final NotificationTO ignore) {
                 send(NotificationDirectoryPanel.this, Broadcast.EXACT,
                         new AjaxWizard.EditItemActionEvent<>(
-                                new NotificationWrapper(restClient.read(model.getObject().getKey())), target));
+                                new NotificationWrapper(
+                                    NotificationRestClient.read(model.getObject().getKey())), target));
             }
         }, ActionLink.ActionType.EDIT, IdRepoEntitlement.NOTIFICATION_UPDATE);
 
@@ -136,7 +137,7 @@ public class NotificationDirectoryPanel
             @Override
             public void onClick(final AjaxRequestTarget target, final NotificationTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    NotificationRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -181,14 +182,14 @@ public class NotificationDirectoryPanel
 
         @Override
         public Iterator<NotificationTO> iterator(final long first, final long count) {
-            List<NotificationTO> list = restClient.list();
+            List<NotificationTO> list = NotificationRestClient.list();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return NotificationRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
index f3e038f..3c86a17 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
@@ -77,14 +77,6 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
 
     private final NotificationRestClient restClient = new NotificationRestClient();
 
-    private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
-    private final SchemaRestClient schemaRestClient = new SchemaRestClient();
-
-    private final LoggerRestClient loggerRestClient = new LoggerRestClient();
-
-    private final ImplementationRestClient implRestClient = new ImplementationRestClient();
-
     /**
      * Construct.
      *
@@ -102,9 +94,9 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
 
         final boolean createFlag = modelObject.getInnerObject().getKey() == null;
         if (createFlag) {
-            restClient.create(modelObject.getInnerObject());
+            NotificationRestClient.create(modelObject.getInnerObject());
         } else {
-            restClient.update(modelObject.getInnerObject());
+            NotificationRestClient.update(modelObject.getInnerObject());
         }
 
         return null;
@@ -173,7 +165,7 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
 
             add(new EventCategoryPanel(
                     "eventSelection",
-                    loggerRestClient.listEvents(),
+                    LoggerRestClient.listEvents(),
                     new PropertyModel<List<String>>(modelObject.getInnerObject(), "events")) {
 
                 private static final long serialVersionUID = 6429053774964787735L;
@@ -216,7 +208,7 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
                         }
 
                     });
-            type.setChoices(new AnyTypeRestClient().list());
+            type.setChoices(AnyTypeRestClient.list());
             type.addRequiredLabel();
             add(type);
 
@@ -341,7 +333,7 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
 
             @Override
             protected List<String> load() {
-                return implRestClient.list(IdRepoImplementationType.RECIPIENTS_PROVIDER).stream().
+                return ImplementationRestClient.list(IdRepoImplementationType.RECIPIENTS_PROVIDER).stream().
                         map(EntityTO::getKey).sorted().collect(Collectors.toList());
             }
         };
@@ -391,10 +383,10 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
         }
     }
 
-    private List<String> getSchemas() {
+    private static List<String> getSchemas() {
         AnyTypeTO type = null;
         try {
-            type = anyTypeRestClient.read(AnyTypeKind.USER.name());
+            type = AnyTypeRestClient.read(AnyTypeKind.USER.name());
         } catch (SyncopeClientException e) {
             LOG.error("While reading all any types", e);
         }
@@ -405,11 +397,11 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
         List<String> result = new ArrayList<>();
         result.add("username");
 
-        result.addAll(schemaRestClient.<PlainSchemaTO>getSchemas(SchemaType.PLAIN, null, anyTypeClasses).
+        result.addAll(SchemaRestClient.<PlainSchemaTO>getSchemas(SchemaType.PLAIN, null, anyTypeClasses).
                 stream().map(EntityTO::getKey).collect(Collectors.toList()));
-        result.addAll(schemaRestClient.<DerSchemaTO>getSchemas(SchemaType.DERIVED, null, anyTypeClasses).
+        result.addAll(SchemaRestClient.<DerSchemaTO>getSchemas(SchemaType.DERIVED, null, anyTypeClasses).
                 stream().map(EntityTO::getKey).collect(Collectors.toList()));
-        result.addAll(schemaRestClient.<VirSchemaTO>getSchemas(SchemaType.VIRTUAL, null, anyTypeClasses).
+        result.addAll(SchemaRestClient.<VirSchemaTO>getSchemas(SchemaType.VIRTUAL, null, anyTypeClasses).
                 stream().map(EntityTO::getKey).collect(Collectors.toList()));
 
         Collections.sort(result);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
index 61dcde8..71c5446 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
@@ -45,9 +45,7 @@ public class Audit extends BasePage {
 
         body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
 
-        final LoggerRestClient loggerRestClient = new LoggerRestClient();
-
-        List<String> events = loggerRestClient.listAudits().stream().
+        List<String> events = LoggerRestClient.listAudits().stream().
                 map(audit -> AuditLoggerName.buildEvent(
                 audit.getType(),
                 audit.getCategory(),
@@ -64,7 +62,7 @@ public class Audit extends BasePage {
 
         form.add(new EventCategoryPanel(
                 "auditPanel",
-                loggerRestClient.listEvents(),
+                LoggerRestClient.listEvents(),
                 new ListModel<>(events)) {
 
             private static final long serialVersionUID = 6113164334533550277L;
@@ -97,7 +95,7 @@ public class Audit extends BasePage {
                                 ? null : eventCategory.getKey().getEvents().iterator().next(),
                                 eventCategory.getValue());
 
-                        loggerRestClient.disableAudit(auditLoggerName);
+                        LoggerRestClient.disableAudit(auditLoggerName);
                     });
 
                     eventSelectionChanged.getToBeAdded().forEach(toBeAdded -> {
@@ -112,7 +110,7 @@ public class Audit extends BasePage {
                                 ? null : eventCategory.getKey().getEvents().iterator().next(),
                                 eventCategory.getValue());
 
-                        loggerRestClient.enableAudit(auditLoggerName);
+                        LoggerRestClient.enableAudit(auditLoggerName);
                     });
                 }
             }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index 61b3bdd..0654fb4 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -122,7 +122,7 @@ public class BasePage extends BaseWebPage {
             public void onClick() {
                 try {
                     HttpResourceStream stream =
-                            new HttpResourceStream(new SyncopeRestClient().exportInternalStorageContent());
+                            new HttpResourceStream(SyncopeRestClient.exportInternalStorageContent());
 
                     ResourceStreamRequestHandler rsrh = new ResourceStreamRequestHandler(stream);
                     rsrh.setFileName(stream.getFilename() == null
@@ -525,11 +525,11 @@ public class BasePage extends BaseWebPage {
         response.render(new PriorityHeaderItem(META_IE_EDGE));
     }
 
-    private String getLIContainerId(final String linkId) {
+    private static String getLIContainerId(final String linkId) {
         return linkId + "LI";
     }
 
-    private String getULContainerId(final String linkId) {
+    private static String getULContainerId(final String linkId) {
         return linkId + "UL";
     }
 
@@ -539,7 +539,7 @@ public class BasePage extends BaseWebPage {
      * @param modal window
      * @param container container
      */
-    public void setWindowClosedCallback(final BaseModal<?> modal, final WebMarkupContainer container) {
+    public static void setWindowClosedCallback(final BaseModal<?> modal, final WebMarkupContainer container) {
         modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
 
             private static final long serialVersionUID = 8804221891699487139L;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/LogViewer.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/LogViewer.java
index 5b84a77..f8e533a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/LogViewer.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/LogViewer.java
@@ -46,8 +46,6 @@ public class LogViewer extends WebPage {
 
     private static final long serialVersionUID = -7578329899052708105L;
 
-    private final LoggerRestClient restClient = new LoggerRestClient();
-
     public LogViewer() {
         final WebMarkupContainer viewer = new WebMarkupContainer("viewer");
         viewer.setOutputMarkupId(true);
@@ -56,7 +54,7 @@ public class LogViewer extends WebPage {
         final AjaxDropDownChoicePanel<String> appenders = new AjaxDropDownChoicePanel<>(
                 "appenders", "Appender", new Model<>(), false);
         MetaDataRoleAuthorizationStrategy.authorize(appenders, ENABLE, IdRepoEntitlement.LOG_READ);
-        appenders.setChoices(restClient.listMemoryAppenders());
+        appenders.setChoices(LoggerRestClient.listMemoryAppenders());
         viewer.add(appenders);
 
         final WebMarkupContainer stContainer = new WebMarkupContainer("stContainer");
@@ -90,7 +88,8 @@ public class LogViewer extends WebPage {
 
                 List<LogStatement> recentLogStatements = appenders.getModelObject() == null
                         ? new ArrayList<>()
-                        : restClient.getLastLogStatements(appenders.getModelObject(), lastTimeInMillis.getObject());
+                        : LoggerRestClient.getLastLogStatements(appenders.getModelObject(),
+                    lastTimeInMillis.getObject());
                 if (!recentLogStatements.isEmpty()) {
                     lastTimeInMillis.setObject(recentLogStatements.get(recentLogStatements.size() - 1).getTimeMillis());
 
@@ -126,7 +125,7 @@ public class LogViewer extends WebPage {
             protected void onUpdate(final AjaxRequestTarget target) {
                 List<LogStatement> lastStatements = appenders.getModelObject() == null
                         ? new ArrayList<>()
-                        : restClient.getLastLogStatements(appenders.getModelObject(), 0);
+                        : LoggerRestClient.getLastLogStatements(appenders.getModelObject(), 0);
                 statementViewModel.setObject(lastStatements);
                 target.add(stContainer);
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java
index d5b068c..e387f18 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/MustChangePassword.java
@@ -30,8 +30,6 @@ public class MustChangePassword extends AbstractMustChangePassword {
 
     private static final long serialVersionUID = 8581970794722709800L;
 
-    protected UserSelfRestClient restClient = new UserSelfRestClient();
-
     public MustChangePassword(final PageParameters parameters) {
         super(parameters);
     }
@@ -39,7 +37,7 @@ public class MustChangePassword extends AbstractMustChangePassword {
     @Override
     protected void doSubmit(final AjaxRequestTarget target) {
         try {
-            restClient.changePassword(passwordField.getModelObject());
+            UserSelfRestClient.changePassword(passwordField.getModelObject());
 
             SyncopeConsoleSession.get().invalidate();
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
index e2b52eb..189b765 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
@@ -52,8 +52,6 @@ public class Realms extends BasePage {
 
     private static final long serialVersionUID = -1100228004207271270L;
 
-    private final RealmRestClient realmRestClient = new RealmRestClient();
-
     private final TemplatesTogglePanel templates;
 
     private final RealmChoicePanel realmChoicePanel;
@@ -75,7 +73,7 @@ public class Realms extends BasePage {
             protected Serializable onApplyInternal(
                     final TemplatableTO targetObject, final String type, final AnyTO anyTO) {
                 targetObject.getTemplates().put(type, anyTO);
-                new RealmRestClient().update(RealmTO.class.cast(targetObject));
+                RealmRestClient.update(RealmTO.class.cast(targetObject));
                 return targetObject;
             }
         };
@@ -234,7 +232,7 @@ public class Realms extends BasePage {
                     if (realmTO.getKey() == null) {
                         throw new Exception("Root realm cannot be deleted");
                     }
-                    realmRestClient.delete(realmTO.getFullPath());
+                    RealmRestClient.delete(realmTO.getFullPath());
                     RealmTO parent = realmChoicePanel.moveToParentRealm(realmTO.getKey());
                     target.add(realmChoicePanel.reloadRealmTree(target));
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
index ca3b487..d2cfba6 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
@@ -122,7 +122,7 @@ public class AccessTokenDirectoryPanel
             @Override
             public void onClick(final AjaxRequestTarget target, final AccessTokenTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    AccessTokenRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -172,14 +172,14 @@ public class AccessTokenDirectoryPanel
         @Override
         public Iterator<AccessTokenTO> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return restClient.list(
+            return AccessTokenRestClient.list(
                     (page < 0 ? 0 : page) + 1, paginatorRows, getSort()).
                     iterator();
         }
 
         @Override
         public long size() {
-            return restClient.count();
+            return AccessTokenRestClient.count();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
index 242efb3..3ad57cd 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
@@ -27,12 +27,12 @@ import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.tuple.Triple;
+import org.apache.syncope.client.console.PreferenceManager;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.AnyDataProvider;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.status.ConnObjectWrapper;
 import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
-import org.apache.syncope.client.console.rest.SchemaRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
@@ -65,8 +65,6 @@ public abstract class AnyDirectoryPanel<A extends AnyTO, E extends AbstractAnyRe
 
     private static final long serialVersionUID = -1100228004207271270L;
 
-    protected final SchemaRestClient schemaRestClient = new SchemaRestClient();
-
     protected final List<String> pSchemaNames;
 
     protected final List<String> dSchemaNames;
@@ -150,18 +148,18 @@ public abstract class AnyDirectoryPanel<A extends AnyTO, E extends AbstractAnyRe
         columns.add(new KeyPropertyColumn<>(
                 new ResourceModel(Constants.KEY_FIELD_NAME, Constants.KEY_FIELD_NAME), Constants.KEY_FIELD_NAME));
 
-        prefMan.getList(getRequest(), DisplayAttributesModalPanel.getPrefDetailView(type)).stream().
+        PreferenceManager.getList(getRequest(), DisplayAttributesModalPanel.getPrefDetailView(type)).stream().
                 filter(name -> !Constants.KEY_FIELD_NAME.equalsIgnoreCase(name)).
                 forEachOrdered(name -> addPropertyColumn(
                 name,
                 ReflectionUtils.findField(DisplayAttributesModalPanel.getTOClass(type), name),
                 prefcolumns));
 
-        prefMan.getList(getRequest(), DisplayAttributesModalPanel.getPrefPlainAttributeView(type)).stream().
+        PreferenceManager.getList(getRequest(), DisplayAttributesModalPanel.getPrefPlainAttributeView(type)).stream().
                 filter(pSchemaNames::contains).
                 forEachOrdered(name -> prefcolumns.add(new AttrColumn<>(name, SchemaType.PLAIN)));
 
-        prefMan.getList(getRequest(), DisplayAttributesModalPanel.getPrefDerivedAttributeView(type)).stream().
+        PreferenceManager.getList(getRequest(), DisplayAttributesModalPanel.getPrefDerivedAttributeView(type)).stream().
                 filter(dSchemaNames::contains).
                 forEachOrdered(name -> prefcolumns.add(new AttrColumn<>(name, SchemaType.DERIVED)));
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
index 07be4a2..18e40d2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
@@ -250,7 +250,7 @@ public class AnyPanel extends Panel implements ModalPanel {
                 final UserTO userTO = new UserTO();
                 userTO.setRealm(realmTO.getFullPath());
                 panel = new UserDirectoryPanel.Builder(
-                        anyTypeClassRestClient.list(anyTypeTO.getClasses()),
+                        AnyTypeClassRestClient.list(anyTypeTO.getClasses()),
                         anyTypeTO.getKey(),
                         pageRef).setRealm(realm).setDynRealm(dynRealm).setFiltered(true).
                         setFiql(fiql).setWizardInModal(true).addNewItemPanelBuilder(FormLayoutInfoUtils.instantiate(
@@ -269,7 +269,7 @@ public class AnyPanel extends Panel implements ModalPanel {
                 final GroupTO groupTO = new GroupTO();
                 groupTO.setRealm(realmTO.getFullPath());
                 panel = new GroupDirectoryPanel.Builder(
-                        anyTypeClassRestClient.list(anyTypeTO.getClasses()),
+                        AnyTypeClassRestClient.list(anyTypeTO.getClasses()),
                         anyTypeTO.getKey(),
                         pageRef).setRealm(realm).setDynRealm(dynRealm).setFiltered(true).
                         setFiql(fiql).setWizardInModal(true).addNewItemPanelBuilder(FormLayoutInfoUtils.instantiate(
@@ -291,7 +291,7 @@ public class AnyPanel extends Panel implements ModalPanel {
                 anyObjectTO.setRealm(realmTO.getFullPath());
                 anyObjectTO.setType(anyTypeTO.getKey());
                 panel = new AnyObjectDirectoryPanel.Builder(
-                        anyTypeClassRestClient.list(anyTypeTO.getClasses()),
+                        AnyTypeClassRestClient.list(anyTypeTO.getClasses()),
                         anyTypeTO.getKey(),
                         pageRef).setRealm(realm).setDynRealm(dynRealm).setFiltered(true).
                         setFiql(fiql).setWizardInModal(true).addNewItemPanelBuilder(FormLayoutInfoUtils.instantiate(
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
index 03a0036..f34ce87 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
@@ -37,13 +37,11 @@ public class AnyTypeClassDetailsPanel extends Panel {
 
     private final AnyTypeClassTO anyTypeClassTO;
 
-    private final SchemaRestClient schemaRestClient = new SchemaRestClient();
+    private final List<String> availablePlainSchemas = SchemaRestClient.getPlainSchemaNames();
 
-    private final List<String> availablePlainSchemas = schemaRestClient.getPlainSchemaNames();
+    private final List<String> availableDerSchemas = SchemaRestClient.getDerSchemaNames();
 
-    private final List<String> availableDerSchemas = schemaRestClient.getDerSchemaNames();
-
-    private final List<String> availableVirSchemas = schemaRestClient.getVirSchemaNames();
+    private final List<String> availableVirSchemas = SchemaRestClient.getVirSchemaNames();
 
     private static final List<String> LAYOUT_PARAMETERS =
             List.of("admin.user.layout", "self.user.layout",
@@ -102,7 +100,7 @@ public class AnyTypeClassDetailsPanel extends Panel {
     }
 
     private void buildAvailableSchemas(final String key) {
-        new AnyTypeClassRestClient().list().stream().
+        AnyTypeClassRestClient.list().stream().
                 filter(item -> key == null || !item.getKey().equals(key)).
                 forEach(item -> {
                     availablePlainSchemas.removeAll(item.getPlainSchemas());
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
index 093a01a..e6ce27d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
@@ -78,9 +78,9 @@ public class AnyTypeClassesPanel extends TypesDirectoryPanel<
                     public void onSubmit(final AjaxRequestTarget target) {
                         try {
                             if (getOriginalItem() == null || StringUtils.isBlank(getOriginalItem().getKey())) {
-                                restClient.create(modelObject);
+                                AnyTypeClassRestClient.create(modelObject);
                             } else {
-                                restClient.update(modelObject);
+                                AnyTypeClassRestClient.update(modelObject);
                             }
                             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                             AnyTypeClassesPanel.this.updateResultTable(target);
@@ -178,7 +178,7 @@ public class AnyTypeClassesPanel extends TypesDirectoryPanel<
             @Override
             public void onClick(final AjaxRequestTarget target, final AnyTypeClassTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    AnyTypeClassRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (Exception e) {
@@ -206,14 +206,14 @@ public class AnyTypeClassesPanel extends TypesDirectoryPanel<
 
         @Override
         public Iterator<AnyTypeClassTO> iterator(final long first, final long count) {
-            final List<AnyTypeClassTO> list = restClient.list();
+            final List<AnyTypeClassTO> list = AnyTypeClassRestClient.list();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return AnyTypeClassRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
index 6f87731..d562673 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
@@ -70,7 +70,7 @@ public class AnyTypeDetailsPanel extends Panel {
                 new ListModel<>(getAvailableAnyTypeClasses())).hideLabel().setOutputMarkupId(true));
     }
 
-    private List<String> getAvailableAnyTypeClasses() {
-        return new AnyTypeClassRestClient().list().stream().map(EntityTO::getKey).collect(Collectors.toList());
+    private static List<String> getAvailableAnyTypeClasses() {
+        return AnyTypeClassRestClient.list().stream().map(EntityTO::getKey).collect(Collectors.toList());
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeMenuItem.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeMenuItem.java
index b6b2c9b..7ecd931 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeMenuItem.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeMenuItem.java
@@ -35,7 +35,7 @@ public class AnyTypeMenuItem extends Panel {
         super("anytype-menuitem");
 
         WebMarkupContainer myLink = new WebMarkupContainer("tabLink");
-        myLink.add(new AttributeModifier("href", "#" + href));
+        myLink.add(new AttributeModifier("href", '#' + href));
         myLink.add(new Label("tabLabel", label));
         add(myLink);
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
index 85258c1..241ffb2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
@@ -76,10 +76,10 @@ public class AnyTypesPanel extends TypesDirectoryPanel<AnyTypeTO, AnyTypesPanel.
                     public void onSubmit(final AjaxRequestTarget target) {
                         try {
                             if (getOriginalItem() == null || StringUtils.isBlank(getOriginalItem().getKey())) {
-                                restClient.create(modelObject);
+                                AnyTypeRestClient.create(modelObject);
                                 SyncopeConsoleSession.get().refreshAuth(null);
                             } else {
-                                restClient.update(modelObject);
+                                AnyTypeRestClient.update(modelObject);
                             }
 
                             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
@@ -176,7 +176,7 @@ public class AnyTypesPanel extends TypesDirectoryPanel<AnyTypeTO, AnyTypesPanel.
             @Override
             public void onClick(final AjaxRequestTarget target, final AnyTypeTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    AnyTypeRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().refreshAuth(null);
 
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
@@ -206,14 +206,14 @@ public class AnyTypesPanel extends TypesDirectoryPanel<AnyTypeTO, AnyTypesPanel.
 
         @Override
         public Iterator<AnyTypeTO> iterator(final long first, final long count) {
-            final List<AnyTypeTO> list = restClient.listAnyTypes();
+            final List<AnyTypeTO> list = AnyTypeRestClient.listAnyTypes();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return AnyTypeRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
index a66df25..5c050d6 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
@@ -144,8 +144,8 @@ public class ApplicationDirectoryPanel extends
                     final String componentId,
                     final IModel<ApplicationTO> rowModel) {
 
-                item.add(new Label(componentId, "[" + rowModel.getObject().getPrivileges().stream().
-                        map(EntityTO::getKey).collect(Collectors.joining(", ")) + "]"));
+                item.add(new Label(componentId, '[' + rowModel.getObject().getPrivileges().stream().
+                        map(EntityTO::getKey).collect(Collectors.joining(", ")) + ']'));
             }
         });
 
@@ -195,7 +195,7 @@ public class ApplicationDirectoryPanel extends
             @Override
             public void onClick(final AjaxRequestTarget target, final ApplicationTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    ApplicationRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -236,8 +236,6 @@ public class ApplicationDirectoryPanel extends
 
         private final SortableDataProviderComparator<ApplicationTO> comparator;
 
-        private final ApplicationRestClient restClient = new ApplicationRestClient();
-
         public ApplicationDataProvider(final int paginatorRows) {
             super(paginatorRows);
             this.comparator = new SortableDataProviderComparator<>(this);
@@ -245,14 +243,14 @@ public class ApplicationDirectoryPanel extends
 
         @Override
         public Iterator<ApplicationTO> iterator(final long first, final long count) {
-            List<ApplicationTO> result = restClient.list();
+            List<ApplicationTO> result = ApplicationRestClient.list();
             Collections.sort(result, comparator);
             return result.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return ApplicationRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationModalPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationModalPanel.java
index d1248fd..4e831a9 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationModalPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationModalPanel.java
@@ -34,8 +34,6 @@ public class ApplicationModalPanel extends AbstractModalPanel<ApplicationTO> {
 
     private static final long serialVersionUID = 4575264480736377795L;
 
-    private final ApplicationRestClient restClient = new ApplicationRestClient();
-
     private final ApplicationTO application;
 
     private final boolean create;
@@ -73,9 +71,9 @@ public class ApplicationModalPanel extends AbstractModalPanel<ApplicationTO> {
     public void onSubmit(final AjaxRequestTarget target) {
         try {
             if (create) {
-                restClient.create(application);
+                ApplicationRestClient.create(application);
             } else {
-                restClient.update(application);
+                ApplicationRestClient.update(application);
             }
             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
             this.modal.close(target);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
index 6b95518..b4a6fe2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
@@ -186,17 +186,17 @@ public class BeanPanel<T extends Serializable> extends Panel {
                             switch (type) {
                                 case PLAIN:
                                     choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.PLAIN, schemaAnnot.anyTypeKind()));
+                                            SchemaRestClient.getSchemas(SchemaType.PLAIN, schemaAnnot.anyTypeKind()));
                                     break;
 
                                 case DERIVED:
                                     choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.DERIVED, schemaAnnot.anyTypeKind()));
+                                            SchemaRestClient.getSchemas(SchemaType.DERIVED, schemaAnnot.anyTypeKind()));
                                     break;
 
                                 case VIRTUAL:
                                     choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.VIRTUAL, schemaAnnot.anyTypeKind()));
+                                            SchemaRestClient.getSchemas(SchemaType.VIRTUAL, schemaAnnot.anyTypeKind()));
                                     break;
 
                                 default:
@@ -231,8 +231,8 @@ public class BeanPanel<T extends Serializable> extends Panel {
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    private FieldPanel buildSinglePanel(
-            final Serializable bean, final Class<?> type, final String fieldName, final String id) {
+    private static FieldPanel buildSinglePanel(
+        final Serializable bean, final Class<?> type, final String fieldName, final String id) {
         FieldPanel result = null;
         PropertyModel model = new PropertyModel(bean, fieldName);
         if (ClassUtils.isAssignable(Boolean.class, type)) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java
index f1e9dc2..cbc7596 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java
@@ -38,19 +38,19 @@ public class ConsoleLogPanel extends AbstractLogsPanel<LoggerTO> {
     private static final ConsoleLoggerController CONSOLE_LOGGER_CONTROLLER = new ConsoleLoggerController();
 
     public ConsoleLogPanel(final String id, final PageReference pageReference) {
-        super(id, pageReference, CONSOLE_LOGGER_CONTROLLER.getLoggers());
+        super(id, pageReference, ConsoleLoggerController.getLoggers());
     }
 
     @Override
     protected void update(final LoggerTO loggerTO) {
-        CONSOLE_LOGGER_CONTROLLER.setLogLevel(loggerTO.getKey(), loggerTO.getLevel());
+        ConsoleLoggerController.setLogLevel(loggerTO.getKey(), loggerTO.getLevel());
     }
 
     private static class ConsoleLoggerController implements Serializable {
 
         private static final long serialVersionUID = -1550459341476431714L;
 
-        public List<LoggerTO> getLoggers() {
+        public static List<LoggerTO> getLoggers() {
             LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
 
             List<LoggerTO> result = new ArrayList<>();
@@ -69,7 +69,7 @@ public class ConsoleLogPanel extends AbstractLogsPanel<LoggerTO> {
             return result;
         }
 
-        public void setLogLevel(final String name, final LoggerLevel level) {
+        public static void setLogLevel(final String name, final LoggerLevel level) {
             final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
             final LoggerConfig logConf = SyncopeConstants.ROOT_LOGGER.equals(name)
                     ? ctx.getConfiguration().getLoggerConfig(LogManager.ROOT_LOGGER_NAME)
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java
index 67a14ca..053da7e 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java
@@ -29,10 +29,8 @@ public class CoreLogPanel extends AbstractLogsPanel<LoggerTO> {
 
     private static final long serialVersionUID = 3905038169553185171L;
 
-    private final LoggerRestClient restClient = new LoggerRestClient();
-
     public CoreLogPanel(final String id, final PageReference pageReference) {
-        super(id, pageReference, new LoggerRestClient().listLogs());
+        super(id, pageReference, LoggerRestClient.listLogs());
 
         BookmarkablePageLink<Void> viewer = new BookmarkablePageLink<>("viewer", LogViewer.class);
         viewer.setPopupSettings(new PopupSettings().setHeight(600).setWidth(800));
@@ -41,6 +39,6 @@ public class CoreLogPanel extends AbstractLogsPanel<LoggerTO> {
 
     @Override
     protected void update(final LoggerTO loggerTO) {
-        restClient.setLogLevel(loggerTO);
+        LoggerRestClient.setLogLevel(loggerTO);
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DashboardOverviewPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DashboardOverviewPanel.java
index 7776fcd..7588971 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DashboardOverviewPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DashboardOverviewPanel.java
@@ -53,12 +53,10 @@ public class DashboardOverviewPanel extends Panel {
 
     private final LoadWidget load;
 
-    private final SyncopeRestClient restClient = new SyncopeRestClient();
-
     public DashboardOverviewPanel(final String id) {
         super(id);
 
-        NumbersInfo numbers = restClient.numbers();
+        NumbersInfo numbers = SyncopeRestClient.numbers();
 
         WebMarkupContainer container = new WebMarkupContainer("container");
         container.setOutputMarkupId(true);
@@ -98,7 +96,7 @@ public class DashboardOverviewPanel extends Panel {
                 numbers.getAny2ByRealm());
         container.add(anyByRealm);
 
-        load = new LoadWidget("load", restClient.system());
+        load = new LoadWidget("load", SyncopeRestClient.system());
         container.add(load);
 
         container.add(new IndicatorAjaxTimerBehavior(Duration.seconds(60)) {
@@ -107,7 +105,7 @@ public class DashboardOverviewPanel extends Panel {
 
             @Override
             protected void onTimer(final AjaxRequestTarget target) {
-                NumbersInfo numbers = restClient.numbers();
+                NumbersInfo numbers = SyncopeRestClient.numbers();
 
                 if (totalUsers.refresh(numbers.getTotalUsers())) {
                     target.add(totalUsers);
@@ -144,13 +142,13 @@ public class DashboardOverviewPanel extends Panel {
                     target.add(anyByRealm);
                 }
 
-                load.refresh(restClient.system());
+                load.refresh(SyncopeRestClient.system());
                 target.add(load);
             }
         });
     }
 
-    private Triple<Integer, String, String> buildTotalAny1OrRoles(final NumbersInfo numbers) {
+    private static Triple<Integer, String, String> buildTotalAny1OrRoles(final NumbersInfo numbers) {
         int number;
         String label;
         String icon;
@@ -166,7 +164,7 @@ public class DashboardOverviewPanel extends Panel {
         return Triple.of(number, label, icon);
     }
 
-    private Triple<Integer, String, String> buildTotalAny2OrResources(final NumbersInfo numbers) {
+    private static Triple<Integer, String, String> buildTotalAny2OrResources(final NumbersInfo numbers) {
         int number;
         String label;
         String icon;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
index 14b17c1..326b9e0 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
@@ -168,7 +168,7 @@ public abstract class DirectoryPanel<
         container.setOutputMarkupId(true);
         addInnerObject(container);
 
-        rows = prefMan.getPaginatorRows(getRequest(), paginatorRowsKey());
+        rows = PreferenceManager.getPaginatorRows(getRequest(), paginatorRowsKey());
 
         setWindowClosedReloadCallback(modal);
         setWindowClosedReloadCallback(altDefaultModal);
@@ -217,7 +217,7 @@ public abstract class DirectoryPanel<
         container.add(paginatorForm);
 
         DropDownChoice<Integer> rowsChooser = new DropDownChoice<>(
-                "rowsChooser", new PropertyModel<>(this, "rows"), prefMan.getPaginatorChoices());
+                "rowsChooser", new PropertyModel<>(this, "rows"), PreferenceManager.getPaginatorChoices());
         rowsChooser.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
index e510437..0822212 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
@@ -113,11 +113,11 @@ public abstract class DisplayAttributesModalPanel<T extends Serializable> extend
         };
 
         selectedDetails =
-                prefMan.getList(getRequest(), DisplayAttributesModalPanel.getPrefDetailView(type));
+                PreferenceManager.getList(getRequest(), DisplayAttributesModalPanel.getPrefDetailView(type));
         selectedPlainSchemas =
-                prefMan.getList(getRequest(), DisplayAttributesModalPanel.getPrefPlainAttributeView(type));
+                PreferenceManager.getList(getRequest(), DisplayAttributesModalPanel.getPrefPlainAttributeView(type));
         selectedDerSchemas =
-                prefMan.getList(getRequest(), DisplayAttributesModalPanel.getPrefDerivedAttributeView(type));
+                PreferenceManager.getList(getRequest(), DisplayAttributesModalPanel.getPrefDerivedAttributeView(type));
 
         // remove old schemas from selected lists
         selectedPlainSchemas.retainAll(pSchemaNames);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
index d73036d..1507891 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
@@ -141,7 +141,7 @@ public class DynRealmDirectoryPanel extends
             @Override
             public void onClick(final AjaxRequestTarget target, final DynRealmTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    DynRealmRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -182,8 +182,6 @@ public class DynRealmDirectoryPanel extends
 
         private final SortableDataProviderComparator<DynRealmTO> comparator;
 
-        private final DynRealmRestClient restClient = new DynRealmRestClient();
-
         public DynRealmDataProvider(final int paginatorRows) {
             super(paginatorRows);
             this.comparator = new SortableDataProviderComparator<>(this);
@@ -191,14 +189,14 @@ public class DynRealmDirectoryPanel extends
 
         @Override
         public Iterator<DynRealmTO> iterator(final long first, final long count) {
-            List<DynRealmTO> result = restClient.list();
+            List<DynRealmTO> result = DynRealmRestClient.list();
             Collections.sort(result, comparator);
             return result.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return DynRealmRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java
index 78b3a96..6ca5ebd 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java
@@ -50,10 +50,6 @@ public class DynRealmModalPanel extends AbstractModalPanel<DynRealmWrapper> {
 
     private static final long serialVersionUID = -3773196441177699452L;
 
-    private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
-    private final DynRealmRestClient restClient = new DynRealmRestClient();
-
     private final DynRealmWrapper dynRealmWrapper;
 
     private final boolean create;
@@ -81,7 +77,7 @@ public class DynRealmModalPanel extends AbstractModalPanel<DynRealmWrapper> {
 
             @Override
             protected List<AnyTypeTO> load() {
-                return anyTypeRestClient.listAnyTypes();
+                return AnyTypeRestClient.listAnyTypes();
             }
         };
 
@@ -134,9 +130,9 @@ public class DynRealmModalPanel extends AbstractModalPanel<DynRealmWrapper> {
         try {
             dynRealmWrapper.fillDynamicConditions();
             if (create) {
-                restClient.create(dynRealmWrapper.getInnerObject());
+                DynRealmRestClient.create(dynRealmWrapper.getInnerObject());
             } else {
-                restClient.update(dynRealmWrapper.getInnerObject());
+                DynRealmRestClient.update(dynRealmWrapper.getInnerObject());
             }
             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
             this.modal.close(target);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
index 82bf9f3..9754ffd 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
@@ -96,10 +96,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
             protected Serializable onApplyInternal(
                     final GroupTO groupTO, final String type, final AjaxRequestTarget target) {
 
-                AnyTypeRestClient typeRestClient = new AnyTypeRestClient();
-                AnyTypeClassRestClient classRestClient = new AnyTypeClassRestClient();
-
-                AnyTypeTO anyTypeTO = typeRestClient.read(type);
+                AnyTypeTO anyTypeTO = AnyTypeRestClient.read(type);
 
                 ModalPanel panel = new AnyPanel(BaseModal.CONTENT_ID, anyTypeTO, null, null, false, pageRef) {
 
@@ -116,7 +113,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
                                     SyncopeClient.getUserSearchConditionBuilder().is("key").notNullValue()).query();
 
                             panel = new UserDirectoryPanel.Builder(
-                                    classRestClient.list(anyTypeTO.getClasses()), anyTypeTO.getKey(), pageRef).
+                                AnyTypeClassRestClient.list(anyTypeTO.getClasses()), anyTypeTO.getKey(), pageRef).
                                     setRealm(SyncopeConstants.ROOT_REALM).
                                     setFiltered(true).
                                     setFiql(query).
@@ -124,7 +121,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
                                     addNewItemPanelBuilder(FormLayoutInfoUtils.instantiate(
                                             new UserTO(),
                                             anyTypeTO.getClasses(),
-                                            FormLayoutInfoUtils.fetch(typeRestClient.list()).getLeft(),
+                                            FormLayoutInfoUtils.fetch(AnyTypeRestClient.list()).getLeft(),
                                             pageRef), false).
                                     setWizardInModal(false).build(id);
 
@@ -136,7 +133,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
                                     SyncopeClient.getUserSearchConditionBuilder().is("key").notNullValue()).query();
 
                             panel = new AnyObjectDirectoryPanel.Builder(
-                                    classRestClient.list(anyTypeTO.getClasses()), anyTypeTO.getKey(), pageRef).
+                                AnyTypeClassRestClient.list(anyTypeTO.getClasses()), anyTypeTO.getKey(), pageRef).
                                     setRealm(SyncopeConstants.ROOT_REALM).
                                     setFiltered(true).
                                     setFiql(query).
@@ -144,7 +141,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
                                     addNewItemPanelBuilder(FormLayoutInfoUtils.instantiate(
                                             new AnyObjectTO(),
                                             anyTypeTO.getClasses(),
-                                            FormLayoutInfoUtils.fetch(typeRestClient.list()).getRight().get(type),
+                                            FormLayoutInfoUtils.fetch(AnyTypeRestClient.list()).getRight().get(type),
                                             pageRef), false).
                                     setWizardInModal(false).build(id);
 
@@ -276,7 +273,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
             @Override
             public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
                 try {
-                    restClient.provisionMembers(model.getObject().getKey(), ProvisionAction.PROVISION);
+                    GroupRestClient.provisionMembers(model.getObject().getKey(), ProvisionAction.PROVISION);
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -297,7 +294,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO, GroupRestCli
             @Override
             public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
                 try {
-                    restClient.provisionMembers(model.getObject().getKey(), ProvisionAction.DEPROVISION);
+                    GroupRestClient.provisionMembers(model.getObject().getKey(), ProvisionAction.DEPROVISION);
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
index 951f3bf..9982695 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
@@ -159,7 +159,7 @@ public class ImplementationDirectoryPanel extends DirectoryPanel<
             @Override
             public void onClick(final AjaxRequestTarget target, final ImplementationTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getType(), model.getObject().getKey());
+                    ImplementationRestClient.delete(model.getObject().getType(), model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -204,14 +204,14 @@ public class ImplementationDirectoryPanel extends DirectoryPanel<
 
         @Override
         public Iterator<ImplementationTO> iterator(final long first, final long count) {
-            List<ImplementationTO> list = restClient.list(type);
+            List<ImplementationTO> list = ImplementationRestClient.list(type);
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list(type).size();
+            return ImplementationRestClient.list(type).size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java
index fa1f036..b7ca781 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java
@@ -51,8 +51,6 @@ public class ImplementationModalPanel extends AbstractModalPanel<ImplementationT
 
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
-    private final ImplementationRestClient restClient = new ImplementationRestClient();
-
     private final ImplementationTO implementation;
 
     private final ViewMode viewMode;
@@ -184,9 +182,9 @@ public class ImplementationModalPanel extends AbstractModalPanel<ImplementationT
     public void onSubmit(final AjaxRequestTarget target) {
         try {
             if (create) {
-                restClient.create(implementation);
+                ImplementationRestClient.create(implementation);
             } else {
-                restClient.update(implementation);
+                ImplementationRestClient.update(implementation);
             }
 
             modal.close(target);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
index 30b0944..099d8a8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
@@ -215,7 +215,7 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
         checkGroup.add(beans);
     }
 
-    private ListView<String> header(final List<String> labels) {
+    private static ListView<String> header(final List<String> labels) {
         return new ListView<String>("names", labels) {
 
             private static final long serialVersionUID = 1L;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/LogStatementPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/LogStatementPanel.java
index fa18338..6c3cdad 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/LogStatementPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/LogStatementPanel.java
@@ -74,7 +74,7 @@ public class LogStatementPanel extends Panel {
         collapse.setOutputMarkupPlaceholderTag(true);
         collapse.setVisible(StringUtils.isNotBlank(statement.getStackTrace()));
         collapse.add(new JQueryUIBehavior(
-                "#" + collapse.getMarkupId(), "accordion", new Options("active", false).set("collapsible", true)));
+            '#' + collapse.getMarkupId(), "accordion", new Options("active", false).set("collapsible", true)));
         add(collapse);
 
         Label stacktrace = new Label("stacktrace", Model.of(statement.getStackTrace()));
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/MembersTogglePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/MembersTogglePanel.java
index 485feae..80fbe93 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/MembersTogglePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/MembersTogglePanel.java
@@ -53,7 +53,7 @@ public abstract class MembersTogglePanel extends TogglePanel<Serializable> {
 
         @Override
         protected List<String> load() {
-            return new AnyTypeRestClient().list().stream().
+            return AnyTypeRestClient.list().stream().
                     filter(anyType -> !AnyTypeKind.GROUP.name().equals(anyType)).collect(Collectors.toList());
         }
     };
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
index 5490b0c..54aaee2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
@@ -56,8 +56,6 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
     @SpringBean
     private MIMETypesLoader mimeTypesLoader;
 
-    private final ImplementationRestClient implRestClient = new ImplementationRestClient();
-
     private final MultiFieldPanel<String> enumerationValues;
 
     private final MultiFieldPanel<String> enumerationKeys;
@@ -236,7 +234,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
 
             @Override
             protected List<String> load() {
-                return implRestClient.list(IdRepoImplementationType.VALIDATOR).stream().
+                return ImplementationRestClient.list(IdRepoImplementationType.VALIDATOR).stream().
                         map(EntityTO::getKey).sorted().collect(Collectors.toList());
             }
         };
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
index 418c891..f301a43 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
@@ -115,7 +115,7 @@ public class PrivilegeDirectoryPanel extends DirectoryPanel<
             public void onClick(final AjaxRequestTarget target, final PrivilegeTO ignore) {
                 try {
                     application.getPrivileges().remove(model.getObject());
-                    restClient.update(application);
+                    ApplicationRestClient.update(application);
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     customActionOnFinishCallback(target);
                 } catch (SyncopeClientException e) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder.java
index 72b3f80..1a4cda8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder.java
@@ -36,8 +36,6 @@ public class PrivilegeWizardBuilder extends BaseAjaxWizardBuilder<PrivilegeTO> {
 
     private static final long serialVersionUID = -1817419622749405208L;
 
-    private final ApplicationRestClient restClient = new ApplicationRestClient();
-
     private final ApplicationTO application;
 
     public PrivilegeWizardBuilder(
@@ -59,7 +57,7 @@ public class PrivilegeWizardBuilder extends BaseAjaxWizardBuilder<PrivilegeTO> {
         application.getPrivileges().removeIf(privilege -> privilege.getKey().equals(modelObject.getKey()));
         application.getPrivileges().add(modelObject);
 
-        restClient.update(application);
+        ApplicationRestClient.update(application);
 
         return modelObject;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
index ba37040..f60c21a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
@@ -79,7 +79,7 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
     public Realm(final String id, final RealmTO realmTO, final PageReference pageRef, final int selectedIndex) {
         super(id, true);
         this.realmTO = realmTO;
-        this.anyTypes = new AnyTypeRestClient().listAnyTypes();
+        this.anyTypes = AnyTypeRestClient.listAnyTypes();
 
         setPageRef(pageRef);
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
index 33f8d7b..8743ff8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
@@ -57,8 +57,6 @@ public class RealmChoicePanel extends Panel {
 
     private static final long serialVersionUID = -1100228004207271270L;
 
-    private final RealmRestClient realmRestClient = new RealmRestClient();
-
     private final PageReference pageRef;
 
     private final LoadableDetachableModel<List<Pair<String, RealmTO>>> realmTree;
@@ -121,7 +119,7 @@ public class RealmChoicePanel extends Panel {
 
             @Override
             protected List<DynRealmTO> load() {
-                List<DynRealmTO> dynRealms = realmRestClient.listDynReams();
+                List<DynRealmTO> dynRealms = RealmRestClient.listDynReams();
                 dynRealms.sort((left, right) -> {
                     if (left == null) {
                         return -1;
@@ -305,7 +303,7 @@ public class RealmChoicePanel extends Panel {
     }
 
     private Map<String, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap() {
-        return reloadRealmParentMap(realmRestClient.list().stream().
+        return reloadRealmParentMap(RealmRestClient.list().stream().
                 sorted(Comparator.comparing(RealmTO::getName)).
                 collect(Collectors.toList()));
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
index 4dfc358..4ae1bf4 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
@@ -55,17 +55,13 @@ public class RealmDetails extends Panel {
 
     protected static final Logger LOG = LoggerFactory.getLogger(RealmDetails.class);
 
-    private final PolicyRestClient policyRestClient = new PolicyRestClient();
-
-    private final ImplementationRestClient implRestClient = new ImplementationRestClient();
-
     private final IModel<Map<String, String>> accountPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = -2012833443695917883L;
 
         @Override
         protected Map<String, String> load() {
-            return policyRestClient.getPolicies(PolicyType.ACCOUNT).stream().
+            return PolicyRestClient.getPolicies(PolicyType.ACCOUNT).stream().
                     collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getDescription));
         }
     };
@@ -76,7 +72,7 @@ public class RealmDetails extends Panel {
 
         @Override
         protected Map<String, String> load() {
-            return policyRestClient.getPolicies(PolicyType.PASSWORD).stream().
+            return PolicyRestClient.getPolicies(PolicyType.PASSWORD).stream().
                     collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getDescription));
         }
     };
@@ -87,7 +83,7 @@ public class RealmDetails extends Panel {
 
         @Override
         protected List<String> load() {
-            return implRestClient.list(IdRepoImplementationType.LOGIC_ACTIONS).stream().
+            return ImplementationRestClient.list(IdRepoImplementationType.LOGIC_ACTIONS).stream().
                     map(EntityTO::getKey).sorted().collect(Collectors.toList());
         }
     };
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
index f1234a3..f85ab7b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
@@ -32,8 +32,6 @@ public class RealmWizardBuilder extends BaseAjaxWizardBuilder<RealmTO> {
 
     private static final long serialVersionUID = 5945391813567245081L;
 
-    private final RealmRestClient realmRestClient = new RealmRestClient();
-
     private String parentPath;
 
     /**
@@ -49,9 +47,9 @@ public class RealmWizardBuilder extends BaseAjaxWizardBuilder<RealmTO> {
     protected Serializable onApplyInternal(final RealmTO modelObject) {
         ProvisioningResult<RealmTO> result;
         if (modelObject.getKey() == null) {
-            result = realmRestClient.create(this.parentPath, modelObject);
+            result = RealmRestClient.create(this.parentPath, modelObject);
         } else {
-            result = realmRestClient.update(modelObject);
+            result = RealmRestClient.update(modelObject);
         }
         return result;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
index 61abfce..d56640b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
@@ -81,9 +81,9 @@ public class RelationshipTypesPanel extends TypesDirectoryPanel<
                     public void onSubmit(final AjaxRequestTarget target) {
                         try {
                             if (getOriginalItem() == null || StringUtils.isBlank(getOriginalItem().getKey())) {
-                                restClient.create(modelObject);
+                                RelationshipTypeRestClient.create(modelObject);
                             } else {
-                                restClient.update(modelObject);
+                                RelationshipTypeRestClient.update(modelObject);
                             }
                             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                             RelationshipTypesPanel.this.updateResultTable(target);
@@ -180,7 +180,7 @@ public class RelationshipTypesPanel extends TypesDirectoryPanel<
             @Override
             public void onClick(final AjaxRequestTarget target, final RelationshipTypeTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    RelationshipTypeRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (Exception e) {
@@ -208,14 +208,14 @@ public class RelationshipTypesPanel extends TypesDirectoryPanel<
 
         @Override
         public Iterator<RelationshipTypeTO> iterator(final long first, final long count) {
-            final List<RelationshipTypeTO> list = restClient.list();
+            final List<RelationshipTypeTO> list = RelationshipTypeRestClient.list();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return RelationshipTypeRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
index 98883cf..4e6add8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
@@ -137,7 +137,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
             public void onClick(final AjaxRequestTarget target, final RoleTO ignore) {
                 send(RoleDirectoryPanel.this, Broadcast.EXACT,
                         new AjaxWizard.EditItemActionEvent<>(
-                                new RoleWrapper(new RoleRestClient().read(model.getObject().getKey())),
+                                new RoleWrapper(RoleRestClient.read(model.getObject().getKey())),
                                 target));
             }
         }, ActionLink.ActionType.EDIT, IdRepoEntitlement.ROLE_READ);
@@ -165,10 +165,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
                         SyncopeClient.getUserSearchConditionBuilder().inRoles(model.getObject().getKey()),
                         SyncopeClient.getUserSearchConditionBuilder().is("key").notNullValue()).query();
 
-                AnyTypeRestClient typeRestClient = new AnyTypeRestClient();
-                AnyTypeClassRestClient classRestClient = new AnyTypeClassRestClient();
-
-                AnyTypeTO anyTypeTO = typeRestClient.read(AnyTypeKind.USER.name());
+                AnyTypeTO anyTypeTO = AnyTypeRestClient.read(AnyTypeKind.USER.name());
 
                 ModalPanel panel = new AnyPanel(BaseModal.CONTENT_ID, anyTypeTO, null, null, false, pageRef) {
 
@@ -177,7 +174,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
                     @Override
                     protected Panel getDirectoryPanel(final String id) {
                         Panel panel = new UserDirectoryPanel.Builder(
-                                classRestClient.list(anyTypeTO.getClasses()), anyTypeTO.getKey(), pageRef).
+                            AnyTypeClassRestClient.list(anyTypeTO.getClasses()), anyTypeTO.getKey(), pageRef).
                                 setRealm(SyncopeConstants.ROOT_REALM).
                                 setFiltered(true).
                                 setFiql(query).
@@ -185,7 +182,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
                                 addNewItemPanelBuilder(FormLayoutInfoUtils.instantiate(
                                         new UserTO(),
                                         anyTypeTO.getClasses(),
-                                        FormLayoutInfoUtils.fetch(typeRestClient.list()).getLeft(),
+                                        FormLayoutInfoUtils.fetch(AnyTypeRestClient.list()).getLeft(),
                                         pageRef), false).
                                 setWizardInModal(false).build(id);
 
@@ -212,7 +209,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
             @Override
             public void onClick(final AjaxRequestTarget target, final RoleTO ignore) {
                 ConsoleLayoutInfo info = new ConsoleLayoutInfo(model.getObject().getKey());
-                info.setContent(restClient.readConsoleLayoutInfo(model.getObject().getKey()));
+                info.setContent(RoleRestClient.readConsoleLayoutInfo(model.getObject().getKey()));
 
                 utilityModal.header(new ResourceModel("console.layout.info", "JSON Content"));
                 utilityModal.setContent(new JsonEditorPanel(
@@ -223,7 +220,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
                     @Override
                     public void onSubmit(final AjaxRequestTarget target) {
                         try {
-                            restClient.setConsoleLayoutInfo(info.getKey(), info.getContent());
+                            RoleRestClient.setConsoleLayoutInfo(info.getKey(), info.getContent());
                             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                             modal.show(false);
                             modal.close(target);
@@ -246,7 +243,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
             @Override
             public void onClick(final AjaxRequestTarget target, final RoleTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    RoleRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -287,8 +284,6 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
 
         private final SortableDataProviderComparator<RoleTO> comparator;
 
-        private final RoleRestClient restClient = new RoleRestClient();
-
         public RoleDataProvider(final int paginatorRows) {
             super(paginatorRows);
             this.comparator = new SortableDataProviderComparator<>(this);
@@ -296,14 +291,14 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
 
         @Override
         public Iterator<RoleTO> iterator(final long first, final long count) {
-            List<RoleTO> result = restClient.list();
+            List<RoleTO> result = RoleRestClient.list();
             Collections.sort(result, comparator);
             return result.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return RoleRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
index 3462e42..944e2bb 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
@@ -176,15 +176,15 @@ public class SchemaTypePanel extends TypesDirectoryPanel<SchemaTO, SchemaProvide
                 try {
                     switch (schemaType) {
                         case DERIVED:
-                            restClient.deleteDerSchema(model.getObject().getKey());
+                            SchemaRestClient.deleteDerSchema(model.getObject().getKey());
                             break;
 
                         case VIRTUAL:
-                            restClient.deleteVirSchema(model.getObject().getKey());
+                            SchemaRestClient.deleteVirSchema(model.getObject().getKey());
                             break;
 
                         default:
-                            restClient.deletePlainSchema(model.getObject().getKey());
+                            SchemaRestClient.deletePlainSchema(model.getObject().getKey());
                             break;
                     }
 
@@ -220,7 +220,7 @@ public class SchemaTypePanel extends TypesDirectoryPanel<SchemaTO, SchemaProvide
 
         @Override
         public Iterator<SchemaTO> iterator(final long first, final long count) {
-            List<SchemaTO> schemas = restClient.getSchemas(this.schemaType, keyword);
+            List<SchemaTO> schemas = SchemaRestClient.getSchemas(this.schemaType, keyword);
             Collections.sort(schemas, comparator);
 
             return schemas.subList((int) first, (int) first + (int) count).iterator();
@@ -228,7 +228,7 @@ public class SchemaTypePanel extends TypesDirectoryPanel<SchemaTO, SchemaProvide
 
         @Override
         public long size() {
-            return restClient.getSchemas(this.schemaType, keyword).size();
+            return SchemaRestClient.getSchemas(this.schemaType, keyword).size();
         }
 
         @Override
@@ -245,10 +245,10 @@ public class SchemaTypePanel extends TypesDirectoryPanel<SchemaTO, SchemaProvide
 
             keyword = payload.getKeyword();
             if (!keyword.startsWith("*")) {
-                keyword = "*" + keyword;
+                keyword = '*' + keyword;
             }
             if (!keyword.endsWith("*")) {
-                keyword = keyword + "*";
+                keyword = keyword + '*';
             }
 
             updateResultTable(target);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
index b272eaf..b646d0a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
@@ -59,8 +59,6 @@ public class SchemaTypeWizardBuilder extends BaseAjaxWizardBuilder<SchemaTO> {
 
     private static final long serialVersionUID = -3893521796674873644L;
 
-    private final SchemaRestClient restClient = new SchemaRestClient();
-
     private final SchemaType schemaType;
 
     private final ListModel<MutablePair<Locale, String>> translations = new ListModel<>(new ArrayList<>());
@@ -80,9 +78,9 @@ public class SchemaTypeWizardBuilder extends BaseAjaxWizardBuilder<SchemaTO> {
                 collect(Collectors.toMap(MutablePair::getKey, MutablePair::getValue)));
 
         if (getOriginalItem() == null || StringUtils.isBlank(getOriginalItem().getKey())) {
-            restClient.create(schemaType, modelObject);
+            SchemaRestClient.create(schemaType, modelObject);
         } else {
-            restClient.update(schemaType, modelObject);
+            SchemaRestClient.update(schemaType, modelObject);
         }
 
         return null;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
index 27fab14..124b5f8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
@@ -34,8 +34,6 @@ public class SecurityQuestionsModalPanel extends AbstractModalPanel<SecurityQues
 
     private final SecurityQuestionTO securityQuestionTO;
 
-    private final SecurityQuestionRestClient restClient = new SecurityQuestionRestClient();
-
     public SecurityQuestionsModalPanel(
             final BaseModal<SecurityQuestionTO> modal,
             final SecurityQuestionTO securityQuestionTO,
@@ -55,9 +53,9 @@ public class SecurityQuestionsModalPanel extends AbstractModalPanel<SecurityQues
     public void onSubmit(final AjaxRequestTarget target) {
         try {
             if (securityQuestionTO.getKey() == null) {
-                restClient.create(securityQuestionTO);
+                SecurityQuestionRestClient.create(securityQuestionTO);
             } else {
-                restClient.update(securityQuestionTO);
+                SecurityQuestionRestClient.update(securityQuestionTO);
             }
 
             SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index 3941668..925cf01 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -158,7 +158,7 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
             @Override
             public void onClick(final AjaxRequestTarget target, final SecurityQuestionTO ignore) {
                 try {
-                    restClient.delete(model.getObject().getKey());
+                    SecurityQuestionRestClient.delete(model.getObject().getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (Exception e) {
@@ -186,14 +186,14 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
 
         @Override
         public Iterator<SecurityQuestionTO> iterator(final long first, final long count) {
-            final List<SecurityQuestionTO> list = restClient.list();
+            final List<SecurityQuestionTO> list = SecurityQuestionRestClient.list();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return SecurityQuestionRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
index 1290702..088268f 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TogglePanel.java
@@ -232,7 +232,7 @@ public abstract class TogglePanel<T extends Serializable> extends WizardMgtPanel
                 target.appendJavaScript(
                         selector + ".toggle(\"slow\");"
                         + selector + ".attr(\"class\", \""
-                        + ToggleMenuCSS.CLASS.value() + " " + ToggleMenuCSS.CLASS_ACTIVE.value() + "\");");
+                        + ToggleMenuCSS.CLASS.value() + ' ' + ToggleMenuCSS.CLASS_ACTIVE.value() + "\");");
                 status = Status.ACTIVE;
             } else if (status == Status.ACTIVE) {
                 // useful when handling action menu after refreshing (ref. SYNCOPE-1134)
@@ -245,7 +245,7 @@ public abstract class TogglePanel<T extends Serializable> extends WizardMgtPanel
             target.appendJavaScript(
                     selector + ".toggle(\"slow\");"
                     + selector + ".attr(\"class\", \""
-                    + ToggleMenuCSS.CLASS.value() + " " + ToggleMenuCSS.CLASS_INACTIVE.value() + "\");");
+                    + ToggleMenuCSS.CLASS.value() + ' ' + ToggleMenuCSS.CLASS_INACTIVE.value() + "\");");
             status = Status.INACTIVE;
         }
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
index 300e470..f2cc570 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
@@ -52,10 +52,6 @@ public abstract class AbstractSearchPanel extends Panel {
 
     protected static final Logger LOG = LoggerFactory.getLogger(AbstractSearchPanel.class);
 
-    protected AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
-    protected SchemaRestClient schemaRestClient = new SchemaRestClient();
-
     protected IModel<List<String>> dnames;
 
     protected IModel<Map<String, PlainSchemaTO>> anames;
@@ -183,8 +179,8 @@ public abstract class AbstractSearchPanel extends Panel {
 
             @Override
             protected Map<String, PlainSchemaTO> load() {
-                return schemaRestClient.<PlainSchemaTO>getSchemas(
-                        SchemaType.PLAIN, null, anyTypeRestClient.read(type).getClasses().toArray(new String[] {})).
+                return SchemaRestClient.<PlainSchemaTO>getSchemas(
+                        SchemaType.PLAIN, null, AnyTypeRestClient.read(type).getClasses().toArray(new String[] {})).
                         stream().collect(Collectors.toMap(SchemaTO::getKey, Function.identity()));
             }
         };
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
index fab05ab..002971c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
@@ -231,7 +231,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                         return resources;
 
                     case RELATIONSHIP:
-                        final List<String> relations = new RelationshipTypeRestClient().list().stream().
+                        final List<String> relations = RelationshipTypeRestClient.list().stream().
                                 map(RelationshipTypeTO::getKey).collect(Collectors.toList());
                         return relations;
 
@@ -404,11 +404,11 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                                 ? inputAsArray[1]
                                 : property.getField().getInput();
                         inputValue = (inputValue.startsWith("*") && !inputValue.endsWith("*"))
-                                ? inputValue + "*"
+                                ? inputValue + '*'
                                 : (!inputValue.startsWith("*") && inputValue.endsWith("*"))
-                                ? "*" + inputValue
+                                ? '*' + inputValue
                                 : (inputValue.startsWith("*") && inputValue.endsWith("*")
-                                ? inputValue : "*" + inputValue + "*");
+                                ? inputValue : '*' + inputValue + '*');
 
                         if (groupInfo.getRight() > AnyObjectSearchPanel.MAX_GROUP_LIST_CARDINALITY) {
                             property.setChoices(groupRestClient.search(
@@ -639,7 +639,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
         }
     }
 
-    private IChoiceRenderer<SearchClause.Comparator> getComparatorRender(final IModel<SearchClause> clause) {
+    private static IChoiceRenderer<SearchClause.Comparator> getComparatorRender(final IModel<SearchClause> clause) {
         return new IChoiceRenderer<SearchClause.Comparator>() {
 
             private static final long serialVersionUID = -9086043750227867686L;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
index 9de89ef..e2e3e56 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
@@ -32,10 +32,6 @@ public final class UserSearchPanel extends AnyObjectSearchPanel {
 
     private static final long serialVersionUID = -1769527800450203738L;
 
-    private final RoleRestClient roleRestClient = new RoleRestClient();
-
-    private final ApplicationRestClient applicationRestClient = new ApplicationRestClient();
-
     public static class Builder extends AnyObjectSearchPanel.Builder {
 
         private static final long serialVersionUID = 6308997285778809578L;
@@ -64,7 +60,7 @@ public final class UserSearchPanel extends AnyObjectSearchPanel {
 
             @Override
             protected List<String> load() {
-                return roleRestClient.list().stream().map(EntityTO::getKey).collect(Collectors.toList());
+                return RoleRestClient.list().stream().map(EntityTO::getKey).collect(Collectors.toList());
             }
         };
 
@@ -74,7 +70,7 @@ public final class UserSearchPanel extends AnyObjectSearchPanel {
 
             @Override
             protected List<String> load() {
-                return applicationRestClient.list().stream().
+                return ApplicationRestClient.list().stream().
                         flatMap(application -> application.getPrivileges().stream()).
                         map(EntityTO::getKey).collect(Collectors.toList());
             }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
index b2b8892..dfc0ff1 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
@@ -146,7 +146,7 @@ public abstract class PolicyDirectoryPanel<T extends PolicyTO>
             public void onClick(final AjaxRequestTarget target, final PolicyTO ignore) {
                 send(PolicyDirectoryPanel.this, Broadcast.EXACT,
                         new AjaxWizard.EditItemActionEvent<>(
-                                restClient.getPolicy(type, model.getObject().getKey()), target));
+                                PolicyRestClient.getPolicy(type, model.getObject().getKey()), target));
             }
         }, ActionLink.ActionType.EDIT, IdRepoEntitlement.POLICY_UPDATE);
 
@@ -173,7 +173,7 @@ public abstract class PolicyDirectoryPanel<T extends PolicyTO>
             public void onClick(final AjaxRequestTarget target, final PolicyTO ignore) {
                 final T policyTO = model.getObject();
                 try {
-                    restClient.delete(type, policyTO.getKey());
+                    PolicyRestClient.delete(type, policyTO.getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -224,14 +224,14 @@ public abstract class PolicyDirectoryPanel<T extends PolicyTO>
 
         @Override
         public Iterator<T> iterator(final long first, final long count) {
-            List<T> list = restClient.getPolicies(type);
+            List<T> list = PolicyRestClient.getPolicies(type);
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.getPolicies(type).size();
+            return PolicyRestClient.getPolicies(type).size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
index c0d0f2f..4a29eaa 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
@@ -61,8 +61,6 @@ public class PolicyModalPanelBuilder<T extends PolicyTO> extends AbstractModalPa
 
     private final PolicyType type;
 
-    private final PolicyRestClient restClient = new PolicyRestClient();
-
     public PolicyModalPanelBuilder(
             final PolicyType type, final T policyTO, final BaseModal<T> modal, final PageReference pageRef) {
 
@@ -158,9 +156,9 @@ public class PolicyModalPanelBuilder<T extends PolicyTO> extends AbstractModalPa
         public void onSubmit(final AjaxRequestTarget target) {
             try {
                 if (policyTO.getKey() == null) {
-                    restClient.createPolicy(type, policyTO);
+                    PolicyRestClient.createPolicy(type, policyTO);
                 } else {
-                    restClient.updatePolicy(type, policyTO);
+                    PolicyRestClient.updatePolicy(type, policyTO);
                 }
                 SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                 Profile.this.modal.close(target);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
index b08eaac..0ad24dd 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
@@ -167,10 +167,10 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
             public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) {
                 RuleConf rule = model.getObject().getConf();
                 try {
-                    T actual = restClient.getPolicy(type, policy);
+                    T actual = PolicyRestClient.getPolicy(type, policy);
                     if (actual instanceof ComposablePolicy) {
                         ((ComposablePolicy) actual).getRules().remove(model.getObject().getImplementationKey());
-                        restClient.updatePolicy(type, actual);
+                        PolicyRestClient.updatePolicy(type, actual);
 
                         SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                         customActionOnFinishCallback(target);
@@ -224,8 +224,6 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
 
         private static final long serialVersionUID = 4725679400450513556L;
 
-        private final ImplementationRestClient implementationClient = new ImplementationRestClient();
-
         private final SortableDataProviderComparator<PolicyRuleWrapper> comparator;
 
         public PolicyRuleDataProvider(final int paginatorRows) {
@@ -239,7 +237,7 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
         @SuppressWarnings("unchecked")
         private List<PolicyRuleWrapper> getPolicyRuleWrappers(final ComposablePolicy policy) {
             return policy.getRules().stream().map(rule -> {
-                ImplementationTO implementation = implementationClient.read(implementationType, rule);
+                ImplementationTO implementation = ImplementationRestClient.read(implementationType, rule);
 
                 PolicyRuleWrapper wrapper = new PolicyRuleWrapper(false).
                         setImplementationKey(implementation.getKey()).
@@ -259,7 +257,7 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
 
         @Override
         public Iterator<PolicyRuleWrapper> iterator(final long first, final long count) {
-            final T actual = restClient.getPolicy(type, policy);
+            final T actual = PolicyRestClient.getPolicy(type, policy);
 
             List<PolicyRuleWrapper> rules = actual instanceof ComposablePolicy
                     ? getPolicyRuleWrappers((ComposablePolicy) actual)
@@ -271,7 +269,7 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
 
         @Override
         public long size() {
-            final T actual = restClient.getPolicy(type, policy);
+            final T actual = PolicyRestClient.getPolicy(type, policy);
             return actual instanceof ComposablePolicy
                     ? getPolicyRuleWrappers((ComposablePolicy) actual).size()
                     : 0;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleWizardBuilder.java
index ea48fc3..364dc96 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleWizardBuilder.java
@@ -51,10 +51,6 @@ public class PolicyRuleWizardBuilder extends BaseAjaxWizardBuilder<PolicyRuleWra
 
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
-    private final ImplementationRestClient implementationClient = new ImplementationRestClient();
-
-    private final PolicyRestClient restClient = new PolicyRestClient();
-
     private final String policy;
 
     private final PolicyType type;
@@ -78,7 +74,7 @@ public class PolicyRuleWizardBuilder extends BaseAjaxWizardBuilder<PolicyRuleWra
 
     @Override
     protected Serializable onApplyInternal(final PolicyRuleWrapper modelObject) {
-        PolicyTO policyTO = restClient.getPolicy(type, policy);
+        PolicyTO policyTO = PolicyRestClient.getPolicy(type, policy);
 
         ComposablePolicy composable;
         if (policyTO instanceof ComposablePolicy) {
@@ -88,10 +84,11 @@ public class PolicyRuleWizardBuilder extends BaseAjaxWizardBuilder<PolicyRuleWra
         }
 
         if (modelObject.getImplementationEngine() == ImplementationEngine.JAVA) {
-            ImplementationTO rule = implementationClient.read(implementationType, modelObject.getImplementationKey());
+            ImplementationTO rule = ImplementationRestClient.read(implementationType,
+                modelObject.getImplementationKey());
             try {
                 rule.setBody(MAPPER.writeValueAsString(modelObject.getConf()));
-                implementationClient.update(rule);
+                ImplementationRestClient.update(rule);
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
@@ -101,7 +98,7 @@ public class PolicyRuleWizardBuilder extends BaseAjaxWizardBuilder<PolicyRuleWra
             composable.getRules().add(modelObject.getImplementationKey());
         }
 
-        restClient.updatePolicy(type, policyTO);
+        PolicyRestClient.updatePolicy(type, policyTO);
         return modelObject;
     }
 
@@ -127,12 +124,12 @@ public class PolicyRuleWizardBuilder extends BaseAjaxWizardBuilder<PolicyRuleWra
             List<String> choices;
             switch (type) {
                 case ACCOUNT:
-                    choices = implementationClient.list(IdRepoImplementationType.ACCOUNT_RULE).stream().
+                    choices = ImplementationRestClient.list(IdRepoImplementationType.ACCOUNT_RULE).stream().
                             map(EntityTO::getKey).sorted().collect(Collectors.toList());
                     break;
 
                 case PASSWORD:
-                    choices = implementationClient.list(IdRepoImplementationType.PASSWORD_RULE).stream().
+                    choices = ImplementationRestClient.list(IdRepoImplementationType.PASSWORD_RULE).stream().
                             map(EntityTO::getKey).sorted().collect(Collectors.toList());
                     break;
 
@@ -150,7 +147,7 @@ public class PolicyRuleWizardBuilder extends BaseAjaxWizardBuilder<PolicyRuleWra
 
                 @Override
                 protected void onEvent(final AjaxRequestTarget target) {
-                    ImplementationTO impl = implementationClient.read(implementationType, conf.getModelObject());
+                    ImplementationTO impl = ImplementationRestClient.read(implementationType, conf.getModelObject());
                     rule.setImplementationEngine(impl.getEngine());
                     if (impl.getEngine() == ImplementationEngine.JAVA) {
                         try {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
index 07dd7dc..7796ea4 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
@@ -140,7 +140,7 @@ public abstract class ReportDirectoryPanel
 
                 Component panel;
                 try {
-                    JobTO jobTO = restClient.getJob(rowModel.getObject().getKey());
+                    JobTO jobTO = ReportRestClient.getJob(rowModel.getObject().getKey());
                     panel = new JobActionPanel(componentId, jobTO, false, ReportDirectoryPanel.this, pageRef);
                     MetaDataRoleAuthorizationStrategy.authorize(panel, WebPage.ENABLE,
                             String.format("%s,%s",
@@ -184,7 +184,7 @@ public abstract class ReportDirectoryPanel
             public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
                 send(ReportDirectoryPanel.this, Broadcast.EXACT,
                         new AjaxWizard.EditItemActionEvent<>(
-                                restClient.read(model.getObject().getKey()), target));
+                                ReportRestClient.read(model.getObject().getKey()), target));
             }
         }, ActionLink.ActionType.EDIT, IdRepoEntitlement.REPORT_UPDATE);
 
@@ -246,7 +246,7 @@ public abstract class ReportDirectoryPanel
             public void onClick(final AjaxRequestTarget target, final ReportTO ignore) {
                 final ReportTO reportTO = model.getObject();
                 try {
-                    restClient.delete(reportTO.getKey());
+                    ReportRestClient.delete(reportTO.getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                 } catch (SyncopeClientException e) {
@@ -295,14 +295,14 @@ public abstract class ReportDirectoryPanel
 
         @Override
         public Iterator<ReportTO> iterator(final long first, final long count) {
-            List<ReportTO> list = restClient.list();
+            List<ReportTO> list = ReportRestClient.list();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.list().size();
+            return ReportRestClient.list().size();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java
index bb5df33..a152fbb 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java
@@ -160,7 +160,7 @@ public class ReportExecutionDetails extends MultilevelPanel.SecondLevel {
 
         private void createResourceStream() {
             if (stream == null) {
-                stream = new HttpResourceStream(new ReportRestClient().exportExecutionResult(execution, exportFormat));
+                stream = new HttpResourceStream(ReportRestClient.exportExecutionResult(execution, exportFormat));
             }
         }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
index 3c86969..d94beb4 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
@@ -49,9 +49,9 @@ public class ReportWizardBuilder extends BaseAjaxWizardBuilder<ReportTO> {
     protected Serializable onApplyInternal(final ReportTO modelObject) {
         modelObject.setCronExpression(crontabPanel.getCronExpression());
         if (modelObject.getKey() == null) {
-            restClient.create(modelObject);
+            ReportRestClient.create(modelObject);
         } else {
-            restClient.update(modelObject);
+            ReportRestClient.update(modelObject);
         }
         return modelObject;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
index f6b162d..43b04b8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
@@ -156,9 +156,9 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
             public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) {
                 final ReportletConf reportlet = model.getObject().getConf();
                 try {
-                    final ReportTO actual = restClient.read(report);
+                    final ReportTO actual = ReportRestClient.read(report);
                     actual.getReportlets().remove(model.getObject().getImplementationKey());
-                    restClient.update(actual);
+                    ReportRestClient.update(actual);
 
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     customActionOnFinishCallback(target);
@@ -211,8 +211,6 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
 
         private static final long serialVersionUID = 4725679400450513556L;
 
-        private final ImplementationRestClient implementationClient = new ImplementationRestClient();
-
         private final SortableDataProviderComparator<ReportletWrapper> comparator;
 
         public ReportDataProvider(final int paginatorRows) {
@@ -225,7 +223,7 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
 
         private List<ReportletWrapper> getReportletWrappers(final ReportTO reportTO) {
             return reportTO.getReportlets().stream().map(reportlet -> {
-                ImplementationTO impl = implementationClient.read(IdRepoImplementationType.REPORTLET, reportlet);
+                ImplementationTO impl = ImplementationRestClient.read(IdRepoImplementationType.REPORTLET, reportlet);
 
                 ReportletWrapper wrapper = new ReportletWrapper(false).
                         setImplementationKey(impl.getKey()).
@@ -245,7 +243,7 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
 
         @Override
         public Iterator<ReportletWrapper> iterator(final long first, final long count) {
-            final ReportTO actual = restClient.read(report);
+            final ReportTO actual = ReportRestClient.read(report);
 
             List<ReportletWrapper> reportlets = getReportletWrappers(actual);
 
@@ -255,7 +253,7 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
 
         @Override
         public long size() {
-            final ReportTO actual = restClient.read(report);
+            final ReportTO actual = ReportRestClient.read(report);
             return getReportletWrappers(actual).size();
         }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWizardBuilder.java
index 4b48a46..434d187 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWizardBuilder.java
@@ -47,10 +47,6 @@ public class ReportletWizardBuilder extends BaseAjaxWizardBuilder<ReportletWrapp
 
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
-    private final ImplementationRestClient implementationClient = new ImplementationRestClient();
-
-    private final ReportRestClient restClient = new ReportRestClient();
-
     private final String report;
 
     public ReportletWizardBuilder(
@@ -64,22 +60,22 @@ public class ReportletWizardBuilder extends BaseAjaxWizardBuilder<ReportletWrapp
     @Override
     protected Serializable onApplyInternal(final ReportletWrapper modelObject) {
         if (modelObject.getImplementationEngine() == ImplementationEngine.JAVA) {
-            ImplementationTO reportlet = implementationClient.read(
+            ImplementationTO reportlet = ImplementationRestClient.read(
                     IdRepoImplementationType.REPORTLET, modelObject.getImplementationKey());
             try {
                 reportlet.setBody(MAPPER.writeValueAsString(modelObject.getConf()));
-                implementationClient.update(reportlet);
+                ImplementationRestClient.update(reportlet);
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
         }
 
-        ReportTO reportTO = restClient.read(report);
+        ReportTO reportTO = ReportRestClient.read(report);
         if (modelObject.isNew()) {
             reportTO.getReportlets().add(modelObject.getImplementationKey());
         }
 
-        restClient.update(reportTO);
+        ReportRestClient.update(reportTO);
         return modelObject;
     }
 
@@ -99,7 +95,7 @@ public class ReportletWizardBuilder extends BaseAjaxWizardBuilder<ReportletWrapp
             final AjaxDropDownChoicePanel<String> conf = new AjaxDropDownChoicePanel<>(
                     "reportlet", getString("reportlet"), new PropertyModel<>(reportlet, "implementationKey"));
 
-            conf.setChoices(implementationClient.list(IdRepoImplementationType.REPORTLET).stream().
+            conf.setChoices(ImplementationRestClient.list(IdRepoImplementationType.REPORTLET).stream().
                     map(EntityTO::getKey).sorted().collect(Collectors.toList()));
             conf.addRequiredLabel();
             conf.setNullValid(false);
@@ -110,7 +106,7 @@ public class ReportletWizardBuilder extends BaseAjaxWizardBuilder<ReportletWrapp
 
                 @Override
                 protected void onEvent(final AjaxRequestTarget target) {
-                    ImplementationTO impl = implementationClient.read(
+                    ImplementationTO impl = ImplementationRestClient.read(
                             IdRepoImplementationType.REPORTLET, conf.getModelObject());
                     reportlet.setImplementationEngine(impl.getEngine());
                     if (impl.getEngine() == ImplementationEngine.JAVA) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
index d4a580a..3f38b87 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
@@ -72,7 +72,7 @@ public abstract class AbstractAnyRestClient<TO extends AnyTO> extends BaseRestCl
         return result;
     }
 
-    private List<BatchResponseItem> parseBatchResponse(final Response response) throws IOException {
+    private static List<BatchResponseItem> parseBatchResponse(final Response response) throws IOException {
         return BatchPayloadParser.parse(
                 (InputStream) response.getEntity(), response.getMediaType(), new BatchResponseItem());
     }
@@ -148,7 +148,7 @@ public abstract class AbstractAnyRestClient<TO extends AnyTO> extends BaseRestCl
         return result;
     }
 
-    public Map<String, String> batch(final BatchRequest batchRequest) {
+    public static Map<String, String> batch(final BatchRequest batchRequest) {
         List<BatchRequestItem> batchRequestItems = new ArrayList<>(batchRequest.getItems());
 
         Map<String, String> result = new LinkedHashMap<>();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AccessTokenRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AccessTokenRestClient.java
index 50b917c..356a1b4 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AccessTokenRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AccessTokenRestClient.java
@@ -31,17 +31,17 @@ public class AccessTokenRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -3161863874876938094L;
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(AccessTokenService.class).delete(key);
     }
 
-    public int count() {
+    public static int count() {
         return getService(AccessTokenService.class).list(
                 new AccessTokenQuery.Builder().page(1).size(1).build()).
                 getTotalCount();
     }
 
-    public List<AccessTokenTO> list(final int page, final int size, final SortParam<String> sort) {
+    public static List<AccessTokenTO> list(final int page, final int size, final SortParam<String> sort) {
         return getService(AccessTokenService.class).list(
                 new AccessTokenQuery.Builder().page(page).size(size).orderBy(toOrderBy(sort)).build()).
                 getResult();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
index 9b47662..eab12a8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
@@ -42,7 +42,7 @@ public class AnyObjectRestClient extends AbstractAnyRestClient<AnyObjectTO> {
         return AnyObjectService.class;
     }
 
-    public ProvisioningResult<AnyObjectTO> create(final AnyObjectCR createReq) {
+    public static ProvisioningResult<AnyObjectTO> create(final AnyObjectCR createReq) {
         Response response = getService(AnyObjectService.class).create(createReq);
         return response.readEntity(new GenericType<ProvisioningResult<AnyObjectTO>>() {
         });
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
index 39fac46..ef09262 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
@@ -29,23 +29,23 @@ public class AnyTypeClassRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -2211371717449597247L;
 
-    public void create(final AnyTypeClassTO anyTypeClass) {
+    public static void create(final AnyTypeClassTO anyTypeClass) {
         getService(AnyTypeClassService.class).create(anyTypeClass);
     }
 
-    public void update(final AnyTypeClassTO anyTypeClass) {
+    public static void update(final AnyTypeClassTO anyTypeClass) {
         getService(AnyTypeClassService.class).update(anyTypeClass);
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(AnyTypeClassService.class).delete(key);
     }
 
-    public AnyTypeClassTO read(final String key) {
+    public static AnyTypeClassTO read(final String key) {
         return getService(AnyTypeClassService.class).read(key);
     }
 
-    public List<AnyTypeClassTO> list() {
+    public static List<AnyTypeClassTO> list() {
         List<AnyTypeClassTO> types = List.of();
 
         try {
@@ -57,7 +57,7 @@ public class AnyTypeClassRestClient extends BaseRestClient {
         return types;
     }
 
-    public List<AnyTypeClassTO> list(final Collection<String> anyTypeClassNames) {
+    public static List<AnyTypeClassTO> list(final Collection<String> anyTypeClassNames) {
         List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<>();
         for (String anyTypeClass : anyTypeClassNames) {
             anyTypeClassTOs.add(read(anyTypeClass));
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
index 8f1b75b..6221d85 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
@@ -33,11 +33,9 @@ public class AnyTypeRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -2211371717449597247L;
 
-    private static final AnyTypeComparator COMPARATOR = new AnyTypeComparator();
-
     public static final Comparator<String> KEY_COMPARATOR = new AnyTypeKeyComparator();
 
-    public AnyTypeTO read(final String key) {
+    public static AnyTypeTO read(final String key) {
         AnyTypeTO type = null;
 
         try {
@@ -49,7 +47,7 @@ public class AnyTypeRestClient extends BaseRestClient {
         return type;
     }
 
-    public List<AnyTypeTO> listAnyTypes() {
+    public static List<AnyTypeTO> listAnyTypes() {
         List<AnyTypeTO> types = List.of();
 
         try {
@@ -62,21 +60,21 @@ public class AnyTypeRestClient extends BaseRestClient {
         return types;
     }
 
-    public List<String> list() {
+    public static List<String> list() {
         List<String> types = getSyncopeService().platform().getAnyTypes();
         Collections.sort(types, new AnyTypeKeyComparator());
         return types;
     }
 
-    public void create(final AnyTypeTO anyTypeTO) {
+    public static void create(final AnyTypeTO anyTypeTO) {
         getService(AnyTypeService.class).create(anyTypeTO);
     }
 
-    public void update(final AnyTypeTO anyTypeTO) {
+    public static void update(final AnyTypeTO anyTypeTO) {
         getService(AnyTypeService.class).update(anyTypeTO);
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(AnyTypeService.class).delete(key);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ApplicationRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ApplicationRestClient.java
index 0c765f8..25c5d14 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ApplicationRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ApplicationRestClient.java
@@ -26,23 +26,23 @@ public class ApplicationRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -381814125643246243L;
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(ApplicationService.class).delete(key);
     }
 
-    public ApplicationTO read(final String key) {
+    public static ApplicationTO read(final String key) {
         return getService(ApplicationService.class).read(key);
     }
 
-    public void update(final ApplicationTO applicationTO) {
+    public static void update(final ApplicationTO applicationTO) {
         getService(ApplicationService.class).update(applicationTO);
     }
 
-    public void create(final ApplicationTO applicationTO) {
+    public static void create(final ApplicationTO applicationTO) {
         getService(ApplicationService.class).create(applicationTO);
     }
 
-    public List<ApplicationTO> list() {
+    public static List<ApplicationTO> list() {
         return getService(ApplicationService.class).list();
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/DynRealmRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/DynRealmRestClient.java
index 5bc61d4..0d880de 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/DynRealmRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/DynRealmRestClient.java
@@ -29,19 +29,19 @@ public class DynRealmRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -8549081557283519638L;
 
-    public List<DynRealmTO> list() {
+    public static List<DynRealmTO> list() {
         return getService(DynRealmService.class).list();
     }
 
-    public void create(final DynRealmTO dynRealmTO) {
+    public static void create(final DynRealmTO dynRealmTO) {
         getService(DynRealmService.class).create(dynRealmTO);
     }
 
-    public void update(final DynRealmTO dynRealmTO) {
+    public static void update(final DynRealmTO dynRealmTO) {
         getService(DynRealmService.class).update(dynRealmTO);
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(DynRealmService.class).delete(key);
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
index cea9301..8d843ec 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
@@ -43,7 +43,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
         return GroupService.class;
     }
 
-    public ProvisioningResult<GroupTO> create(final GroupCR groupCR) {
+    public static ProvisioningResult<GroupTO> create(final GroupCR groupCR) {
         Response response = getService(GroupService.class).create(groupCR);
         return response.readEntity(new GenericType<ProvisioningResult<GroupTO>>() {
         });
@@ -81,7 +81,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
                         orderBy(toOrderBy(sort)).details(false).build()).getResult();
     }
 
-    public void provisionMembers(final String key, final ProvisionAction actionType) {
+    public static void provisionMembers(final String key, final ProvisionAction actionType) {
         getService(GroupService.class).provisionMembers(key, actionType);
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ImplementationRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ImplementationRestClient.java
index 73d0b1a..2728e0b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ImplementationRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ImplementationRestClient.java
@@ -26,23 +26,23 @@ public class ImplementationRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -4111950555473526287L;
 
-    public List<ImplementationTO> list(final String type) {
+    public static List<ImplementationTO> list(final String type) {
         return getService(ImplementationService.class).list(type);
     }
 
-    public ImplementationTO read(final String type, final String key) {
+    public static ImplementationTO read(final String type, final String key) {
         return getService(ImplementationService.class).read(type, key);
     }
 
-    public void create(final ImplementationTO implementation) {
+    public static void create(final ImplementationTO implementation) {
         getService(ImplementationService.class).create(implementation);
     }
 
-    public void update(final ImplementationTO implementation) {
+    public static void update(final ImplementationTO implementation) {
         getService(ImplementationService.class).update(implementation);
     }
 
-    public void delete(final String type, final String key) {
+    public static void delete(final String type, final String key) {
         getService(ImplementationService.class).delete(type, key);
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
index 8ae1d2c..3424bfd 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
@@ -41,12 +41,12 @@ public class LoggerRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = 4579786978763032240L;
 
-    public List<String> listMemoryAppenders() {
+    public static List<String> listMemoryAppenders() {
         return getService(LoggerService.class).memoryAppenders().stream().
                 map(LogAppender::getName).collect(Collectors.toList());
     }
 
-    public List<LogStatement> getLastLogStatements(final String appender, final long lastStatementTime) {
+    public static List<LogStatement> getLastLogStatements(final String appender, final long lastStatementTime) {
         List<LogStatement> result = new ArrayList<>();
         getService(LoggerService.class).getLastLogStatements(appender).stream().
                 filter(statement -> statement.getTimeMillis() > lastStatementTime).
@@ -55,18 +55,18 @@ public class LoggerRestClient extends BaseRestClient {
         return result;
     }
 
-    public List<LoggerTO> listLogs() {
+    public static List<LoggerTO> listLogs() {
         List<LoggerTO> logs = getService(LoggerService.class).list(LoggerType.LOG);
         Collections.sort(logs, (o1, o2) -> ObjectUtils.compare(o1.getKey(), o2.getKey()));
 
         return logs;
     }
 
-    public List<AuditLoggerName> listAudits() {
+    public static List<AuditLoggerName> listAudits() {
         return LoggerWrapper.wrap(getService(LoggerService.class).list(LoggerType.AUDIT));
     }
 
-    public Map<String, Set<AuditLoggerName>> listAuditsByCategory() {
+    public static Map<String, Set<AuditLoggerName>> listAuditsByCategory() {
         Map<String, Set<AuditLoggerName>> result = new HashMap<>();
         listAudits().forEach(audit -> {
             if (!result.containsKey(audit.getCategory())) {
@@ -79,26 +79,26 @@ public class LoggerRestClient extends BaseRestClient {
         return result;
     }
 
-    public void setLogLevel(final LoggerTO loggerTO) {
+    public static void setLogLevel(final LoggerTO loggerTO) {
         getService(LoggerService.class).update(LoggerType.LOG, loggerTO);
     }
 
-    public void enableAudit(final AuditLoggerName auditLoggerName) {
+    public static void enableAudit(final AuditLoggerName auditLoggerName) {
         LoggerTO loggerTO = new LoggerTO();
         loggerTO.setKey(auditLoggerName.toLoggerName());
         loggerTO.setLevel(LoggerLevel.DEBUG);
         getService(LoggerService.class).update(LoggerType.AUDIT, loggerTO);
     }
 
-    public void deleteLog(final String name) {
+    public static void deleteLog(final String name) {
         getService(LoggerService.class).delete(LoggerType.LOG, name);
     }
 
-    public void disableAudit(final AuditLoggerName auditLoggerName) {
+    public static void disableAudit(final AuditLoggerName auditLoggerName) {
         getService(LoggerService.class).delete(LoggerType.AUDIT, auditLoggerName.toLoggerName());
     }
 
-    public List<EventCategory> listEvents() {
+    public static List<EventCategory> listEvents() {
         try {
             return getService(LoggerService.class).events();
         } catch (Exception e) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
index 3422545..065c27e 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
@@ -36,31 +36,31 @@ public class NotificationRestClient extends BaseRestClient
 
     private static final long serialVersionUID = 6328933265096511690L;
 
-    public List<NotificationTO> list() {
+    public static List<NotificationTO> list() {
         return getService(NotificationService.class).list();
     }
 
-    public JobTO getJob() {
+    public static JobTO getJob() {
         return getService(NotificationService.class).getJob();
     }
 
-    public void actionJob(final JobAction jobAction) {
+    public static void actionJob(final JobAction jobAction) {
         getService(NotificationService.class).actionJob(jobAction);
     }
 
-    public NotificationTO read(final String key) {
+    public static NotificationTO read(final String key) {
         return getService(NotificationService.class).read(key);
     }
 
-    public void create(final NotificationTO notificationTO) {
+    public static void create(final NotificationTO notificationTO) {
         getService(NotificationService.class).create(notificationTO);
     }
 
-    public void update(final NotificationTO notificationTO) {
+    public static void update(final NotificationTO notificationTO) {
         getService(NotificationService.class).update(notificationTO);
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(NotificationService.class).delete(key);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
index f9fd677..78032c2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
@@ -36,7 +36,7 @@ public class PolicyRestClient extends BaseRestClient {
 
     private static final PolicyComparator COMPARATOR = new PolicyComparator();
 
-    public <T extends PolicyTO> T getPolicy(final PolicyType type, final String key) {
+    public static <T extends PolicyTO> T getPolicy(final PolicyType type, final String key) {
         T policy = null;
         try {
             policy = getService(PolicyService.class).read(type, key);
@@ -47,7 +47,7 @@ public class PolicyRestClient extends BaseRestClient {
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends PolicyTO> List<T> getPolicies(final PolicyType type) {
+    public static <T extends PolicyTO> List<T> getPolicies(final PolicyType type) {
         try {
             return getService(PolicyService.class).<T>list(type).stream().
                     sorted(COMPARATOR).
@@ -58,15 +58,15 @@ public class PolicyRestClient extends BaseRestClient {
         }
     }
 
-    public <T extends PolicyTO> void createPolicy(final PolicyType type, final T policy) {
+    public static <T extends PolicyTO> void createPolicy(final PolicyType type, final T policy) {
         getService(PolicyService.class).create(type, policy);
     }
 
-    public <T extends PolicyTO> void updatePolicy(final PolicyType type, final T policy) {
+    public static <T extends PolicyTO> void updatePolicy(final PolicyType type, final T policy) {
         getService(PolicyService.class).update(type, policy);
     }
 
-    public void delete(final PolicyType type, final String key) {
+    public static void delete(final PolicyType type, final String key) {
         getService(PolicyService.class).delete(type, key);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
index 2d23df6..54ae734 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
@@ -34,31 +34,31 @@ public class RealmRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -8549081557283519638L;
 
-    public List<RealmTO> list() {
+    public static List<RealmTO> list() {
         return getService(RealmService.class).list();
     }
 
-    public List<DynRealmTO> listDynReams() {
+    public static List<DynRealmTO> listDynReams() {
         return getService(DynRealmService.class).list();
     }
 
-    public DynRealmTO readDynReams(final String key) {
+    public static DynRealmTO readDynReams(final String key) {
         return getService(DynRealmService.class).read(key);
     }
 
-    public ProvisioningResult<RealmTO> create(final String parentPath, final RealmTO realmTO) {
+    public static ProvisioningResult<RealmTO> create(final String parentPath, final RealmTO realmTO) {
         final Response response = getService(RealmService.class).create(parentPath, realmTO);
         return response.readEntity(new GenericType<ProvisioningResult<RealmTO>>() {
         });
     }
 
-    public ProvisioningResult<RealmTO> update(final RealmTO realmTO) {
+    public static ProvisioningResult<RealmTO> update(final RealmTO realmTO) {
         final Response response = getService(RealmService.class).update(realmTO);
         return response.readEntity(new GenericType<ProvisioningResult<RealmTO>>() {
         });
     }
 
-    public void delete(final String fullPath) {
+    public static void delete(final String fullPath) {
         getService(RealmService.class).delete(fullPath);
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RelationshipTypeRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RelationshipTypeRestClient.java
index 564026d..478eca1 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RelationshipTypeRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RelationshipTypeRestClient.java
@@ -27,23 +27,23 @@ public class RelationshipTypeRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -5400007385180229980L;
 
-    public void create(final RelationshipTypeTO relationshipType) {
+    public static void create(final RelationshipTypeTO relationshipType) {
         getService(RelationshipTypeService.class).create(relationshipType);
     }
 
-    public void update(final RelationshipTypeTO relationshipType) {
+    public static void update(final RelationshipTypeTO relationshipType) {
         getService(RelationshipTypeService.class).update(relationshipType);
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(RelationshipTypeService.class).delete(key);
     }
 
-    public RelationshipTypeTO read(final String key) {
+    public static RelationshipTypeTO read(final String key) {
         return getService(RelationshipTypeService.class).read(key);
     }
 
-    public List<RelationshipTypeTO> list() {
+    public static List<RelationshipTypeTO> list() {
         List<RelationshipTypeTO> types = List.of();
 
         try {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
index a80cdcb..3de8715 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
@@ -50,31 +50,31 @@ public class ReportRestClient extends BaseRestClient
 
     private static final long serialVersionUID = 1644689667998953604L;
 
-    public ReportTO read(final String reportKey) {
+    public static ReportTO read(final String reportKey) {
         return getService(ReportService.class).read(reportKey);
     }
 
-    public List<ReportTO> list() {
+    public static List<ReportTO> list() {
         return getService(ReportService.class).list();
     }
 
-    public JobTO getJob(final String key) {
+    public static JobTO getJob(final String key) {
         return getService(ReportService.class).getJob(key);
     }
 
-    public List<JobTO> listJobs() {
+    public static List<JobTO> listJobs() {
         return getService(ReportService.class).listJobs();
     }
 
-    public void actionJob(final String refKey, final JobAction jobAction) {
+    public static void actionJob(final String refKey, final JobAction jobAction) {
         getService(ReportService.class).actionJob(refKey, jobAction);
     }
 
-    public void create(final ReportTO reportTO) {
+    public static void create(final ReportTO reportTO) {
         getService(ReportService.class).create(reportTO);
     }
 
-    public void update(final ReportTO reportTO) {
+    public static void update(final ReportTO reportTO) {
         getService(ReportService.class).update(reportTO);
     }
 
@@ -83,7 +83,7 @@ public class ReportRestClient extends BaseRestClient
      *
      * @param reportKey report to delete
      */
-    public void delete(final String reportKey) {
+    public static void delete(final String reportKey) {
         getService(ReportService.class).delete(reportKey);
     }
 
@@ -102,7 +102,7 @@ public class ReportRestClient extends BaseRestClient
         return getService(ReportService.class).listRecentExecutions(max);
     }
 
-    public Response exportExecutionResult(final String executionKey, final ReportExecExportFormat fmt) {
+    public static Response exportExecutionResult(final String executionKey, final ReportExecExportFormat fmt) {
         return getService(ReportService.class).exportExecutionResult(executionKey, fmt);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RoleRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RoleRestClient.java
index 743bfb5..93f9da4 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RoleRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RoleRestClient.java
@@ -35,27 +35,27 @@ public class RoleRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -3161863874876938094L;
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(RoleService.class).delete(key);
     }
 
-    public RoleTO read(final String key) {
+    public static RoleTO read(final String key) {
         return getService(RoleService.class).read(key);
     }
 
-    public void update(final RoleTO roleTO) {
+    public static void update(final RoleTO roleTO) {
         getService(RoleService.class).update(roleTO);
     }
 
-    public void create(final RoleTO roleTO) {
+    public static void create(final RoleTO roleTO) {
         getService(RoleService.class).create(roleTO);
     }
 
-    public List<RoleTO> list() {
+    public static List<RoleTO> list() {
         return getService(RoleService.class).list();
     }
 
-    public String readConsoleLayoutInfo(final String roleKey) {
+    public static String readConsoleLayoutInfo(final String roleKey) {
         try {
             return IOUtils.toString(InputStream.class.cast(
                     getService(RoleService.class).getConsoleLayoutInfo(roleKey).getEntity()),
@@ -66,16 +66,16 @@ public class RoleRestClient extends BaseRestClient {
         }
     }
 
-    public void setConsoleLayoutInfo(final String roleKey, final String content) {
+    public static void setConsoleLayoutInfo(final String roleKey, final String content) {
         getService(RoleService.class).setConsoleLayoutInfo(
                 roleKey, IOUtils.toInputStream(content, StandardCharsets.UTF_8));
     }
 
-    public void removeConsoleLayoutInfo(final String roleKey) {
+    public static void removeConsoleLayoutInfo(final String roleKey) {
         getService(RoleService.class).removeConsoleLayoutInfo(roleKey);
     }
 
-    public List<String> getAllAvailableEntitlements() {
+    public static List<String> getAllAvailableEntitlements() {
         List<String> entitlements = new ArrayList<>(getSyncopeService().platform().getEntitlements());
         Collections.sort(entitlements);
         return entitlements;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
index 548a688..957de8a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
@@ -42,7 +42,7 @@ public class SchemaRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -2479730152700312373L;
 
-    public <T extends SchemaTO> List<T> getSchemas(final SchemaType schemaType, final AnyTypeKind kind) {
+    public static <T extends SchemaTO> List<T> getSchemas(final SchemaType schemaType, final AnyTypeKind kind) {
         final AnyTypeService client = getService(AnyTypeService.class);
 
         final List<String> classes = new ArrayList<>();
@@ -57,7 +57,7 @@ public class SchemaRestClient extends BaseRestClient {
                 break;
 
             default:
-                new AnyTypeRestClient().listAnyTypes().stream().filter(
+                AnyTypeRestClient.listAnyTypes().stream().filter(
                         anyTypeTO -> (anyTypeTO.getKind() != AnyTypeKind.USER
                         && anyTypeTO.getKind() != AnyTypeKind.GROUP)).
                         forEach((anyTypeTO) -> classes.addAll(anyTypeTO.getClasses()));
@@ -65,8 +65,8 @@ public class SchemaRestClient extends BaseRestClient {
         return getSchemas(schemaType, null, classes.toArray(new String[] {}));
     }
 
-    public <T extends SchemaTO> List<T> getSchemas(
-            final SchemaType schemaType, final String keyword, final String... anyTypeClasses) {
+    public static <T extends SchemaTO> List<T> getSchemas(
+        final SchemaType schemaType, final String keyword, final String... anyTypeClasses) {
 
         SchemaQuery.Builder builder = new SchemaQuery.Builder().type(schemaType);
         if (StringUtils.isNotBlank(keyword)) {
@@ -85,7 +85,7 @@ public class SchemaRestClient extends BaseRestClient {
         return schemas;
     }
 
-    public List<String> getSchemaNames(final SchemaType schemaType) {
+    public static List<String> getSchemaNames(final SchemaType schemaType) {
         List<String> schemaNames = List.of();
 
         try {
@@ -98,44 +98,44 @@ public class SchemaRestClient extends BaseRestClient {
         return schemaNames;
     }
 
-    public List<String> getPlainSchemaNames() {
+    public static List<String> getPlainSchemaNames() {
         return getSchemaNames(SchemaType.PLAIN);
     }
 
-    public List<String> getDerSchemaNames() {
+    public static List<String> getDerSchemaNames() {
         return getSchemaNames(SchemaType.DERIVED);
     }
 
-    public List<String> getVirSchemaNames() {
+    public static List<String> getVirSchemaNames() {
         return getSchemaNames(SchemaType.VIRTUAL);
     }
 
-    public PlainSchemaTO read(final SchemaType schemaType, final String key) {
+    public static PlainSchemaTO read(final SchemaType schemaType, final String key) {
         return getService(SchemaService.class).read(schemaType, key);
 
     }
 
-    public void create(final SchemaType schemaType, final SchemaTO modelObject) {
+    public static void create(final SchemaType schemaType, final SchemaTO modelObject) {
         getService(SchemaService.class).create(schemaType, modelObject);
     }
 
-    public void update(final SchemaType schemaType, final SchemaTO modelObject) {
+    public static void update(final SchemaType schemaType, final SchemaTO modelObject) {
         getService(SchemaService.class).update(schemaType, modelObject);
     }
 
-    public PlainSchemaTO deletePlainSchema(final String name) {
+    public static PlainSchemaTO deletePlainSchema(final String name) {
         PlainSchemaTO response = getService(SchemaService.class).read(SchemaType.PLAIN, name);
         getService(SchemaService.class).delete(SchemaType.PLAIN, name);
         return response;
     }
 
-    public DerSchemaTO deleteDerSchema(final String name) {
+    public static DerSchemaTO deleteDerSchema(final String name) {
         DerSchemaTO schemaTO = getService(SchemaService.class).read(SchemaType.DERIVED, name);
         getService(SchemaService.class).delete(SchemaType.DERIVED, name);
         return schemaTO;
     }
 
-    public VirSchemaTO deleteVirSchema(final String name) {
+    public static VirSchemaTO deleteVirSchema(final String name) {
         VirSchemaTO schemaTO = getService(SchemaService.class).read(SchemaType.VIRTUAL, name);
         getService(SchemaService.class).delete(SchemaType.VIRTUAL, name);
         return schemaTO;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
index 2eb2691..28d04b3 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
@@ -26,23 +26,23 @@ public class SecurityQuestionRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -3167730221361895176L;
 
-    public List<SecurityQuestionTO> list() {
+    public static List<SecurityQuestionTO> list() {
         return getService(SecurityQuestionService.class).list();
     }
 
-    public void create(final SecurityQuestionTO securityQuestionTO) {
+    public static void create(final SecurityQuestionTO securityQuestionTO) {
         getService(SecurityQuestionService.class).create(securityQuestionTO);
     }
 
-    public void update(final SecurityQuestionTO securityQuestionTO) {
+    public static void update(final SecurityQuestionTO securityQuestionTO) {
         getService(SecurityQuestionService.class).update(securityQuestionTO);
     }
 
-    public void delete(final String securityQuestionKey) {
+    public static void delete(final String securityQuestionKey) {
         getService(SecurityQuestionService.class).delete(securityQuestionKey);
     }
 
-    public SecurityQuestionTO readByUser(final String username) {
+    public static SecurityQuestionTO readByUser(final String username) {
         return getService(SecurityQuestionService.class).readByUser(username);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SyncopeRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SyncopeRestClient.java
index 3e0dce2..d70a03d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SyncopeRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SyncopeRestClient.java
@@ -27,15 +27,15 @@ public class SyncopeRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -9013241672773442286L;
 
-    public NumbersInfo numbers() {
+    public static NumbersInfo numbers() {
         return getService(SyncopeService.class).numbers();
     }
 
-    public SystemInfo system() {
+    public static SystemInfo system() {
         return getService(SyncopeService.class).system();
     }
 
-    public Response exportInternalStorageContent() {
+    public static Response exportInternalStorageContent() {
         return getService(SyncopeService.class).exportInternalStorageContent();
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
index 2e6692e..d992cb7 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
@@ -53,35 +53,35 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
 
     private static final long serialVersionUID = 6284485820911028843L;
 
-    public JobTO getJob(final String key) {
+    public static JobTO getJob(final String key) {
         return getService(TaskService.class).getJob(key);
     }
 
-    public List<JobTO> listJobs() {
+    public static List<JobTO> listJobs() {
         return getService(TaskService.class).listJobs();
     }
 
-    public void actionJob(final String refKey, final JobAction jobAction) {
+    public static void actionJob(final String refKey, final JobAction jobAction) {
         getService(TaskService.class).actionJob(refKey, jobAction);
     }
 
-    public int count(final TaskType kind) {
+    public static int count(final TaskType kind) {
         return getService(TaskService.class).search(
                 new TaskQuery.Builder(kind).page(1).size(1).build()).getTotalCount();
     }
 
-    public int count(final String resource, final TaskType kind) {
+    public static int count(final String resource, final TaskType kind) {
         return getService(TaskService.class).search(
                 new TaskQuery.Builder(kind).resource(resource).page(1).size(1).build()).getTotalCount();
     }
 
-    public int count(final AnyTypeKind anyTypeKind, final String entityKey, final TaskType kind) {
+    public static int count(final AnyTypeKind anyTypeKind, final String entityKey, final TaskType kind) {
         return getService(TaskService.class).search(
                 new TaskQuery.Builder(kind).anyTypeKind(anyTypeKind).entityKey(entityKey).page(1).size(1).build()).
                 getTotalCount();
     }
 
-    public int count(final AnyTypeKind anyTypeKind, final String entityKey, final String notification) {
+    public static int count(final AnyTypeKind anyTypeKind, final String entityKey, final String notification) {
         return getService(TaskService.class).search(
                 new TaskQuery.Builder(TaskType.NOTIFICATION).notification(notification).
                         anyTypeKind(anyTypeKind).entityKey(entityKey).page(1).size(1).build()).
@@ -94,7 +94,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 listExecutions(new ExecQuery.Builder().key(taskKey).page(1).size(1).build()).getTotalCount();
     }
 
-    public List<PropagationTaskTO> listPropagationTasks(
+    public static List<PropagationTaskTO> listPropagationTasks(
             final String resource, final int page, final int size, final SortParam<String> sort) {
 
         return getService(TaskService.class).
@@ -105,7 +105,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 getResult();
     }
 
-    public List<PropagationTaskTO> listPropagationTasks(
+    public static List<PropagationTaskTO> listPropagationTasks(
             final AnyTypeKind anyTypeKind, final String entityKey,
             final int page, final int size, final SortParam<String> sort) {
 
@@ -117,7 +117,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 getResult();
     }
 
-    public List<NotificationTaskTO> listNotificationTasks(
+    public static List<NotificationTaskTO> listNotificationTasks(
             final String notification,
             final AnyTypeKind anyTypeKind,
             final String entityKey,
@@ -144,8 +144,8 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends TaskTO> List<T> list(
-            final Class<T> reference, final int page, final int size, final SortParam<String> sort) {
+    public static <T extends TaskTO> List<T> list(
+        final Class<T> reference, final int page, final int size, final SortParam<String> sort) {
 
         return (List<T>) getService(TaskService.class).
                 search(new TaskQuery.Builder(getTaskType(reference)).page(page).size(size).
@@ -153,12 +153,12 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends TaskTO> List<T> list(
-            final String resource,
-            final Class<T> reference,
-            final int page,
-            final int size,
-            final SortParam<String> sort) {
+    public static <T extends TaskTO> List<T> list(
+        final String resource,
+        final Class<T> reference,
+        final int page,
+        final int size,
+        final SortParam<String> sort) {
 
         return (List<T>) getService(TaskService.class).
                 search(new TaskQuery.Builder(getTaskType(reference)).page(page).size(size).resource(resource).
@@ -174,7 +174,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                         orderBy(toOrderBy(sort)).build()).getResult();
     }
 
-    private TaskType getTaskType(final Class<?> reference) {
+    private static TaskType getTaskType(final Class<?> reference) {
         TaskType result = null;
         if (PropagationTaskTO.class.equals(reference)) {
             result = TaskType.PROPAGATION;
@@ -190,19 +190,19 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
         return result;
     }
 
-    public PropagationTaskTO readPropagationTask(final String taskKey) {
+    public static PropagationTaskTO readPropagationTask(final String taskKey) {
         return getService(TaskService.class).read(TaskType.PROPAGATION, taskKey, false);
     }
 
-    public NotificationTaskTO readNotificationTask(final String taskKey) {
+    public static NotificationTaskTO readNotificationTask(final String taskKey) {
         return getService(TaskService.class).read(TaskType.NOTIFICATION, taskKey, false);
     }
 
-    public <T extends TaskTO> T readTask(final TaskType type, final String taskKey) {
+    public static <T extends TaskTO> T readTask(final TaskType type, final String taskKey) {
         return getService(TaskService.class).read(type, taskKey, false);
     }
 
-    public void delete(final TaskType type, final String taskKey) {
+    public static void delete(final TaskType type, final String taskKey) {
         getService(TaskService.class).delete(type, taskKey);
     }
 
@@ -211,7 +211,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
         startExecution(taskKey, start, false);
     }
 
-    public void startExecution(final String taskKey, final Date start, final boolean dryRun) {
+    public static void startExecution(final String taskKey, final Date start, final boolean dryRun) {
         getService(TaskService.class).execute(
                 new ExecuteQuery.Builder().key(taskKey).startAt(start).dryRun(dryRun).build());
     }
@@ -226,11 +226,11 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
         return getService(TaskService.class).listRecentExecutions(max);
     }
 
-    public void create(final TaskType type, final SchedTaskTO taskTO) {
+    public static void create(final TaskType type, final SchedTaskTO taskTO) {
         getService(TaskService.class).create(type, taskTO);
     }
 
-    public void update(final TaskType type, final SchedTaskTO taskTO) {
+    public static void update(final TaskType type, final SchedTaskTO taskTO) {
         getService(TaskService.class).update(type, taskTO);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
index bec9961..f95d253 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
@@ -52,7 +52,7 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
         return UserService.class;
     }
 
-    public ProvisioningResult<UserTO> create(final UserCR createReq) {
+    public static ProvisioningResult<UserTO> create(final UserCR createReq) {
         Response response = getService(UserService.class).create(createReq);
         return response.readEntity(new GenericType<ProvisioningResult<UserTO>>() {
         });
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/UserSelfRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/UserSelfRestClient.java
index 8b81f14..0d8f3b6 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/UserSelfRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/UserSelfRestClient.java
@@ -24,7 +24,7 @@ public class UserSelfRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = 100731599744900931L;
 
-    public void changePassword(final String password) {
+    public static void changePassword(final String password) {
         getService(UserSelfService.class).mustChangePassword(password);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
index 824c2b1..b37df0d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.tasks;
 
 import java.util.Iterator;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.common.lib.to.PropagationTaskTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -60,13 +61,13 @@ public abstract class AnyPropagationTaskDirectoryPanel extends PropagationTaskDi
 
         @Override
         public long size() {
-            return restClient.count(anyTypeKind, entityKey, taskType);
+            return TaskRestClient.count(anyTypeKind, entityKey, taskType);
         }
 
         @Override
         public Iterator<PropagationTaskTO> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return restClient.listPropagationTasks(
+            return TaskRestClient.listPropagationTasks(
                     anyTypeKind, entityKey, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()).
                     iterator();
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
index f8143eb..997b3e8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
@@ -139,7 +139,7 @@ public class CrontabPanel extends Panel {
         });
     }
 
-    private String getCronField(final FormComponent<?> formComponent, final int field) {
+    private static String getCronField(final FormComponent<?> formComponent, final int field) {
         String cronField = null;
 
         if (formComponent != null) {
@@ -149,7 +149,7 @@ public class CrontabPanel extends Panel {
         return cronField;
     }
 
-    private String getCronField(final String cron, final int field) {
+    private static String getCronField(final String cron, final int field) {
         String cronField = null;
 
         if (cron != null && !cron.isEmpty() && !"UNSCHEDULE".equals(cron)) {
@@ -170,11 +170,11 @@ public class CrontabPanel extends Panel {
                 && daysOfWeek != null && daysOfWeek.getModelObject() != null) {
 
             cronExpression = new StringBuilder().
-                    append(seconds.getModelObject().trim()).append(" ").
-                    append(minutes.getModelObject().trim()).append(" ").
-                    append(hours.getModelObject().trim()).append(" ").
-                    append(daysOfMonth.getModelObject().trim()).append(" ").
-                    append(months.getModelObject().trim()).append(" ").
+                    append(seconds.getModelObject().trim()).append(' ').
+                    append(minutes.getModelObject().trim()).append(' ').
+                    append(hours.getModelObject().trim()).append(' ').
+                    append(daysOfMonth.getModelObject().trim()).append(' ').
+                    append(months.getModelObject().trim()).append(' ').
                     append(daysOfWeek.getModelObject().trim()).toString();
         }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
index 93c9604..6579d54 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.IdRepoConstants;
+import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -160,7 +161,7 @@ public abstract class NotificationTaskDirectoryPanel
             @Override
             public void onClick(final AjaxRequestTarget target, final NotificationTaskTO modelObject) {
                 try {
-                    restClient.delete(TaskType.NOTIFICATION, taskTO.getKey());
+                    TaskRestClient.delete(TaskType.NOTIFICATION, taskTO.getKey());
                     updateResultTable(target);
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
@@ -218,13 +219,13 @@ public abstract class NotificationTaskDirectoryPanel
 
         @Override
         public long size() {
-            return restClient.count(anyTypeKind, entityKey, notification);
+            return TaskRestClient.count(anyTypeKind, entityKey, notification);
         }
 
         @Override
         public Iterator<NotificationTaskTO> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return restClient.listNotificationTasks(
+            return TaskRestClient.listNotificationTasks(
                     notification, anyTypeKind, entityKey, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()).
                     iterator();
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
index caa00aa..11e56de 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.IdRepoConstants;
+import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -167,7 +168,7 @@ public abstract class PropagationTaskDirectoryPanel
             @Override
             public void onClick(final AjaxRequestTarget target, final PropagationTaskTO modelObject) {
                 try {
-                    restClient.delete(TaskType.PROPAGATION, taskTO.getKey());
+                    TaskRestClient.delete(TaskType.PROPAGATION, taskTO.getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                     PropagationTaskDirectoryPanel.this.getTogglePanel().close(target);
@@ -211,13 +212,13 @@ public abstract class PropagationTaskDirectoryPanel
 
         @Override
         public long size() {
-            return restClient.count(resource, TaskType.PROPAGATION);
+            return TaskRestClient.count(resource, TaskType.PROPAGATION);
         }
 
         @Override
         public Iterator<PropagationTaskTO> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return restClient.listPropagationTasks(
+            return TaskRestClient.listPropagationTasks(
                     resource, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()).
                     iterator();
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
index d07135d..a861d4d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.client.console.wicket.ajax.IndicatorAjaxTimerBehavior;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
@@ -141,7 +142,7 @@ public abstract class ProvisioningTaskDirectoryPanel<T extends ProvisioningTaskT
 
                 Component panel;
                 try {
-                    JobTO jobTO = restClient.getJob(rowModel.getObject().getKey());
+                    JobTO jobTO = TaskRestClient.getJob(rowModel.getObject().getKey());
                     panel = new JobActionPanel(componentId, jobTO, false, ProvisioningTaskDirectoryPanel.this, pageRef);
                     MetaDataRoleAuthorizationStrategy.authorize(panel, WebPage.ENABLE,
                             String.format("%s,%s",
@@ -186,13 +187,13 @@ public abstract class ProvisioningTaskDirectoryPanel<T extends ProvisioningTaskT
 
         @Override
         public long size() {
-            return restClient.count(resource, taskType);
+            return TaskRestClient.count(resource, taskType);
         }
 
         @Override
         public Iterator<T> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return restClient.list(
+            return TaskRestClient.list(
                     resource, reference, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()).
                     iterator();
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java
index dcf08b1..354a835 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java
@@ -49,7 +49,7 @@ public class PushTaskFilters extends WizardStep {
 
             @Override
             protected List<AnyTypeTO> load() {
-                return new AnyTypeRestClient().listAnyTypes();
+                return AnyTypeRestClient.listAnyTypes();
             }
         };
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 7043da8..847b69a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -120,7 +120,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
                     final TemplatableTO targetObject, final String type, final AnyTO anyTO) {
 
                 targetObject.getTemplates().put(type, anyTO);
-                new TaskRestClient().update(taskType, SchedTaskTO.class.cast(targetObject));
+                TaskRestClient.update(taskType, SchedTaskTO.class.cast(targetObject));
                 return targetObject;
             }
         };
@@ -208,7 +208,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
                 SchedTaskDirectoryPanel.this.getTogglePanel().close(target);
                 send(SchedTaskDirectoryPanel.this, Broadcast.EXACT,
                         new AjaxWizard.EditItemActionEvent<>(
-                                restClient.readTask(taskType, model.getObject().getKey()),
+                                TaskRestClient.readTask(taskType, model.getObject().getKey()),
                                 target).setResourceModel(
                                 new StringResourceModel("inner.task.edit",
                                         SchedTaskDirectoryPanel.this,
@@ -255,7 +255,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
             @Override
             public void onClick(final AjaxRequestTarget target, final T ignore) {
                 try {
-                    restClient.delete(taskType, taskTO.getKey());
+                    TaskRestClient.delete(taskType, taskTO.getKey());
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     target.add(container);
                     SchedTaskDirectoryPanel.this.getTogglePanel().close(target);
@@ -307,13 +307,13 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
 
         @Override
         public long size() {
-            return restClient.count(taskType);
+            return TaskRestClient.count(taskType);
         }
 
         @Override
         public Iterator<T> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return restClient.list(
+            return TaskRestClient.list(
                     reference, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()).
                     iterator();
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
index 513b2c3..a5eba12 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
@@ -55,8 +55,6 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends BaseAjaxWizar
 
     private static final long serialVersionUID = 5945391813567245081L;
 
-    private final TaskRestClient restClient = new TaskRestClient();
-
     private final TaskType type;
 
     private PushTaskWrapper wrapper;
@@ -69,7 +67,7 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends BaseAjaxWizar
 
         @Override
         protected List<String> load() {
-            List<String> result = new RealmRestClient().list().stream().
+            List<String> result = RealmRestClient.list().stream().
                     map(RealmTO::getFullPath).collect(Collectors.toList());
             Collections.sort(result);
 
@@ -90,9 +88,9 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends BaseAjaxWizar
 
         modelObject.setCronExpression(crontabPanel.getCronExpression());
         if (modelObject.getKey() == null) {
-            restClient.create(type, modelObject);
+            TaskRestClient.create(type, modelObject);
         } else {
-            restClient.update(type, modelObject);
+            TaskRestClient.update(type, modelObject);
         }
         return modelObject;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskAttributesDetailsView.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskAttributesDetailsView.java
index dacbde9..6e95770 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskAttributesDetailsView.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskAttributesDetailsView.java
@@ -64,7 +64,7 @@ public class TaskAttributesDetailsView extends MultilevelPanel.SecondLevel {
 
     }
 
-    private String getJSONInfo(final PropagationTaskTO taskTO) {
+    private static String getJSONInfo(final PropagationTaskTO taskTO) {
         String json = "";
         try {
             JsonNode list = MAPPER.readTree(taskTO.getAttributes());
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
index 1f80387..d330bd7 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
@@ -80,7 +80,7 @@ public abstract class TaskDirectoryPanel<T extends TaskTO>
 
         @Override
         public long size() {
-            return restClient.count(id);
+            return TaskRestClient.count(id);
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskStartAtTogglePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskStartAtTogglePanel.java
index 3faab4a..aa32a34 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskStartAtTogglePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TaskStartAtTogglePanel.java
@@ -44,7 +44,7 @@ public class TaskStartAtTogglePanel extends StartAtTogglePanel {
             @Override
             protected void onSubmit(final AjaxRequestTarget target) {
                 try {
-                    getRestClient().startExecution(key, startAtDateModel.getObject(), true);
+                    TaskRestClient.startExecution(key, startAtDateModel.getObject(), true);
                     SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
                     toggle(target, false);
                     target.add(container);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TemplatesTogglePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TemplatesTogglePanel.java
index 90823c1..6de26bf 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TemplatesTogglePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/TemplatesTogglePanel.java
@@ -70,7 +70,7 @@ public abstract class TemplatesTogglePanel extends TogglePanel<Serializable> {
 
         @Override
         protected List<String> load() {
-            return new AnyTypeRestClient().list();
+            return AnyTypeRestClient.list();
         }
     };
 
@@ -102,7 +102,7 @@ public abstract class TemplatesTogglePanel extends TogglePanel<Serializable> {
                             Model.of(Pair.of(typeModel.getObject(), targetObject))).setDefaultValue(
                             "Edit template"));
 
-                    final List<String> classes = new AnyTypeRestClient().read(typeModel.getObject()).getClasses();
+                    final List<String> classes = AnyTypeRestClient.read(typeModel.getObject()).getClasses();
 
                     final TemplateWizardBuilder<?> builder;
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/form/AbstractAjaxDownloadBehavior.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/form/AbstractAjaxDownloadBehavior.java
index 004f7c8..8a175a3 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/form/AbstractAjaxDownloadBehavior.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/form/AbstractAjaxDownloadBehavior.java
@@ -39,7 +39,7 @@ public abstract class AbstractAjaxDownloadBehavior extends AbstractAjaxBehavior
      */
     public void initiate(final AjaxRequestTarget target) {
         CharSequence url = getCallbackUrl();
-        target.appendJavaScript("window.location.href='" + url + "'");
+        target.appendJavaScript("window.location.href='" + url + '\'');
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
index 807641f..6db2776 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
@@ -40,7 +40,7 @@ public class AttrColumn<T extends Attributable> extends AbstractColumn<T, String
     public AttrColumn(final String name, final SchemaType schemaType) {
         // set sortProperty to schematype#name (e.g. derivedSchema#cn, 
         // for use with SortableUserProviderComparator.AttrModel#getObject)
-        super(new ResourceModel(name, name), schemaType.name() + "#" + name);
+        super(new ResourceModel(name, name), schemaType.name() + '#' + name);
         this.name = name;
         this.schemaType = schemaType;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ConnObjectAttrColumn.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ConnObjectAttrColumn.java
index 27e2684..1cf45e6 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ConnObjectAttrColumn.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ConnObjectAttrColumn.java
@@ -39,7 +39,7 @@ public class ConnObjectAttrColumn extends AbstractColumn<ConnObjectTO, String> {
     public ConnObjectAttrColumn(final String name, final SchemaType schemaType) {
         // set sortProperty to schematype#name (e.g. derivedSchema#cn, 
         // for use with SortableUserProviderComparator.AttrModel#getObject)
-        super(new ResourceModel(name, name), schemaType.name() + "#" + name);
+        super(new ResourceModel(name, name), schemaType.name() + '#' + name);
         this.name = name;
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/head/MetaHeaderItem.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/head/MetaHeaderItem.java
index cf58362..f071ed3 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/head/MetaHeaderItem.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/head/MetaHeaderItem.java
@@ -39,7 +39,7 @@ public class MetaHeaderItem extends HeaderItem implements Serializable {
 
     @Override
     public Iterable<?> getRenderTokens() {
-        return List.of("meta-" + key + "-" + value);
+        return List.of("meta-" + key + '-' + value);
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDownload.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDownload.java
index 7752afc..114da98 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDownload.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDownload.java
@@ -69,11 +69,11 @@ public abstract class AjaxDownload extends AbstractAjaxBehavior {
     public void onRequest() {
         HttpResourceStream stream = getResourceStream();
         ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(stream);
-        String key = StringUtils.isNotBlank(fileKey) ? fileKey + "_" : "";
+        String key = StringUtils.isNotBlank(fileKey) ? fileKey + '_' : "";
         String ext = "";
         if (StringUtils.isNotBlank(mimeType)) {
             String extByMimeType = mimeTypesLoader.getFileExt(mimeType);
-            ext = StringUtils.isBlank(extByMimeType) ? ".bin" : ("." + extByMimeType);
+            ext = StringUtils.isBlank(extByMimeType) ? ".bin" : ('.' + extByMimeType);
         }
         String fileName = key + (stream.getFilename() == null ? name : stream.getFilename()) + ext;
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
index 05a3168..4a98a4e 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
@@ -147,7 +147,7 @@ public class BinaryFieldPanel extends BaseBinaryFieldPanel {
         field = new TextField<>("textField", model);
         add(field.setLabel(new Model<>(name)).setOutputMarkupId(true));
 
-        uploadForm.add(new Label("preview", StringUtils.isBlank(mimeType) ? StringUtils.EMPTY : "(" + mimeType + ")"));
+        uploadForm.add(new Label("preview", StringUtils.isBlank(mimeType) ? StringUtils.EMPTY : '(' + mimeType + ')'));
 
         fileDownload = new AjaxDownload(name, fileKey, mimeType, true) {
 
@@ -281,7 +281,7 @@ public class BinaryFieldPanel extends BaseBinaryFieldPanel {
         if (StringUtils.isNotBlank(modelObj)) {
             final Component panelPreview;
             if (previewer == null) {
-                panelPreview = previewUtils.getDefaultPreviewer(mimeType);
+                panelPreview = PreviewUtils.getDefaultPreviewer(mimeType);
             } else {
                 panelPreview = previewer.preview(modelObj);
             }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SelectableRecorder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SelectableRecorder.java
index 5e957b7..a156f93 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SelectableRecorder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SelectableRecorder.java
@@ -86,7 +86,7 @@ public class SelectableRecorder<T> extends Recorder<T> {
         while (selection.hasNext()) {
             modelStringBuffer.append(renderer.getIdValue(selection.next(), i++));
             if (selection.hasNext()) {
-                modelStringBuffer.append(",");
+                modelStringBuffer.append(',');
             }
         }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobActionPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobActionPanel.java
index 1db2e0b..77a51d4 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobActionPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobActionPanel.java
@@ -49,12 +49,6 @@ public class JobActionPanel extends WizardMgtPanel<Serializable> {
 
     private static final Logger LOG = LoggerFactory.getLogger(JobActionPanel.class);
 
-    private final NotificationRestClient notificationRestClient = new NotificationRestClient();
-
-    private final ReportRestClient reportRestClient = new ReportRestClient();
-
-    private final TaskRestClient taskRestClient = new TaskRestClient();
-
     public JobActionPanel(
             final String id,
             final JobTO jobTO,
@@ -82,15 +76,15 @@ public class JobActionPanel extends WizardMgtPanel<Serializable> {
                     try {
                         switch (jobTO.getType()) {
                             case NOTIFICATION:
-                                notificationRestClient.actionJob(JobAction.STOP);
+                                NotificationRestClient.actionJob(JobAction.STOP);
                                 break;
 
                             case REPORT:
-                                reportRestClient.actionJob(jobTO.getRefKey(), JobAction.STOP);
+                                ReportRestClient.actionJob(jobTO.getRefKey(), JobAction.STOP);
                                 break;
 
                             case TASK:
-                                taskRestClient.actionJob(jobTO.getRefKey(), JobAction.STOP);
+                                TaskRestClient.actionJob(jobTO.getRefKey(), JobAction.STOP);
                                 break;
 
                             default:
@@ -116,15 +110,15 @@ public class JobActionPanel extends WizardMgtPanel<Serializable> {
                     try {
                         switch (jobTO.getType()) {
                             case NOTIFICATION:
-                                notificationRestClient.actionJob(JobAction.START);
+                                NotificationRestClient.actionJob(JobAction.START);
                                 break;
 
                             case REPORT:
-                                reportRestClient.actionJob(jobTO.getRefKey(), JobAction.START);
+                                ReportRestClient.actionJob(jobTO.getRefKey(), JobAction.START);
                                 break;
 
                             case TASK:
-                                taskRestClient.actionJob(jobTO.getRefKey(), JobAction.START);
+                                TaskRestClient.actionJob(jobTO.getRefKey(), JobAction.START);
                                 break;
 
                             default:
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
index 1bab48b..a789c70 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
@@ -125,8 +125,6 @@ public class JobWidget extends BaseWidget {
         }
     };
 
-    private final NotificationRestClient notificationRestClient = new NotificationRestClient();
-
     private final TaskRestClient taskRestClient = new TaskRestClient();
 
     private final ReportRestClient reportRestClient = new ReportRestClient();
@@ -218,20 +216,20 @@ public class JobWidget extends BaseWidget {
         add(actionTogglePanel);
     }
 
-    private List<JobTO> getUpdatedAvailable() {
+    private static List<JobTO> getUpdatedAvailable() {
         List<JobTO> updatedAvailable = new ArrayList<>();
 
         if (SyncopeConsoleSession.get().owns(IdRepoEntitlement.NOTIFICATION_LIST)) {
-            JobTO notificationJob = notificationRestClient.getJob();
+            JobTO notificationJob = NotificationRestClient.getJob();
             if (notificationJob != null) {
                 updatedAvailable.add(notificationJob);
             }
         }
         if (SyncopeConsoleSession.get().owns(IdRepoEntitlement.TASK_LIST)) {
-            updatedAvailable.addAll(taskRestClient.listJobs());
+            updatedAvailable.addAll(TaskRestClient.listJobs());
         }
         if (SyncopeConsoleSession.get().owns(IdRepoEntitlement.REPORT_LIST)) {
-            updatedAvailable.addAll(reportRestClient.listJobs());
+            updatedAvailable.addAll(ReportRestClient.listJobs());
         }
 
         return updatedAvailable;
@@ -393,7 +391,7 @@ public class JobWidget extends BaseWidget {
                             break;
 
                         case REPORT:
-                            ReportTO reportTO = reportRestClient.read(jobTO.getRefKey());
+                            ReportTO reportTO = ReportRestClient.read(jobTO.getRefKey());
 
                             ReportWizardBuilder rwb = new ReportWizardBuilder(reportTO, pageRef);
                             rwb.setEventSink(AvailableJobsPanel.this);
@@ -411,11 +409,11 @@ public class JobWidget extends BaseWidget {
                         case TASK:
                             ProvisioningTaskTO schedTaskTO;
                             try {
-                                schedTaskTO = taskRestClient.readTask(TaskType.PULL, jobTO.getRefKey());
+                                schedTaskTO = TaskRestClient.readTask(TaskType.PULL, jobTO.getRefKey());
                             } catch (Exception e) {
                                 LOG.debug("Failed to read {} as {}, attempting {}",
                                         jobTO.getRefKey(), TaskType.PULL, TaskType.PUSH, e);
-                                schedTaskTO = taskRestClient.readTask(TaskType.PUSH, jobTO.getRefKey());
+                                schedTaskTO = TaskRestClient.readTask(TaskType.PUSH, jobTO.getRefKey());
                             }
 
                             SchedTaskWizardBuilder<ProvisioningTaskTO> swb =
@@ -459,7 +457,7 @@ public class JobWidget extends BaseWidget {
 
                             case REPORT:
 
-                                final ReportTO reportTO = reportRestClient.read(jobTO.getRefKey());
+                                final ReportTO reportTO = ReportRestClient.read(jobTO.getRefKey());
 
                                 target.add(AvailableJobsPanel.this.reportModal.setContent(
                                         new ReportletDirectoryPanel(reportModal, jobTO.getRefKey(), pageRef)));
@@ -506,11 +504,11 @@ public class JobWidget extends BaseWidget {
                                     break;
 
                                 case REPORT:
-                                    reportRestClient.actionJob(jobTO.getRefKey(), JobAction.DELETE);
+                                    ReportRestClient.actionJob(jobTO.getRefKey(), JobAction.DELETE);
                                     break;
 
                                 case TASK:
-                                    taskRestClient.actionJob(jobTO.getRefKey(), JobAction.DELETE);
+                                    TaskRestClient.actionJob(jobTO.getRefKey(), JobAction.DELETE);
                                     break;
 
                                 default:
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/LoadWidget.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/LoadWidget.java
index 8a8a15e..ce3430e 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/LoadWidget.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/LoadWidget.java
@@ -41,7 +41,7 @@ public class LoadWidget extends BaseWidget {
         add(chart);
     }
 
-    private Line build(final SystemInfo systeminfo) {
+    private static Line build(final SystemInfo systeminfo) {
         List<Double> cpuValues = new ArrayList<>();
         List<Long> memValues = new ArrayList<>();
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java
index 338fa2c..b002146 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java
@@ -46,12 +46,12 @@ public class NumberWidget extends BaseWidget {
         setOutputMarkupId(true);
 
         WebMarkupContainer box = new WebMarkupContainer("box");
-        box.add(new AttributeAppender("class", " " + bg));
+        box.add(new AttributeAppender("class", ' ' + bg));
 
         boolean isAuthorized = true;
         final PageParameters pageParameters = new PageParameters();
         final Class<? extends IRequestablePage> responsePage;
-        List<String> anyTypes = new AnyTypeRestClient().list();
+        List<String> anyTypes = AnyTypeRestClient.list();
         switch (id) {
             case "totalUsers":
                 pageParameters.add("selectedIndex", 1);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ProgressPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ProgressPanel.java
index f82aedd..552cfc9 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ProgressPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ProgressPanel.java
@@ -37,8 +37,8 @@ public class ProgressPanel extends Panel {
         add(new Label("total", progressBean.getTotal()));
 
         WebMarkupContainer progress = new WebMarkupContainer("progress");
-        progress.add(new AttributeModifier("style", "width: " + progressBean.getPercent() + "%"));
-        progress.add(new AttributeAppender("class", " " + progressBean.getCssClass()));
+        progress.add(new AttributeModifier("style", "width: " + progressBean.getPercent() + '%'));
+        progress.add(new AttributeAppender("class", ' ' + progressBean.getCssClass()));
         add(progress);
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
index 2f2068e..c285855 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
@@ -121,7 +121,7 @@ public class ReconciliationWidget extends BaseWidget {
             protected void onTimer(final AjaxRequestTarget target) {
                 if (isCheckReconciliationJob()) {
                     try {
-                        restClient.listJobs().stream().
+                        ReportRestClient.listJobs().stream().
                                 filter(jobTO -> SyncopeWebApplication.get().
                                 getReconciliationReportKey().equals(jobTO.getRefKey())).
                                 findFirst().ifPresent(reportJobTO -> {
@@ -155,7 +155,7 @@ public class ReconciliationWidget extends BaseWidget {
         ReportTO reconciliationReport = null;
         if (SyncopeConsoleSession.get().owns(IdRepoEntitlement.REPORT_READ)) {
             try {
-                reconciliationReport = restClient.read(reconciliationReportKey);
+                reconciliationReport = ReportRestClient.read(reconciliationReportKey);
             } catch (Exception e) {
                 LOG.error("Could not fetch the expected reconciliation report with key {}, aborting",
                         reconciliationReportKey, e);
@@ -273,7 +273,7 @@ public class ReconciliationWidget extends BaseWidget {
         if (exec.isEmpty()) {
             LOG.error("Could not find the last execution of reconciliation report");
         } else {
-            Object entity = restClient.exportExecutionResult(
+            Object entity = ReportRestClient.exportExecutionResult(
                     exec.get().getKey(), ReportExecExportFormat.XML).getEntity();
             if (entity instanceof InputStream) {
                 try {
@@ -370,7 +370,7 @@ public class ReconciliationWidget extends BaseWidget {
                             rowModel.getObject().getKey()
                             + (StringUtils.isBlank(rowModel.getObject().getName())
                             ? StringUtils.EMPTY
-                            : " " + rowModel.getObject().getName())));
+                            : ' ' + rowModel.getObject().getName())));
                 }
             });
 
@@ -412,8 +412,8 @@ public class ReconciliationWidget extends BaseWidget {
                                     public void onClick(final AjaxRequestTarget target, final Any ignore) {
                                         modal.header(Model.of(
                                                 rowModel.getObject().getType()
-                                                + " " + rowModel.getObject().getKey()
-                                                + " " + rowModel.getObject().getName()));
+                                                + ' ' + rowModel.getObject().getKey()
+                                                + ' ' + rowModel.getObject().getName()));
                                         modal.setContent(new ReconDetailsModalPanel(
                                                 modal,
                                                 resource,
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/UsersByStatusWidget.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/UsersByStatusWidget.java
index c84a640..df3f992 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/UsersByStatusWidget.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/UsersByStatusWidget.java
@@ -43,7 +43,7 @@ public class UsersByStatusWidget extends BaseWidget {
         add(chart);
     }
 
-    private Doughnut build(final Map<String, Integer> usersByStatus) {
+    private static Doughnut build(final Map<String, Integer> usersByStatus) {
         Doughnut doughnut = new Doughnut();
         doughnut.getOptions().setResponsive(true);
         doughnut.getOptions().setMaintainAspectRatio(true);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
index 584344c..4dd3603 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
@@ -56,8 +56,6 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
 
     protected final Comparator<Attr> attrComparator = new AttrComparator();
 
-    private final SchemaRestClient schemaRestClient = new SchemaRestClient();
-
     private final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient();
 
     private final GroupRestClient groupRestClient = new GroupRestClient();
@@ -93,7 +91,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
 
     private List<Attr> loadAttrs() {
         List<String> classes = new ArrayList<>(anyTypeClasses);
-        classes.addAll(anyTypeClassRestClient.list(anyTO.getAuxClasses()).stream().
+        classes.addAll(AnyTypeClassRestClient.list(anyTO.getAuxClasses()).stream().
                 map(EntityTO::getKey).collect(Collectors.toList()));
         setSchemas(classes);
         setAttrs();
@@ -109,7 +107,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
             for (MembershipTO membership : (List<MembershipTO>) PropertyResolver.getPropertyField(
                     "memberships", anyTO).get(anyTO)) {
                 setSchemas(membership.getGroupKey(),
-                        anyTypeClassRestClient.list(getMembershipAuxClasses(membership, anyTO.getType())).
+                        AnyTypeClassRestClient.list(getMembershipAuxClasses(membership, anyTO.getType())).
                                 stream().map(EntityTO::getKey).collect(Collectors.toList()));
                 setAttrs(membership);
 
@@ -155,7 +153,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
         if (anyTypeClasses.isEmpty()) {
             allSchemas = List.of();
         } else {
-            allSchemas = schemaRestClient.getSchemas(getSchemaType(), null, anyTypeClasses.toArray(new String[] {}));
+            allSchemas = SchemaRestClient.getSchemas(getSchemaType(), null, anyTypeClasses.toArray(new String[] {}));
         }
 
         scs.clear();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
index 2882bff..8b9361d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
@@ -79,7 +79,7 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
             AnyObjectCR req = new AnyObjectCR();
             EntityTOUtils.toAnyCR(inner, req);
 
-            result = anyObjectRestClient.create(req);
+            result = AnyObjectRestClient.create(req);
         } else {
             fixPlainAndVirAttrs(inner, getOriginalItem().getInnerObject());
             AnyObjectUR req = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
index 01ab56b..b8dc37b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
@@ -141,7 +141,7 @@ public class ConnObjectPanel extends Panel {
      * @param attrTO remote attribute.
      * @return fragment.
      */
-    private Panel getValuePanel(final String id, final String schemaName, final Attr attrTO) {
+    private static Panel getValuePanel(final String id, final String schemaName, final Attr attrTO) {
         Panel field;
         if (attrTO == null) {
             field = new AjaxTextFieldPanel(id, schemaName, new Model<>());
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConsoleAuxClasses.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConsoleAuxClasses.java
index 3efd013..780b229 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConsoleAuxClasses.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConsoleAuxClasses.java
@@ -35,6 +35,6 @@ public class ConsoleAuxClasses extends AbstractAuxClasses {
 
     @Override
     protected final List<AnyTypeClassTO> listAnyTypecClasses() {
-        return new AnyTypeClassRestClient().list();
+        return AnyTypeClassRestClient.list();
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java
index 8f55da9..fdffb4b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java
@@ -64,7 +64,7 @@ public class Details<T extends AnyTO> extends WizardStep {
         } else {
             final List<RealmTO> realms = pageRef.getPage() instanceof Realms
                     ? getRealmsFromLinks(Realms.class.cast(pageRef.getPage()).getRealmChoicePanel().getLinks())
-                    : new RealmRestClient().list();
+                    : RealmRestClient.list();
 
             realm = new AjaxDropDownChoicePanel<>(
                     "destinationRealm", "destinationRealm", new PropertyModel<>(inner, "realm"), false);
@@ -86,7 +86,7 @@ public class Details<T extends AnyTO> extends WizardStep {
         return new AnnotatedBeanPanel(id, anyTO);
     }
 
-    private List<RealmTO> getRealmsFromLinks(final List<AbstractLink> realmLinks) {
+    private static List<RealmTO> getRealmsFromLinks(final List<AbstractLink> realmLinks) {
         List<RealmTO> realms = new ArrayList<>();
 
         realmLinks.stream().
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java
index 6de2fa8..daca2c9 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java
@@ -45,8 +45,6 @@ public class DynamicMemberships extends WizardStep {
 
     private static final long serialVersionUID = 855618618337931784L;
 
-    private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
     public DynamicMemberships(final GroupWrapper groupWrapper) {
         super();
 
@@ -56,7 +54,7 @@ public class DynamicMemberships extends WizardStep {
 
             @Override
             protected List<AnyTypeTO> load() {
-                return anyTypeRestClient.listAnyTypes().stream().
+                return AnyTypeRestClient.listAnyTypes().stream().
                         filter(type -> AnyTypeKind.USER != type.getKind() && AnyTypeKind.GROUP != type.getKind()).
                         collect(Collectors.toList());
             }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
index 971af2e..eefa975 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
@@ -98,7 +98,7 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
             GroupCR req = new GroupCR();
             EntityTOUtils.toAnyCR(inner, req);
 
-            result = groupRestClient.create(req);
+            result = GroupRestClient.create(req);
         } else {
             fixPlainAndVirAttrs(inner, getOriginalItem().getInnerObject());
             GroupUR groupUR = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
index 51cdf75..4de68e6 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
@@ -75,8 +75,6 @@ public class Ownership extends WizardStep implements ICondition {
 
     private final WebMarkupContainer ownerContainer;
 
-    private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
     private final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient();
 
     private final GroupSearchPanel groupSearchPanel;
@@ -174,10 +172,10 @@ public class Ownership extends WizardStep implements ICondition {
                 build("groupsearch");
         groupSearchFragment.add(groupSearchPanel.setRenderBodyOnly(true));
 
-        AnyTypeTO anyTypeTO = anyTypeRestClient.read(AnyTypeKind.GROUP.name());
+        AnyTypeTO anyTypeTO = AnyTypeRestClient.read(AnyTypeKind.GROUP.name());
 
         groupDirectoryPanel = GroupSelectionDirectoryPanel.class.cast(new GroupSelectionDirectoryPanel.Builder(
-                anyTypeClassRestClient.list(anyTypeTO.getClasses()),
+                AnyTypeClassRestClient.list(anyTypeTO.getClasses()),
                 anyTypeTO.getKey(),
                 pageRef).build("searchResult"));
 
@@ -189,10 +187,10 @@ public class Ownership extends WizardStep implements ICondition {
                 build("usersearch"));
         userSearchFragment.add(userSearchPanel.setRenderBodyOnly(true));
 
-        anyTypeTO = anyTypeRestClient.read(AnyTypeKind.USER.name());
+        anyTypeTO = AnyTypeRestClient.read(AnyTypeKind.USER.name());
 
         userDirectoryPanel = UserSelectionDirectoryPanel.class.cast(new UserSelectionDirectoryPanel.Builder(
-                anyTypeClassRestClient.list(anyTypeTO.getClasses()),
+                AnyTypeClassRestClient.list(anyTypeTO.getClasses()),
                 anyTypeTO.getKey(),
                 pageRef).build("searchResult"));
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
index 9b1adc1..d5a6b62 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
@@ -85,14 +85,10 @@ public class Relationships extends WizardStep implements ICondition {
 
     private final PageReference pageRef;
 
-    private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
-
     private final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient();
 
     private final AnyTO anyTO;
 
-    private final RelationshipTypeRestClient relationshipTypeRestClient = new RelationshipTypeRestClient();
-
     public Relationships(final AnyWrapper<?> modelObject, final PageReference pageRef) {
         super();
         add(new Label("title", new ResourceModel("any.relationships")));
@@ -190,7 +186,8 @@ public class Relationships extends WizardStep implements ICondition {
                 : Collections.<RelationshipTO>emptyList();
     }
 
-    private void addRelationship(final Map<String, List<RelationshipTO>> relationships, final RelationshipTO... rels) {
+    private static void addRelationship(final Map<String, List<RelationshipTO>> relationships,
+                                        final RelationshipTO... rels) {
 
         for (RelationshipTO relationship : rels) {
             final List<RelationshipTO> listrels;
@@ -226,7 +223,7 @@ public class Relationships extends WizardStep implements ICondition {
     @Override
     public boolean evaluate() {
         // [SYNCOPE-1171] - skip current step when the are no relationships types in Syncope
-        return !relationshipTypeRestClient.list().isEmpty();
+        return !RelationshipTypeRestClient.list().isEmpty();
     }
 
     public class Specification extends Panel {
@@ -243,7 +240,7 @@ public class Relationships extends WizardStep implements ICondition {
             super("specification");
             rel = new RelationshipTO();
 
-            final List<String> availableRels = relationshipTypeRestClient.list().stream().
+            final List<String> availableRels = RelationshipTypeRestClient.list().stream().
                     map(EntityTO::getKey).collect(Collectors.toList());
 
             final AjaxDropDownChoicePanel<String> type = new AjaxDropDownChoicePanel<>(
@@ -251,7 +248,7 @@ public class Relationships extends WizardStep implements ICondition {
             type.setChoices(availableRels);
             add(type.setRenderBodyOnly(true));
 
-            final List<AnyTypeTO> availableTypes = anyTypeRestClient.listAnyTypes().stream().
+            final List<AnyTypeTO> availableTypes = AnyTypeRestClient.listAnyTypes().stream().
                     filter(anyType -> anyType.getKind() != AnyTypeKind.GROUP
                     && anyType.getKind() != AnyTypeKind.USER).collect(Collectors.toList());
 
@@ -345,7 +342,7 @@ public class Relationships extends WizardStep implements ICondition {
                         fragment.add(anyObjectSearchPanel.setRenderBodyOnly(true));
 
                         anyObjectDirectoryPanel = new AnyObjectSelectionDirectoryPanel.Builder(
-                                anyTypeClassRestClient.list(anyType.getClasses()),
+                                AnyTypeClassRestClient.list(anyType.getClasses()),
                                 anyType.getKey(),
                                 pageRef).
                                 setFiql(SyncopeClient.getAnyObjectSearchConditionBuilder(anyType.getKey()).
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
index b61491f..8b6a114 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
@@ -77,7 +77,7 @@ public class Roles extends WizardStep implements ICondition {
 
         allRoles = SyncopeWebApplication.get().getSecuritySettings().getAuthorizationStrategy().
                 isActionAuthorized(this, RENDER)
-                ? new RoleRestClient().list().stream().map(EntityTO::getKey).collect(Collectors.toList())
+                ? RoleRestClient.list().stream().map(EntityTO::getKey).collect(Collectors.toList())
                 : List.of();
         Collections.sort(allRoles);
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
index ce36716..4e9de5c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
@@ -200,10 +200,10 @@ public class StatusPanel extends Panel {
         return initialStatusBeanMap;
     }
 
-    protected Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs(
-            final String anyKey,
-            final String resource,
-            final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> objects) {
+    protected static Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs(
+        final String anyKey,
+        final String resource,
+        final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> objects) {
 
         for (Triple<ConnObjectTO, ConnObjectWrapper, String> object : objects) {
             if (anyKey.equals(object.getMiddle().getAny().getKey())
@@ -237,7 +237,7 @@ public class StatusPanel extends Panel {
 
         @Override
         protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs() {
-            return StatusPanel.this.getConnObjectTOs(bean.getKey(), bean.getResource(), connObjects);
+            return StatusPanel.getConnObjectTOs(bean.getKey(), bean.getResource(), connObjects);
         }
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/TypeExtensionWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/TypeExtensionWizardBuilder.java
index 7cb6251..a62b5d7 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/TypeExtensionWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/TypeExtensionWizardBuilder.java
@@ -89,7 +89,7 @@ public class TypeExtensionWizardBuilder extends BaseAjaxWizardBuilder<TypeExtens
             add(new Label("anyType.label", anyTypeLabel));
 
             if (typeExtensionTO.getAnyType() == null) {
-                List<String> anyTypes = new AnyTypeRestClient().list();
+                List<String> anyTypes = AnyTypeRestClient.list();
                 anyTypes.remove(AnyTypeKind.GROUP.name());
                 anyTypes.removeAll(anyTypes.stream().
                         filter(anyType -> groupTO.getTypeExtension(anyType).isPresent()).collect(Collectors.toList()));
@@ -108,7 +108,7 @@ public class TypeExtensionWizardBuilder extends BaseAjaxWizardBuilder<TypeExtens
 
             add(new Label("auxClasses.label", auxClassesLabel));
 
-            List<String> anyTypeClasses = new AnyTypeClassRestClient().list().stream().
+            List<String> anyTypeClasses = AnyTypeClassRestClient.list().stream().
                     map(EntityTO::getKey).collect(Collectors.toList());
             AjaxPalettePanel<String> auxClassesPalette = new AjaxPalettePanel.Builder<String>().build(
                     "auxClasses.palette",
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
index 598bcbe..0070207 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
@@ -90,7 +90,7 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
                     ? UserWrapper.class.cast(modelObject).isStorePasswordInSyncope()
                     : StringUtils.isNotBlank(inner.getPassword()));
 
-            result = userRestClient.create(req);
+            result = UserRestClient.create(req);
         } else {
             fixPlainAndVirAttrs(inner, getOriginalItem().getInnerObject());
             UserUR userUR = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
index 8fbc178..341527f 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
@@ -52,8 +52,6 @@ public class RoleWizardBuilder extends BaseAjaxWizardBuilder<RoleWrapper> {
 
     private static final long serialVersionUID = 5945391813567245081L;
 
-    private final RoleRestClient groupRestClient = new RoleRestClient();
-
     /**
      * Construct.
      *
@@ -83,9 +81,9 @@ public class RoleWizardBuilder extends BaseAjaxWizardBuilder<RoleWrapper> {
         modelObject.fillDynamicConditions();
         if (getOriginalItem() == null || getOriginalItem().getInnerObject() == null
                 || StringUtils.isBlank(getOriginalItem().getInnerObject().getKey())) {
-            groupRestClient.create(modelObject.getInnerObject());
+            RoleRestClient.create(modelObject.getInnerObject());
         } else {
-            groupRestClient.update(modelObject.getInnerObject());
+            RoleRestClient.update(modelObject.getInnerObject());
         }
         return null;
     }
@@ -149,7 +147,7 @@ public class RoleWizardBuilder extends BaseAjaxWizardBuilder<RoleWrapper> {
                     modelObject.getEntitlements().clear();
                     modelObject.getEntitlements().addAll(object);
                 }
-            }, new ListModel<>(new RoleRestClient().getAllAvailableEntitlements())).
+            }, new ListModel<>(RoleRestClient.getAllAvailableEntitlements())).
                     hideLabel().setOutputMarkupId(true));
         }
     }
@@ -162,7 +160,7 @@ public class RoleWizardBuilder extends BaseAjaxWizardBuilder<RoleWrapper> {
             setTitleModel(new ResourceModel("realms"));
             add(new AjaxPalettePanel.Builder<>().build("realms",
                     new PropertyModel<>(modelObject, "realms"),
-                    new ListModel<>(new RealmRestClient().list().stream().
+                    new ListModel<>(RealmRestClient.list().stream().
                             map(RealmTO::getFullPath).collect(Collectors.toList()))).
                     hideLabel().setOutputMarkupId(true));
         }
@@ -176,7 +174,7 @@ public class RoleWizardBuilder extends BaseAjaxWizardBuilder<RoleWrapper> {
             setTitleModel(new ResourceModel("dynRealms"));
             add(new AjaxPalettePanel.Builder<>().build("dynRealms",
                     new PropertyModel<>(modelObject, "dynRealms"),
-                    new ListModel<>(new DynRealmRestClient().list().stream().
+                    new ListModel<>(DynRealmRestClient.list().stream().
                             map(EntityTO::getKey).collect(Collectors.toList()))).
                     hideLabel().setOutputMarkupId(true));
         }
@@ -190,7 +188,7 @@ public class RoleWizardBuilder extends BaseAjaxWizardBuilder<RoleWrapper> {
             setTitleModel(new ResourceModel("privileges"));
             add(new AjaxPalettePanel.Builder<>().build("privileges",
                     new PropertyModel<>(modelObject, "privileges"),
-                    new ListModel<>(new ApplicationRestClient().list().stream().
+                    new ListModel<>(ApplicationRestClient.list().stream().
                             flatMap(application -> application.getPrivileges().stream()).
                             map(EntityTO::getKey).collect(Collectors.toList()))).
                     hideLabel().setOutputMarkupId(true));
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
index ee0f5ce..65a8ff0 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
@@ -171,7 +171,7 @@ public class SyncopeWebApplication extends WicketBootStandardWebApplication {
 
         // read customFormAttributes.json
         File enduserDir;
-        try (InputStream is = getClass().getResourceAsStream("/" + CUSTOM_FORM_ATTRIBUTES_FILE)) {
+        try (InputStream is = getClass().getResourceAsStream('/' + CUSTOM_FORM_ATTRIBUTES_FILE)) {
             customFormAttributes = MAPPER.readValue(is,
                     new TypeReference<HashMap<String, CustomAttributesInfo>>() {
             });
@@ -190,7 +190,7 @@ public class SyncopeWebApplication extends WicketBootStandardWebApplication {
             FileAlterationObserver observer = existsEnduserDir
                     ? new FileAlterationObserver(enduserDir,
                             pathname -> StringUtils.contains(pathname.getPath(), CUSTOM_FORM_ATTRIBUTES_FILE))
-                    : new FileAlterationObserver(getClass().getResource("/" + CUSTOM_FORM_ATTRIBUTES_FILE).getFile(),
+                    : new FileAlterationObserver(getClass().getResource('/' + CUSTOM_FORM_ATTRIBUTES_FILE).getFile(),
                             pathname -> StringUtils.contains(pathname.getPath(), CUSTOM_FORM_ATTRIBUTES_FILE));
 
             FileAlterationMonitor monitor = new FileAlterationMonitor(5000);
@@ -349,7 +349,7 @@ public class SyncopeWebApplication extends WicketBootStandardWebApplication {
                 setUseCompression(useGZIPCompression);
     }
 
-    protected Class<? extends WebPage> getSignInPageClass() {
+    protected static Class<? extends WebPage> getSignInPageClass() {
         return Login.class;
     }
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/commons/PreviewUtils.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/commons/PreviewUtils.java
index 23c55a1..34049d1 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/commons/PreviewUtils.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/commons/PreviewUtils.java
@@ -32,7 +32,7 @@ public class PreviewUtils {
     @Autowired
     private ClassPathScanImplementationLookup lookup;
 
-    public AbstractBinaryPreviewer getDefaultPreviewer(final String mimeType) {
+    public static AbstractBinaryPreviewer getDefaultPreviewer(final String mimeType) {
         return new DefaultPreviewer("previewer", mimeType);
     }
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/init/ClassPathScanImplementationLookup.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/init/ClassPathScanImplementationLookup.java
index d6423c7..d6a9440 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/init/ClassPathScanImplementationLookup.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/init/ClassPathScanImplementationLookup.java
@@ -59,7 +59,7 @@ public class ClassPathScanImplementationLookup {
      *
      * @return basePackage for classpath scanning
      */
-    protected String getBasePackage() {
+    protected static String getBasePackage() {
         return DEFAULT_BASE_PACKAGE;
     }
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/AjaxDownload.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/AjaxDownload.java
index 26eee3b..b9ae120 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/AjaxDownload.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/AjaxDownload.java
@@ -69,11 +69,11 @@ public abstract class AjaxDownload extends AbstractAjaxBehavior {
     public void onRequest() {
         HttpResourceStream stream = getResourceStream();
         ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(stream);
-        String key = StringUtils.isNotBlank(fileKey) ? fileKey + "_" : "";
+        String key = StringUtils.isNotBlank(fileKey) ? fileKey + '_' : "";
         String ext = "";
         if (StringUtils.isNotBlank(mimeType)) {
             String extByMimeType = mimeTypesLoader.getFileExt(mimeType);
-            ext = StringUtils.isBlank(extByMimeType) ? ".bin" : ("." + extByMimeType);
+            ext = StringUtils.isBlank(extByMimeType) ? ".bin" : ('.' + extByMimeType);
         }
         String fileName = key + (stream.getFilename() == null ? name : stream.getFilename()) + ext;
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/BinaryFieldPanel.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/BinaryFieldPanel.java
index f097d16..79cd24a 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/BinaryFieldPanel.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/markup/html/form/BinaryFieldPanel.java
@@ -145,7 +145,7 @@ public class BinaryFieldPanel extends BaseBinaryFieldPanel {
         field = new TextField<>("textField", model);
         add(field.setLabel(new Model<>(name)).setOutputMarkupId(true));
 
-        uploadForm.add(new Label("preview", StringUtils.isBlank(mimeType) ? StringUtils.EMPTY : "(" + mimeType + ")"));
+        uploadForm.add(new Label("preview", StringUtils.isBlank(mimeType) ? StringUtils.EMPTY : '(' + mimeType + ')'));
 
         fileDownload = new AjaxDownload(name, fileKey, mimeType, true) {
 
@@ -278,7 +278,7 @@ public class BinaryFieldPanel extends BaseBinaryFieldPanel {
         if (StringUtils.isNotBlank(modelObj)) {
             final Component panelPreview;
             if (previewer == null) {
-                panelPreview = previewUtils.getDefaultPreviewer(mimeType);
+                panelPreview = PreviewUtils.getDefaultPreviewer(mimeType);
             } else {
                 panelPreview = previewer.preview(modelObj);
             }
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/MustChangePassword.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/MustChangePassword.java
index 5b34eb6..156c64c 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/MustChangePassword.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/MustChangePassword.java
@@ -31,8 +31,6 @@ public class MustChangePassword extends AbstractMustChangePassword {
 
     private static final long serialVersionUID = 8581970794722709800L;
 
-    protected UserSelfRestClient restClient = new UserSelfRestClient();
-
     public MustChangePassword(final PageParameters parameters) {
         super(parameters);
     }
@@ -40,7 +38,7 @@ public class MustChangePassword extends AbstractMustChangePassword {
     @Override
     protected void doSubmit(final AjaxRequestTarget target) {
         try {
-            restClient.changePassword(passwordField.getModelObject());
+            UserSelfRestClient.changePassword(passwordField.getModelObject());
 
             SyncopeEnduserSession.get().invalidate();
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/Self.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/Self.java
index 67bd151..a3a64e2 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/Self.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/pages/Self.java
@@ -112,7 +112,7 @@ public class Self extends BaseEnduserWebPage implements IEventSource {
         return wizardBuilder.build(WIZARD_ID, mode);
     }
 
-    private UserTO buildNewUserTO(final PageParameters parameters) {
+    private static UserTO buildNewUserTO(final PageParameters parameters) {
         final UserTO userTO = new UserTO();
 
         if (parameters != null) {
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/AnyTypeRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/AnyTypeRestClient.java
index 96ba840..76596d7 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/AnyTypeRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/AnyTypeRestClient.java
@@ -35,7 +35,7 @@ public class AnyTypeRestClient extends BaseRestClient {
 
     public static final Comparator<String> KEY_COMPARATOR = new AnyTypeKeyComparator();
 
-    public AnyTypeTO read(final String key) {
+    public static AnyTypeTO read(final String key) {
         AnyTypeTO type = null;
 
         try {
@@ -47,7 +47,7 @@ public class AnyTypeRestClient extends BaseRestClient {
         return type;
     }
 
-    public List<AnyTypeTO> listAnyTypes() {
+    public static List<AnyTypeTO> listAnyTypes() {
         List<AnyTypeTO> types = List.of();
 
         try {
@@ -60,21 +60,21 @@ public class AnyTypeRestClient extends BaseRestClient {
         return types;
     }
 
-    public List<String> list() {
+    public static List<String> list() {
         List<String> types = getSyncopeService().platform().getAnyTypes();
         Collections.sort(types, new AnyTypeKeyComparator());
         return types;
     }
 
-    public void create(final AnyTypeTO anyTypeTO) {
+    public static void create(final AnyTypeTO anyTypeTO) {
         getService(AnyTypeService.class).create(anyTypeTO);
     }
 
-    public void update(final AnyTypeTO anyTypeTO) {
+    public static void update(final AnyTypeTO anyTypeTO) {
         getService(AnyTypeService.class).update(anyTypeTO);
     }
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(AnyTypeService.class).delete(key);
     }
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/GroupRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/GroupRestClient.java
index 0c14ad1..ffeb769 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/GroupRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/GroupRestClient.java
@@ -42,7 +42,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
         return GroupService.class;
     }
 
-    public ProvisioningResult<GroupTO> create(final GroupCR groupCR) {
+    public static ProvisioningResult<GroupTO> create(final GroupCR groupCR) {
         Response response = getService(GroupService.class).create(groupCR);
         return response.readEntity(new GenericType<ProvisioningResult<GroupTO>>() {
         });
@@ -59,11 +59,11 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
         return result;
     }
 
-    public List<GroupTO> searchAssignableGroups(
-            final String realm,
-            final String term,
-            final int page,
-            final int size) {
+    public static List<GroupTO> searchAssignableGroups(
+        final String realm,
+        final String term,
+        final int page,
+        final int size) {
 
         return getService(SyncopeService.class).searchAssignableGroups(realm, term, page, size).getResult();
     }
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RealmRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RealmRestClient.java
index a95636a..d7b5729 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RealmRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RealmRestClient.java
@@ -29,7 +29,7 @@ public class RealmRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -8549081557283519638L;
 
-    public List<RealmTO> list() {
+    public static List<RealmTO> list() {
         return getService(RealmService.class).list();
     }
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RoleRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RoleRestClient.java
index d411ce4..a0d055d 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RoleRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RoleRestClient.java
@@ -35,27 +35,27 @@ public class RoleRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -3161863874876938094L;
 
-    public void delete(final String key) {
+    public static void delete(final String key) {
         getService(RoleService.class).delete(key);
     }
 
-    public RoleTO read(final String key) {
+    public static RoleTO read(final String key) {
         return getService(RoleService.class).read(key);
     }
 
-    public void update(final RoleTO roleTO) {
+    public static void update(final RoleTO roleTO) {
         getService(RoleService.class).update(roleTO);
     }
 
-    public void create(final RoleTO roleTO) {
+    public static void create(final RoleTO roleTO) {
         getService(RoleService.class).create(roleTO);
     }
 
-    public List<RoleTO> list() {
+    public static List<RoleTO> list() {
         return getService(RoleService.class).list();
     }
 
-    public String readConsoleLayoutInfo(final String roleKey) {
+    public static String readConsoleLayoutInfo(final String roleKey) {
         try {
             return IOUtils.toString(InputStream.class.cast(
                     getService(RoleService.class).getConsoleLayoutInfo(roleKey).getEntity()),
@@ -66,16 +66,16 @@ public class RoleRestClient extends BaseRestClient {
         }
     }
 
-    public void setConsoleLayoutInfo(final String roleKey, final String content) {
+    public static void setConsoleLayoutInfo(final String roleKey, final String content) {
         getService(RoleService.class).setConsoleLayoutInfo(
                 roleKey, IOUtils.toInputStream(content, StandardCharsets.UTF_8));
     }
 
-    public void removeConsoleLayoutInfo(final String roleKey) {
+    public static void removeConsoleLayoutInfo(final String roleKey) {
         getService(RoleService.class).removeConsoleLayoutInfo(roleKey);
     }
 
-    public List<String> getAllAvailableEntitlements() {
+    public static List<String> getAllAvailableEntitlements() {
         List<String> entitlements = new ArrayList<>(getSyncopeService().platform().getEntitlements());
         Collections.sort(entitlements);
         return entitlements;
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SchemaRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SchemaRestClient.java
index dc9de6e..c89e35b 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SchemaRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SchemaRestClient.java
@@ -42,7 +42,7 @@ public class SchemaRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -2479730152700312373L;
 
-    public <T extends SchemaTO> List<T> getSchemas(final SchemaType schemaType, final AnyTypeKind kind) {
+    public static <T extends SchemaTO> List<T> getSchemas(final SchemaType schemaType, final AnyTypeKind kind) {
         final AnyTypeService client = getService(AnyTypeService.class);
 
         final List<String> classes = new ArrayList<>();
@@ -57,7 +57,7 @@ public class SchemaRestClient extends BaseRestClient {
                 break;
 
             default:
-                new AnyTypeRestClient().listAnyTypes().stream().filter(
+                AnyTypeRestClient.listAnyTypes().stream().filter(
                         anyTypeTO -> (anyTypeTO.getKind() != AnyTypeKind.USER
                         && anyTypeTO.getKind() != AnyTypeKind.GROUP)).
                         forEach((anyTypeTO) -> classes.addAll(anyTypeTO.getClasses()));
@@ -65,8 +65,8 @@ public class SchemaRestClient extends BaseRestClient {
         return getSchemas(schemaType, null, classes.toArray(new String[] {}));
     }
 
-    public <T extends SchemaTO> List<T> getSchemas(
-            final SchemaType schemaType, final String keyword, final String... anyTypeClasses) {
+    public static <T extends SchemaTO> List<T> getSchemas(
+        final SchemaType schemaType, final String keyword, final String... anyTypeClasses) {
 
         SchemaQuery.Builder builder = new SchemaQuery.Builder().type(schemaType);
         if (StringUtils.isNotBlank(keyword)) {
@@ -85,7 +85,7 @@ public class SchemaRestClient extends BaseRestClient {
         return schemas;
     }
 
-    public List<String> getSchemaNames(final SchemaType schemaType) {
+    public static List<String> getSchemaNames(final SchemaType schemaType) {
         List<String> schemaNames = List.of();
 
         try {
@@ -98,44 +98,44 @@ public class SchemaRestClient extends BaseRestClient {
         return schemaNames;
     }
 
-    public List<String> getPlainSchemaNames() {
+    public static List<String> getPlainSchemaNames() {
         return getSchemaNames(SchemaType.PLAIN);
     }
 
-    public List<String> getDerSchemaNames() {
+    public static List<String> getDerSchemaNames() {
         return getSchemaNames(SchemaType.DERIVED);
     }
 
-    public List<String> getVirSchemaNames() {
+    public static List<String> getVirSchemaNames() {
         return getSchemaNames(SchemaType.VIRTUAL);
     }
 
-    public PlainSchemaTO read(final SchemaType schemaType, final String key) {
+    public static PlainSchemaTO read(final SchemaType schemaType, final String key) {
         return getService(SchemaService.class).read(schemaType, key);
 
     }
 
-    public void create(final SchemaType schemaType, final SchemaTO modelObject) {
+    public static void create(final SchemaType schemaType, final SchemaTO modelObject) {
         getService(SchemaService.class).create(schemaType, modelObject);
     }
 
-    public void update(final SchemaType schemaType, final SchemaTO modelObject) {
+    public static void update(final SchemaType schemaType, final SchemaTO modelObject) {
         getService(SchemaService.class).update(schemaType, modelObject);
     }
 
-    public PlainSchemaTO deletePlainSchema(final String name) {
+    public static PlainSchemaTO deletePlainSchema(final String name) {
         PlainSchemaTO response = getService(SchemaService.class).read(SchemaType.PLAIN, name);
         getService(SchemaService.class).delete(SchemaType.PLAIN, name);
         return response;
     }
 
-    public DerSchemaTO deleteDerSchema(final String name) {
+    public static DerSchemaTO deleteDerSchema(final String name) {
         DerSchemaTO schemaTO = getService(SchemaService.class).read(SchemaType.DERIVED, name);
         getService(SchemaService.class).delete(SchemaType.DERIVED, name);
         return schemaTO;
     }
 
-    public VirSchemaTO deleteVirSchema(final String name) {
+    public static VirSchemaTO deleteVirSchema(final String name) {
         VirSchemaTO schemaTO = getService(SchemaService.class).read(SchemaType.VIRTUAL, name);
         getService(SchemaService.class).delete(SchemaType.VIRTUAL, name);
         return schemaTO;
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SecurityQuestionRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SecurityQuestionRestClient.java
index aab131f..bf11aab 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SecurityQuestionRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SecurityQuestionRestClient.java
@@ -26,7 +26,7 @@ public class SecurityQuestionRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -3167730221361895176L;
 
-    public List<SecurityQuestionTO> list() {
+    public static List<SecurityQuestionTO> list() {
         return getService(SecurityQuestionService.class).list();
     }
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SyncopeRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SyncopeRestClient.java
index 088b63f..74429c8 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SyncopeRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SyncopeRestClient.java
@@ -27,7 +27,7 @@ public class SyncopeRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -2211371717449597247L;
 
-    public List<String> listAnyTypeClasses() {
+    public static List<String> listAnyTypeClasses() {
         List<String> types = List.of();
 
         try {
@@ -38,7 +38,7 @@ public class SyncopeRestClient extends BaseRestClient {
         return types;
     }
 
-    public List<String> searchUserTypeExtensions(final String groupName) {
+    public static List<String> searchUserTypeExtensions(final String groupName) {
         List<String> types = List.of();
         try {
             TypeExtensionTO typeExtensionTO = getService(SyncopeService.class).readUserTypeExtension(groupName);
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/UserSelfRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/UserSelfRestClient.java
index 8e18410..56aa2ff 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/UserSelfRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/UserSelfRestClient.java
@@ -34,7 +34,7 @@ public class UserSelfRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -1575748964398293968L;
 
-    public ProvisioningResult<UserTO> create(final UserCR createReq) {
+    public static ProvisioningResult<UserTO> create(final UserCR createReq) {
         Response response = getService(UserSelfService.class).create(createReq);
         return response.readEntity(new GenericType<ProvisioningResult<UserTO>>() {
         });
@@ -58,7 +58,7 @@ public class UserSelfRestClient extends BaseRestClient {
         return update(etag, userUR);
     }
 
-    public void changePassword(final String password) {
+    public static void changePassword(final String password) {
         getService(UserSelfService.class).mustChangePassword(password);
     }
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/AbstractAttrs.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/AbstractAttrs.java
index 67fd50e..92a5d6c 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/AbstractAttrs.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/AbstractAttrs.java
@@ -54,10 +54,6 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
 
     protected final Comparator<Attr> attrComparator = new AttrComparator();
 
-    private final SchemaRestClient schemaRestClient = new SchemaRestClient();
-
-    private final SyncopeRestClient syncopeRestClient = new SyncopeRestClient();
-
     protected final AnyTO anyTO;
 
     private final Map<String, CustomizationOption> whichAttrs;
@@ -131,7 +127,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
         // whether to render the attribute as readonly or not, without considering schema readonly property
         String schemaName = (org.apache.commons.lang3.StringUtils.isBlank(groupName)
                 ? org.apache.commons.lang3.StringUtils.EMPTY
-                : groupName + "#")
+                : groupName + '#')
                 + schema;
         return whichAttrs.get(schemaName) == null ? false : whichAttrs.get(schemaName).isReadonly();
     }
@@ -143,7 +139,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
     protected List<String> getDefaultValues(final String schema, final String groupName) {
         String schemaName = (org.apache.commons.lang3.StringUtils.isBlank(groupName)
                 ? org.apache.commons.lang3.StringUtils.EMPTY
-                : groupName + "#")
+                : groupName + '#')
                 + schema;
         return whichAttrs.get(schemaName) == null
                 ? List.of()
@@ -173,7 +169,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
         if (anyTypeClasses.isEmpty()) {
             allSchemas = List.of();
         } else {
-            allSchemas = schemaRestClient.getSchemas(getSchemaType(), null, anyTypeClasses.toArray(new String[] {}));
+            allSchemas = SchemaRestClient.getSchemas(getSchemaType(), null, anyTypeClasses.toArray(new String[] {}));
         }
 
         scs.clear();
@@ -183,7 +179,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
             allSchemas.removeAll(allSchemas.stream().
                     filter(schemaTO -> org.apache.commons.lang3.StringUtils.isBlank(groupName)
                     ? !whichAttrs.containsKey(schemaTO.getKey())
-                    : !whichAttrs.containsKey(groupName + "#" + schemaTO.getKey())).collect(Collectors.toSet()));
+                    : !whichAttrs.containsKey(groupName + '#' + schemaTO.getKey())).collect(Collectors.toSet()));
         }
 
         allSchemas.forEach(schemaTO -> scs.put(schemaTO.getKey(), schemaTO));
@@ -208,9 +204,9 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
 
     protected abstract List<Attr> getAttrsFromTO(MembershipTO membershipTO);
 
-    protected List<String> getMembershipAuxClasses(final MembershipTO membershipTO, final String anyType) {
+    protected static List<String> getMembershipAuxClasses(final MembershipTO membershipTO, final String anyType) {
         try {
-            return syncopeRestClient.searchUserTypeExtensions(membershipTO.getGroupName());
+            return SyncopeRestClient.searchUserTypeExtensions(membershipTO.getGroupName());
         } catch (Exception e) {
             return List.of();
         }
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/EnduserAuxClasses.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/EnduserAuxClasses.java
index 8ebc5e7..bdd6f44 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/EnduserAuxClasses.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/EnduserAuxClasses.java
@@ -36,7 +36,7 @@ public class EnduserAuxClasses extends AbstractAuxClasses {
 
     @Override
     protected final List<AnyTypeClassTO> listAnyTypecClasses() {
-        return new SyncopeRestClient().listAnyTypeClasses().stream().map(name -> {
+        return SyncopeRestClient.listAnyTypeClasses().stream().map(name -> {
             AnyTypeClassTO anyTypeClassTO = new AnyTypeClassTO();
             anyTypeClassTO.setKey(name);
             return anyTypeClassTO;
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/Groups.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/Groups.java
index 0fb09fa..ff60de5 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/Groups.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/Groups.java
@@ -104,7 +104,7 @@ public class Groups extends AbstractGroups {
                 public List<MembershipTO> execute(final String filter) {
                     return (StringUtils.isEmpty(filter) || "*".equals(filter)
                             ? groupsModel.getObject()
-                            : groupRestClient.searchAssignableGroups(
+                            : GroupRestClient.searchAssignableGroups(
                                     anyTO.getRealm(),
                                     SyncopeClient.getGroupSearchConditionBuilder().
                                             isAssignable().and().is("name").equalTo(filter).query(),
@@ -138,7 +138,7 @@ public class Groups extends AbstractGroups {
          */
         @Override
         protected void reloadObject() {
-            groups = groupRestClient.searchAssignableGroups(
+            groups = GroupRestClient.searchAssignableGroups(
                     realm,
                     null,
                     1,
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/PlainAttrs.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/PlainAttrs.java
index 5cd1156..52c833b 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/PlainAttrs.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/PlainAttrs.java
@@ -377,7 +377,7 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
         }
 
         panel.setReadOnly(readOnly);
-        panel.setMarkupId(StringUtils.isBlank(groupName) ? schemaTO.getKey() : groupName + "." + schemaTO.getKey());
+        panel.setMarkupId(StringUtils.isBlank(groupName) ? schemaTO.getKey() : groupName + '.' + schemaTO.getKey());
         
         return panel;
     }
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/UserDetails.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/UserDetails.java
index 7323f33..94197ed 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/UserDetails.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/UserDetails.java
@@ -105,7 +105,7 @@ public class UserDetails extends WizardStep {
                 "destinationRealm", "destinationRealm", new PropertyModel<>(userTO, "realm"), false);
 
         ((AjaxDropDownChoicePanel<String>) realm).setChoices(
-                new RealmRestClient().list().stream().map(RealmTO::getFullPath).collect(Collectors.toList()));
+                RealmRestClient.list().stream().map(RealmTO::getFullPath).collect(Collectors.toList()));
         add(realm);
 
         // ------------------------
@@ -163,7 +163,7 @@ public class UserDetails extends WizardStep {
                 userTO, "securityQuestion"));
         ((AjaxDropDownChoicePanel) securityQuestion).setNullValid(true);
 
-        final List<SecurityQuestionTO> securityQuestions = new SecurityQuestionRestClient().list();
+        final List<SecurityQuestionTO> securityQuestions = SecurityQuestionRestClient.list();
         ((AjaxDropDownChoicePanel<String>) securityQuestion).setChoices(securityQuestions.stream().map(
                 SecurityQuestionTO::getKey).collect(Collectors.toList()));
         ((AjaxDropDownChoicePanel<String>) securityQuestion).setChoiceRenderer(
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/UserWizardBuilder.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/UserWizardBuilder.java
index e2a82bb..714cacb 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/UserWizardBuilder.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/UserWizardBuilder.java
@@ -94,7 +94,7 @@ public class UserWizardBuilder extends AnyWizardBuilder implements UserForm {
                     ? UserWrapper.class.cast(modelObject).isStorePasswordInSyncope()
                     : StringUtils.isNotBlank(inner.getPassword()));
 
-            result = userSelfRestClient.create(req);
+            result = UserSelfRestClient.create(req);
         } else {
             fixPlainAndVirAttrs(inner, getOriginalItem().getInnerObject());
             UserUR userUR = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
diff --git a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/RestClientExceptionMapper.java b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/RestClientExceptionMapper.java
index ac6a4d8..b7b4a5a 100644
--- a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/RestClientExceptionMapper.java
+++ b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/RestClientExceptionMapper.java
@@ -79,7 +79,7 @@ public class RestClientExceptionMapper implements ResponseExceptionMapper<Except
         return ex;
     }
 
-    private SyncopeClientCompositeException checkSyncopeClientCompositeException(final Response response) {
+    private static SyncopeClientCompositeException checkSyncopeClientCompositeException(final Response response) {
         SyncopeClientCompositeException compException = SyncopeClientException.buildComposite();
 
         // Attempts to read ErrorTO or List<ErrorTO> as entity...
diff --git a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
index f9281ff..d5e6362 100644
--- a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
+++ b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
@@ -295,7 +295,7 @@ public class SyncopeClient {
      * @param values HTTP header values
      * @return given service instance, with given header set
      */
-    public <T> T header(final T service, final String key, final Object... values) {
+    public static <T> T header(final T service, final String key, final Object... values) {
         WebClient.client(service).header(key, values);
         return service;
     }
@@ -308,7 +308,7 @@ public class SyncopeClient {
      * @param preference preference to be set via {@code Prefer} header
      * @return given service instance, with {@code Prefer} header set
      */
-    public <T> T prefer(final T service, final Preference preference) {
+    public static <T> T prefer(final T service, final Preference preference) {
         return header(service, RESTHeaders.PREFER, preference.toString());
     }
 
@@ -321,7 +321,7 @@ public class SyncopeClient {
      * requested
      * @return service instance of the given reference class, with related header set
      */
-    public <T> T nullPriorityAsync(final T service, final boolean nullPriorityAsync) {
+    public static <T> T nullPriorityAsync(final T service, final boolean nullPriorityAsync) {
         return header(service, RESTHeaders.NULL_PRIORITY_ASYNC, nullPriorityAsync);
     }
 
@@ -334,7 +334,7 @@ public class SyncopeClient {
      * @param ifNot if true then {@code If-None-Match} is set, {@code If-Match} otherwise
      * @return given service instance, with {@code If-Match} or {@code If-None-Match} set
      */
-    private <T> T match(final T service, final EntityTag etag, final boolean ifNot) {
+    private static <T> T match(final T service, final EntityTag etag, final boolean ifNot) {
         WebClient.client(service).match(etag, ifNot);
         return service;
     }
@@ -347,7 +347,7 @@ public class SyncopeClient {
      * @param etag ETag value
      * @return given service instance, with {@code If-Match} set
      */
-    public <T> T ifMatch(final T service, final EntityTag etag) {
+    public static <T> T ifMatch(final T service, final EntityTag etag) {
         return match(service, etag, false);
     }
 
@@ -359,7 +359,7 @@ public class SyncopeClient {
      * @param etag ETag value
      * @return given service instance, with {@code If-None-Match} set
      */
-    public <T> T ifNoneMatch(final T service, final EntityTag etag) {
+    public static <T> T ifNoneMatch(final T service, final EntityTag etag) {
         return match(service, etag, true);
     }
 
@@ -370,7 +370,7 @@ public class SyncopeClient {
      * @param service service class instance
      * @return {@code ETag} header value from latest service run (if available)
      */
-    public <T> EntityTag getLatestEntityTag(final T service) {
+    public static <T> EntityTag getLatestEntityTag(final T service) {
         return WebClient.client(service).getResponse().getEntityTag();
     }
 
diff --git a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
index b9f6cc4..0529e18 100644
--- a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
+++ b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
@@ -89,7 +89,7 @@ public class SyncopeClientFactoryBean {
 
     private JAXRSClientFactoryBean restClientFactoryBean;
 
-    protected JacksonJaxbJsonProvider defaultJsonProvider() {
+    protected static JacksonJaxbJsonProvider defaultJsonProvider() {
         ObjectMapper objectMapper = new ObjectMapper();
         objectMapper.registerModule(new JodaModule());
         objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
@@ -97,7 +97,7 @@ public class SyncopeClientFactoryBean {
     }
 
     @SuppressWarnings({ "rawtypes" })
-    protected JAXBElementProvider<?> defaultJAXBProvider() {
+    protected static JAXBElementProvider<?> defaultJAXBProvider() {
         JAXBElementProvider<?> defaultJAXBProvider = new JAXBElementProvider();
 
         DocumentDepthProperties depthProperties = new DocumentDepthProperties();
@@ -115,7 +115,7 @@ public class SyncopeClientFactoryBean {
         return defaultJAXBProvider;
     }
 
-    protected RestClientExceptionMapper defaultExceptionMapper() {
+    protected static RestClientExceptionMapper defaultExceptionMapper() {
         return new RestClientExceptionMapper();
     }
 
@@ -150,7 +150,7 @@ public class SyncopeClientFactoryBean {
     }
 
     public JacksonJaxbJsonProvider getJsonProvider() {
-        return Optional.ofNullable(jsonProvider).orElseGet(this::defaultJsonProvider);
+        return Optional.ofNullable(jsonProvider).orElseGet(SyncopeClientFactoryBean::defaultJsonProvider);
     }
 
     public void setJsonProvider(final JacksonJaxbJsonProvider jsonProvider) {
@@ -169,7 +169,7 @@ public class SyncopeClientFactoryBean {
     }
 
     public RestClientExceptionMapper getExceptionMapper() {
-        return Optional.ofNullable(exceptionMapper).orElseGet(this::defaultExceptionMapper);
+        return Optional.ofNullable(exceptionMapper).orElseGet(SyncopeClientFactoryBean::defaultExceptionMapper);
     }
 
     public SyncopeClientFactoryBean setExceptionMapper(final RestClientExceptionMapper exceptionMapper) {
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/PropertyUtils.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/PropertyUtils.java
index e431631..bf43088 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/PropertyUtils.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/PropertyUtils.java
@@ -46,7 +46,7 @@ public final class PropertyUtils {
 
         Properties props = new Properties();
 
-        try (InputStream is = clazz.getResourceAsStream("/" + propertiesFileName)) {
+        try (InputStream is = clazz.getResourceAsStream('/' + propertiesFileName)) {
             props.load(is);
 
             String confDirName = props.getProperty(confDirProp);
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/collections/CircularFifoQueue.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/collections/CircularFifoQueue.java
index 9cb0ffd..0446796 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/collections/CircularFifoQueue.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/collections/CircularFifoQueue.java
@@ -182,7 +182,7 @@ public class CircularFifoQueue<E> extends AbstractCollection<E> implements Queue
      *
      * @return always returns {@code false}
      */
-    public boolean isFull() {
+    public static boolean isFull() {
         return false;
     }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/SyncopeFiqlParser.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/SyncopeFiqlParser.java
index 713b618..4548584 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/SyncopeFiqlParser.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/SyncopeFiqlParser.java
@@ -60,8 +60,8 @@ public class SyncopeFiqlParser<T> extends FiqlParser<T> {
         CONDITION_MAP.put(ConditionType.CUSTOM, IEQ);
         CONDITION_MAP.put(ConditionType.CUSTOM, NIEQ);
 
-        String comparators = GT + "|" + GE + "|" + LT + "|" + LE + "|" + EQ + "|" + NEQ + "|" + IEQ + "|" + NIEQ;
-        String s1 = "[\\p{ASCII}]+(" + comparators + ")";
+        String comparators = GT + '|' + GE + '|' + LT + '|' + LE + '|' + EQ + '|' + NEQ + '|' + IEQ + '|' + NIEQ;
+        String s1 = "[\\p{ASCII}]+(" + comparators + ')';
         comparatorsPattern = Pattern.compile(s1);
     }
 
@@ -106,8 +106,8 @@ public class SyncopeFiqlParser<T> extends FiqlParser<T> {
 
         @Override
         public String toString() {
-            return name + " " + operator + " " + tvalue.getObject()
-                    + " (" + tvalue.getObject().getClass().getSimpleName() + ")";
+            return name + ' ' + operator + ' ' + tvalue.getObject()
+                    + " (" + tvalue.getObject().getClass().getSimpleName() + ')';
         }
 
         @Override
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AnyEntitlement.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AnyEntitlement.java
index e20cd71..ad15b2f 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AnyEntitlement.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AnyEntitlement.java
@@ -26,6 +26,6 @@ public enum AnyEntitlement {
     DELETE;
 
     public String getFor(final String anyTypeKey) {
-        return anyTypeKey + "_" + name();
+        return anyTypeKey + '_' + name();
     }
 }
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
index bebcb4d..7b36554 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
@@ -38,11 +38,11 @@ public class AuditLoggerName implements Serializable {
     private static final long serialVersionUID = -647989486671786839L;
 
     public static String getAuditLoggerName(final String domain) {
-        return LoggerType.AUDIT.getPrefix() + "." + domain;
+        return LoggerType.AUDIT.getPrefix() + '.' + domain;
     }
 
     public static String getAuditEventLoggerName(final String domain, final String loggerName) {
-        return domain + "." + loggerName;
+        return domain + '.' + loggerName;
     }
 
     private final AuditElements.EventCategoryType type;
@@ -141,7 +141,7 @@ public class AuditLoggerName implements Serializable {
         }
 
         Map.Entry<EventCategory, Result> eventCategory = parseEventCategory(
-                loggerName.replaceAll(LoggerType.AUDIT.getPrefix() + ".", ""));
+                loggerName.replaceAll(LoggerType.AUDIT.getPrefix() + '.', ""));
 
         return new AuditLoggerName(
                 eventCategory.getKey().getType(),
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
index 271d7a1..8933913 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
@@ -102,7 +102,7 @@ public enum ClientExceptionType {
 
     public String getInfoHeaderValue(final String value) {
         // HTTP header values cannot contain CR / LF
-        return (name() + ":" + value).replaceAll("(\\r|\\n)", " ");
+        return (name() + ':' + value).replaceAll("(\\r|\\n)", " ");
     }
 
     public Response.Status getResponseStatus() {
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/MatchingRule.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/MatchingRule.java
index 4b3ad53..e7ec427 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/MatchingRule.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/MatchingRule.java
@@ -53,6 +53,6 @@ public enum MatchingRule {
 
     public static String toEventName(final MatchingRule rule) {
         return new StringBuilder(MatchingRule.class.getSimpleName()).
-                append("_").append(rule.name()).toString().toLowerCase();
+                append('_').append(rule.name()).toString().toLowerCase();
     }
 }
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/UnmatchingRule.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/UnmatchingRule.java
index 3387137..838f9af 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/UnmatchingRule.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/UnmatchingRule.java
@@ -46,6 +46,6 @@ public enum UnmatchingRule {
 
     public static String toEventName(final UnmatchingRule rule) {
         return new StringBuilder(UnmatchingRule.class.getSimpleName()).
-                append("_").append(rule.name()).toString().toLowerCase();
+                append('_').append(rule.name()).toString().toLowerCase();
     }
 }
diff --git a/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/search/SyncopeFiqlParserTest.java b/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/search/SyncopeFiqlParserTest.java
index 168b0af..422cde3 100644
--- a/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/search/SyncopeFiqlParserTest.java
+++ b/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/search/SyncopeFiqlParserTest.java
@@ -33,7 +33,7 @@ public class SyncopeFiqlParserTest {
             SearchBean.class, AbstractFiqlSearchConditionBuilder.CONTEXTUAL_PROPERTIES);
 
     @SuppressWarnings("unchecked")
-    private SyncopeFiqlSearchCondition<SearchBean> parse(final String fiql) {
+    private static SyncopeFiqlSearchCondition<SearchBean> parse(final String fiql) {
         SearchCondition<SearchBean> parsed = FIQL_PARSER.parse(fiql);
         assertTrue(parsed instanceof SyncopeFiqlSearchCondition);
         return (SyncopeFiqlSearchCondition) parsed;
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
index f993317..0429e29 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
@@ -84,7 +84,7 @@ public final class RESTHeaders {
      * @return multipart/mixed Content-Type string, with given boundary
      */
     public static String multipartMixedWith(final String boundary) {
-        return MULTIPART_MIXED + ";" + BOUNDARY_PARAMETER + "=" + boundary;
+        return MULTIPART_MIXED + ';' + BOUNDARY_PARAMETER + '=' + boundary;
     }
 
     /**
diff --git a/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/model/Domain.java b/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/model/Domain.java
index 2c156ec..0d31d5e 100644
--- a/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/model/Domain.java
+++ b/common/keymaster/client-api/src/main/java/org/apache/syncope/common/keymaster/client/api/model/Domain.java
@@ -241,7 +241,7 @@ public class Domain implements Serializable {
     private String read(final String filename) {
         String read = null;
         try {
-            read = IOUtils.toString(getClass().getResourceAsStream("/" + filename));
+            read = IOUtils.toString(getClass().getResourceAsStream('/' + filename));
         } catch (IOException e) {
             LOG.error("Could not read {}", filename, e);
         }
diff --git a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperConfParamOps.java b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperConfParamOps.java
index 44c56cd..bcbccf7 100644
--- a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperConfParamOps.java
+++ b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperConfParamOps.java
@@ -44,8 +44,8 @@ public class ZookeeperConfParamOps implements ConfParamOps {
     @Autowired
     private CuratorFramework client;
 
-    private String buildConfPath(final String... parts) {
-        return CONF_PATH + "/" + String.join("/", parts);
+    private static String buildConfPath(final String... parts) {
+        return CONF_PATH + '/' + String.join("/", parts);
     }
 
     @Override
diff --git a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOps.java b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOps.java
index 1fd2ce6..7dba3ff 100644
--- a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOps.java
+++ b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperDomainOps.java
@@ -81,7 +81,7 @@ public class ZookeeperDomainOps implements DomainOps, InitializingBean {
 
                     case NODE_REMOVED:
                         LOG.debug("Domain {} removed", event.getData().getPath());
-                        watcher.removed(StringUtils.substringAfter(event.getData().getPath(), DOMAIN_PATH + "/"));
+                        watcher.removed(StringUtils.substringAfter(event.getData().getPath(), DOMAIN_PATH + '/'));
                         break;
 
                     default:
@@ -91,11 +91,11 @@ public class ZookeeperDomainOps implements DomainOps, InitializingBean {
         }
     }
 
-    private String buildDomainPath(final String... parts) {
+    private static String buildDomainPath(final String... parts) {
         String prefix = DOMAIN_PATH;
         String suffix = StringUtils.EMPTY;
         if (parts != null && parts.length > 0) {
-            suffix = "/" + String.join("/", parts);
+            suffix = '/' + String.join("/", parts);
         }
         return prefix + suffix;
     }
diff --git a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperServiceDiscoveryOps.java b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperServiceDiscoveryOps.java
index de715cb..60824ec 100644
--- a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperServiceDiscoveryOps.java
+++ b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperServiceDiscoveryOps.java
@@ -116,9 +116,9 @@ public class ZookeeperServiceDiscoveryOps implements ServiceOps, InitializingBea
         }
     }
 
-    private NetworkService toNetworkService(
-            final NetworkService.Type serviceType,
-            final ServiceInstance<Void> serviceInstance) {
+    private static NetworkService toNetworkService(
+        final NetworkService.Type serviceType,
+        final ServiceInstance<Void> serviceInstance) {
 
         NetworkService ns = new NetworkService();
         ns.setType(serviceType);
diff --git a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperServiceOps.java b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperServiceOps.java
index c1300af..164c021 100644
--- a/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperServiceOps.java
+++ b/common/keymaster/client-zookeeper/src/main/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperServiceOps.java
@@ -46,11 +46,11 @@ public class ZookeeperServiceOps implements ServiceOps {
     @Autowired
     private CuratorFramework client;
 
-    private String buildServicePath(final NetworkService.Type serviceType, final String... parts) {
-        String prefix = SERVICE_PATH + "/" + serviceType.name();
+    private static String buildServicePath(final NetworkService.Type serviceType, final String... parts) {
+        String prefix = SERVICE_PATH + '/' + serviceType.name();
         String suffix = StringUtils.EMPTY;
         if (parts != null && parts.length > 0) {
-            suffix = "/" + String.join("/", parts);
+            suffix = '/' + String.join("/", parts);
         }
         return prefix + suffix;
     }
diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
index 1056ac6..74acede 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
@@ -51,7 +51,7 @@ public class ConnectorHistoryLogic extends AbstractTransactionalLogic<ConnInstan
     public List<ConnInstanceHistoryConfTO> list(final String key) {
         ConnInstance connInstance = connInstanceDAO.find(key);
         if (connInstance == null) {
-            throw new NotFoundException("Connector '" + key + "'");
+            throw new NotFoundException("Connector '" + key + '\'');
         }
 
         return connInstanceHistoryConfDAO.findByEntity(connInstance).stream().
@@ -62,7 +62,7 @@ public class ConnectorHistoryLogic extends AbstractTransactionalLogic<ConnInstan
     public void restore(final String key) {
         ConnInstanceHistoryConf connInstanceHistoryConf = connInstanceHistoryConfDAO.find(key);
         if (connInstanceHistoryConf == null) {
-            throw new NotFoundException("Connector History Conf '" + key + "'");
+            throw new NotFoundException("Connector History Conf '" + key + '\'');
         }
 
         binder.update(connInstanceHistoryConf.getConf());
@@ -72,7 +72,7 @@ public class ConnectorHistoryLogic extends AbstractTransactionalLogic<ConnInstan
     public void delete(final String key) {
         ConnInstanceHistoryConf connInstanceHistoryConf = connInstanceHistoryConfDAO.find(key);
         if (connInstanceHistoryConf == null) {
-            throw new NotFoundException("Connector History Conf '" + key + "'");
+            throw new NotFoundException("Connector History Conf '" + key + '\'');
         }
 
         connInstanceHistoryConfDAO.delete(key);
diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index 6a0779c..6493d66 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -73,7 +73,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
     @Autowired
     private ConnectorFactory connFactory;
 
-    protected void securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
+    protected static void securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
         boolean authorized = effectiveRealms.stream().anyMatch(realm::startsWith);
         if (!authorized) {
             throw new DelegatedAdministrationException(realm, ConnInstance.class.getSimpleName(), key);
@@ -114,7 +114,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
     public ConnInstanceTO delete(final String key) {
         ConnInstance connInstance = connInstanceDAO.authFind(key);
         if (connInstance == null) {
-            throw new NotFoundException("Connector '" + key + "'");
+            throw new NotFoundException("Connector '" + key + '\'');
         }
 
         Set<String> effectiveRealms = RealmUtils.getEffective(
@@ -161,7 +161,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
 
         ConnInstance connInstance = connInstanceDAO.authFind(key);
         if (connInstance == null) {
-            throw new NotFoundException("Connector '" + key + "'");
+            throw new NotFoundException("Connector '" + key + '\'');
         }
 
         return binder.getConnInstanceTO(connInstance);
@@ -247,7 +247,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
 
         ExternalResource resource = resourceDAO.find(resourceName);
         if (resource == null) {
-            throw new NotFoundException("Resource '" + resourceName + "'");
+            throw new NotFoundException("Resource '" + resourceName + '\'');
         }
         ConnInstanceTO connInstance = binder.getConnInstanceTO(connFactory.getConnector(resource).getConnInstance());
         connInstance.setKey(resource.getConnector().getKey());
diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
index c0059a5..941c2ca 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
@@ -95,17 +95,17 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<EntityTO> {
 
         Any<?> any = anyUtils.dao().authFind(anyKey);
         if (any == null) {
-            throw new NotFoundException(anyTypeKind + " '" + anyKey + "'");
+            throw new NotFoundException(anyTypeKind + " '" + anyKey + '\'');
         }
 
         ExternalResource resource = resourceDAO.find(resourceKey);
         if (resource == null) {
-            throw new NotFoundException("Resource '" + resourceKey + "'");
+            throw new NotFoundException("Resource '" + resourceKey + '\'');
         }
         Provision provision = resource.getProvision(any.getType()).orElseThrow(()
-                -> new NotFoundException("Provision for " + any.getType() + " on Resource '" + resourceKey + "'"));
+                -> new NotFoundException("Provision for " + any.getType() + " on Resource '" + resourceKey + '\''));
         if (provision.getMapping() == null) {
-            throw new NotFoundException("Mapping for " + any.getType() + " on Resource '" + resourceKey + "'");
+            throw new NotFoundException("Mapping for " + any.getType() + " on Resource '" + resourceKey + '\'');
         }
 
         return (Pair<Any<?>, Provision>) Pair.of(any, provision);
@@ -132,7 +132,7 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<EntityTO> {
         // 1. build connObjectKeyItem
         MappingItem connObjectKeyItem = MappingUtils.getConnObjectKeyItem(provision).orElseThrow(()
                 -> new NotFoundException("ConnObjectKey for " + any.getType()
-                        + " on resource '" + provision.getResource().getKey() + "'"));
+                        + " on resource '" + provision.getResource().getKey() + '\''));
         String connObjectKeyValue = mappingManager.getConnObjectKeyValue(any, provision).orElse(null);
         if (connObjectKeyValue == null) {
             return null;
diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/RemediationLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/RemediationLogic.java
index 2d8a123..8b0d7fe 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/RemediationLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/RemediationLogic.java
@@ -83,7 +83,7 @@ public class RemediationLogic extends AbstractTransactionalLogic<RemediationTO>
     public RemediationTO read(final String key) {
         Remediation remediation = remediationDAO.find(key);
         if (remediation == null) {
-            LOG.error("Could not find remediation '" + key + "'");
+            LOG.error("Could not find remediation '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -95,7 +95,7 @@ public class RemediationLogic extends AbstractTransactionalLogic<RemediationTO>
     public void delete(final String key) {
         Remediation remediation = remediationDAO.find(key);
         if (remediation == null) {
-            LOG.error("Could not find remediation '" + key + "'");
+            LOG.error("Could not find remediation '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -107,7 +107,7 @@ public class RemediationLogic extends AbstractTransactionalLogic<RemediationTO>
     public ProvisioningResult<?> remedy(final String key, final AnyCR anyCR, final boolean nullPriorityAsync) {
         Remediation remediation = remediationDAO.find(key);
         if (remediation == null) {
-            LOG.error("Could not find remediation '" + key + "'");
+            LOG.error("Could not find remediation '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -136,7 +136,7 @@ public class RemediationLogic extends AbstractTransactionalLogic<RemediationTO>
     public ProvisioningResult<?> remedy(final String key, final AnyUR anyUR, final boolean nullPriorityAsync) {
         Remediation remediation = remediationDAO.find(key);
         if (remediation == null) {
-            LOG.error("Could not find remediation '" + key + "'");
+            LOG.error("Could not find remediation '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -165,7 +165,7 @@ public class RemediationLogic extends AbstractTransactionalLogic<RemediationTO>
     public ProvisioningResult<?> remedy(final String key, final String anyKey, final boolean nullPriorityAsync) {
         Remediation remediation = remediationDAO.find(key);
         if (remediation == null) {
-            LOG.error("Could not find remediation '" + key + "'");
+            LOG.error("Could not find remediation '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
index bcf5d92..87af15c 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
@@ -51,7 +51,7 @@ public class ResourceHistoryLogic extends AbstractTransactionalLogic<ResourceHis
     public List<ResourceHistoryConfTO> list(final String key) {
         ExternalResource resource = resourceDAO.find(key);
         if (resource == null) {
-            throw new NotFoundException("Resource '" + key + "'");
+            throw new NotFoundException("Resource '" + key + '\'');
         }
 
         return resourceHistoryConfDAO.findByEntity(resource).stream().
@@ -62,7 +62,7 @@ public class ResourceHistoryLogic extends AbstractTransactionalLogic<ResourceHis
     public void restore(final String key) {
         ExternalResourceHistoryConf resourceHistoryConf = resourceHistoryConfDAO.find(key);
         if (resourceHistoryConf == null) {
-            throw new NotFoundException("Resource History Conf '" + key + "'");
+            throw new NotFoundException("Resource History Conf '" + key + '\'');
         }
 
         binder.update(resourceHistoryConf.getEntity(), resourceHistoryConf.getConf());
@@ -72,7 +72,7 @@ public class ResourceHistoryLogic extends AbstractTransactionalLogic<ResourceHis
     public void delete(final String key) {
         ExternalResourceHistoryConf resourceHistoryConf = resourceHistoryConfDAO.find(key);
         if (resourceHistoryConf == null) {
-            throw new NotFoundException("Resource History Conf '" + key + "'");
+            throw new NotFoundException("Resource History Conf '" + key + '\'');
         }
 
         resourceHistoryConfDAO.delete(key);
diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
index 1e14646..704cbe8 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
@@ -116,7 +116,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     @Autowired
     private ConnectorFactory connFactory;
 
-    protected void securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
+    protected static void securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
         boolean authorized = effectiveRealms.stream().anyMatch(realm::startsWith);
         if (!authorized) {
             throw new DelegatedAdministrationException(realm, ExternalResource.class.getSimpleName(), key);
@@ -154,7 +154,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     public ResourceTO update(final ResourceTO resourceTO) {
         ExternalResource resource = resourceDAO.authFind(resourceTO.getKey());
         if (resource == null) {
-            throw new NotFoundException("Resource '" + resourceTO.getKey() + "'");
+            throw new NotFoundException("Resource '" + resourceTO.getKey() + '\'');
         }
 
         Set<String> effectiveRealms = RealmUtils.getEffective(
@@ -169,7 +169,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     public void setLatestSyncToken(final String key, final String anyTypeKey) {
         ExternalResource resource = resourceDAO.authFind(key);
         if (resource == null) {
-            throw new NotFoundException("Resource '" + key + "'");
+            throw new NotFoundException("Resource '" + key + '\'');
         }
 
         Connector connector;
@@ -183,18 +183,18 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
 
         if (SyncopeConstants.REALM_ANYTYPE.equals(anyTypeKey)) {
             if (resource.getOrgUnit() == null) {
-                throw new NotFoundException("Realm provision not enabled for Resource '" + key + "'");
+                throw new NotFoundException("Realm provision not enabled for Resource '" + key + '\'');
             }
 
             resource.getOrgUnit().setSyncToken(connector.getLatestSyncToken(resource.getOrgUnit().getObjectClass()));
         } else {
             AnyType anyType = anyTypeDAO.find(anyTypeKey);
             if (anyType == null) {
-                throw new NotFoundException("AnyType '" + anyTypeKey + "'");
+                throw new NotFoundException("AnyType '" + anyTypeKey + '\'');
             }
             Optional<? extends Provision> provision = resource.getProvision(anyType);
             if (provision.isEmpty()) {
-                throw new NotFoundException("Provision for AnyType '" + anyTypeKey + "' in Resource '" + key + "'");
+                throw new NotFoundException("Provision for AnyType '" + anyTypeKey + "' in Resource '" + key + '\'');
             }
 
             provision.get().setSyncToken(connector.getLatestSyncToken(provision.get().getObjectClass()));
@@ -212,22 +212,22 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     public void removeSyncToken(final String key, final String anyTypeKey) {
         ExternalResource resource = resourceDAO.authFind(key);
         if (resource == null) {
-            throw new NotFoundException("Resource '" + key + "'");
+            throw new NotFoundException("Resource '" + key + '\'');
         }
         if (SyncopeConstants.REALM_ANYTYPE.equals(anyTypeKey)) {
             if (resource.getOrgUnit() == null) {
-                throw new NotFoundException("Realm provision not enabled for Resource '" + key + "'");
+                throw new NotFoundException("Realm provision not enabled for Resource '" + key + '\'');
             }
 
             resource.getOrgUnit().setSyncToken(null);
         } else {
             AnyType anyType = anyTypeDAO.find(anyTypeKey);
             if (anyType == null) {
-                throw new NotFoundException("AnyType '" + anyTypeKey + "'");
+                throw new NotFoundException("AnyType '" + anyTypeKey + '\'');
             }
             Optional<? extends Provision> provision = resource.getProvision(anyType);
             if (provision.isEmpty()) {
-                throw new NotFoundException("Provision for AnyType '" + anyTypeKey + "' in Resource '" + key + "'");
+                throw new NotFoundException("Provision for AnyType '" + anyTypeKey + "' in Resource '" + key + '\'');
             }
 
             provision.get().setSyncToken(null);
@@ -245,7 +245,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     public ResourceTO delete(final String key) {
         ExternalResource resource = resourceDAO.authFind(key);
         if (resource == null) {
-            throw new NotFoundException("Resource '" + key + "'");
+            throw new NotFoundException("Resource '" + key + '\'');
         }
 
         Set<String> effectiveRealms = RealmUtils.getEffective(
@@ -265,7 +265,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     public ResourceTO read(final String key) {
         ExternalResource resource = resourceDAO.authFind(key);
         if (resource == null) {
-            throw new NotFoundException("Resource '" + key + "'");
+            throw new NotFoundException("Resource '" + key + '\'');
         }
 
         return binder.getResourceTO(resource);
@@ -282,15 +282,15 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
 
         ExternalResource resource = resourceDAO.authFind(resourceKey);
         if (resource == null) {
-            throw new NotFoundException("Resource '" + resourceKey + "'");
+            throw new NotFoundException("Resource '" + resourceKey + '\'');
         }
         AnyType anyType = anyTypeDAO.find(anyTypeKey);
         if (anyType == null) {
-            throw new NotFoundException("AnyType '" + anyTypeKey + "'");
+            throw new NotFoundException("AnyType '" + anyTypeKey + '\'');
         }
         Optional<? extends Provision> provision = resource.getProvision(anyType);
         if (provision.isEmpty()) {
-            throw new NotFoundException("Provision on resource '" + resourceKey + "' for type '" + anyTypeKey + "'");
+            throw new NotFoundException("Provision on resource '" + resourceKey + "' for type '" + anyTypeKey + '\'');
         }
 
         return ImmutableTriple.of(resource, anyType, provision.get());
@@ -314,10 +314,10 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
         // 2. build connObjectKeyItem
         MappingItem connObjectKeyItem = MappingUtils.getConnObjectKeyItem(init.getRight()).
                 orElseThrow(() -> new NotFoundException(
-                "ConnObjectKey mapping for " + init.getMiddle() + " " + anyKey + " on resource '" + key + "'"));
+                "ConnObjectKey mapping for " + init.getMiddle() + ' ' + anyKey + " on resource '" + key + '\''));
         String connObjectKeyValue = mappingManager.getConnObjectKeyValue(any, init.getRight()).
                 orElseThrow(() -> new NotFoundException(
-                "ConnObjectKey value for " + init.getMiddle() + " " + anyKey + " on resource '" + key + "'"));
+                "ConnObjectKey value for " + init.getMiddle() + ' ' + anyKey + " on resource '" + key + '\''));
 
         // 3. determine attributes to query
         Set<MappingItem> linkinMappingItems = virSchemaDAO.findByProvision(init.getRight()).stream().
@@ -362,10 +362,10 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
         if (SyncopeConstants.REALM_ANYTYPE.equals(anyTypeKey)) {
             resource = resourceDAO.authFind(key);
             if (resource == null) {
-                throw new NotFoundException("Resource '" + key + "'");
+                throw new NotFoundException("Resource '" + key + '\'');
             }
             if (resource.getOrgUnit() == null) {
-                throw new NotFoundException("Realm provisioning for resource '" + key + "'");
+                throw new NotFoundException("Realm provisioning for resource '" + key + '\'');
             }
 
             objectClass = resource.getOrgUnit().getObjectClass();
@@ -413,7 +413,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     public void check(final ResourceTO resourceTO) {
         ConnInstance connInstance = connInstanceDAO.find(resourceTO.getConnector());
         if (connInstance == null) {
-            throw new NotFoundException("Connector '" + resourceTO.getConnector() + "'");
+            throw new NotFoundException("Connector '" + resourceTO.getConnector() + '\'');
         }
 
         connFactory.createConnector(
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
index da9f056..f360225 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
@@ -72,7 +72,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, C extends AnyCR, U exte
     @Autowired
     private TemplateUtils templateUtils;
 
-    private List<LogicActions> getActions(final Realm realm) {
+    private static List<LogicActions> getActions(final Realm realm) {
         List<LogicActions> actions = new ArrayList<>();
 
         realm.getActions().forEach(impl -> {
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java
index 8bb55b2..6d8c91c 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java
@@ -56,7 +56,7 @@ public class AccessTokenLogic extends AbstractTransactionalLogic<AccessTokenTO>
     @Autowired
     private AccessTokenDAO accessTokenDAO;
 
-    private byte[] getAuthorities() {
+    private static byte[] getAuthorities() {
         byte[] authorities = null;
         try {
             authorities = ENCRYPTOR.encode(POJOHelper.serialize(
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
index f34f618..2cc212f 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
@@ -51,7 +51,7 @@ public class AnyTypeClassLogic extends AbstractTransactionalLogic<AnyTypeClassTO
     public AnyTypeClassTO read(final String key) {
         AnyTypeClass anyType = anyTypeClassDAO.find(key);
         if (anyType == null) {
-            LOG.error("Could not find anyType '" + key + "'");
+            LOG.error("Could not find anyType '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -82,7 +82,7 @@ public class AnyTypeClassLogic extends AbstractTransactionalLogic<AnyTypeClassTO
     public AnyTypeClassTO update(final AnyTypeClassTO anyTypeClassTO) {
         AnyTypeClass anyType = anyTypeClassDAO.find(anyTypeClassTO.getKey());
         if (anyType == null) {
-            LOG.error("Could not find anyTypeClass '" + anyTypeClassTO.getKey() + "'");
+            LOG.error("Could not find anyTypeClass '" + anyTypeClassTO.getKey() + '\'');
             throw new NotFoundException(anyTypeClassTO.getKey());
         }
 
@@ -96,7 +96,7 @@ public class AnyTypeClassLogic extends AbstractTransactionalLogic<AnyTypeClassTO
     public AnyTypeClassTO delete(final String key) {
         AnyTypeClass anyTypeClass = anyTypeClassDAO.find(key);
         if (anyTypeClass == null) {
-            LOG.error("Could not find anyTypeClass '" + key + "'");
+            LOG.error("Could not find anyTypeClass '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
index 7c7bf56..49bf59c 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
@@ -56,7 +56,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
     public AnyTypeTO read(final String key) {
         AnyType anyType = anyTypeDAO.find(key);
         if (anyType == null) {
-            LOG.error("Could not find anyType '" + key + "'");
+            LOG.error("Could not find anyType '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -88,7 +88,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
     public AnyTypeTO update(final AnyTypeTO anyTypeTO) {
         AnyType anyType = anyTypeDAO.find(anyTypeTO.getKey());
         if (anyType == null) {
-            LOG.error("Could not find anyType '" + anyTypeTO.getKey() + "'");
+            LOG.error("Could not find anyType '" + anyTypeTO.getKey() + '\'');
 
             throw new NotFoundException(anyTypeTO.getKey());
         }
@@ -103,7 +103,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
     public AnyTypeTO delete(final String key) {
         AnyType anyType = anyTypeDAO.find(key);
         if (anyType == null) {
-            LOG.error("Could not find anyType '" + key + "'");
+            LOG.error("Could not find anyType '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ApplicationLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ApplicationLogic.java
index 5644bb7..90f7249 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ApplicationLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ApplicationLogic.java
@@ -49,7 +49,7 @@ public class ApplicationLogic extends AbstractTransactionalLogic<ApplicationTO>
     public ApplicationTO read(final String key) {
         Application application = applicationDAO.find(key);
         if (application == null) {
-            LOG.error("Could not find application '" + key + "'");
+            LOG.error("Could not find application '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -62,7 +62,7 @@ public class ApplicationLogic extends AbstractTransactionalLogic<ApplicationTO>
     public PrivilegeTO readPrivilege(final String key) {
         Privilege privilege = applicationDAO.findPrivilege(key);
         if (privilege == null) {
-            LOG.error("Could not find privilege '" + key + "'");
+            LOG.error("Could not find privilege '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -85,7 +85,7 @@ public class ApplicationLogic extends AbstractTransactionalLogic<ApplicationTO>
     public ApplicationTO update(final ApplicationTO applicationTO) {
         Application application = applicationDAO.find(applicationTO.getKey());
         if (application == null) {
-            LOG.error("Could not find application '" + applicationTO.getKey() + "'");
+            LOG.error("Could not find application '" + applicationTO.getKey() + '\'');
             throw new NotFoundException(applicationTO.getKey());
         }
 
@@ -96,7 +96,7 @@ public class ApplicationLogic extends AbstractTransactionalLogic<ApplicationTO>
     public ApplicationTO delete(final String key) {
         Application application = applicationDAO.find(key);
         if (application == null) {
-            LOG.error("Could not find application '" + key + "'");
+            LOG.error("Could not find application '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.java
index 46ea701..1cbd1a3 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.java
@@ -47,7 +47,7 @@ public class DynRealmLogic extends AbstractTransactionalLogic<DynRealmTO> {
     public DynRealmTO read(final String key) {
         DynRealm dynRealm = dynRealmDAO.find(key);
         if (dynRealm == null) {
-            LOG.error("Could not find dynamic realm '" + key + "'");
+            LOG.error("Could not find dynamic realm '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -69,7 +69,7 @@ public class DynRealmLogic extends AbstractTransactionalLogic<DynRealmTO> {
     public DynRealmTO update(final DynRealmTO dynRealmTO) {
         DynRealm dynRealm = dynRealmDAO.find(dynRealmTO.getKey());
         if (dynRealm == null) {
-            LOG.error("Could not find dynamic realm '" + dynRealmTO.getKey() + "'");
+            LOG.error("Could not find dynamic realm '" + dynRealmTO.getKey() + '\'');
             throw new NotFoundException(dynRealmTO.getKey());
         }
 
@@ -80,7 +80,7 @@ public class DynRealmLogic extends AbstractTransactionalLogic<DynRealmTO> {
     public DynRealmTO delete(final String key) {
         DynRealm dynRealm = dynRealmDAO.find(key);
         if (dynRealm == null) {
-            LOG.error("Could not find dynamic realm '" + key + "'");
+            LOG.error("Could not find dynamic realm '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index f8c97bb..0d5a0c0 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -233,7 +233,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupCR, GroupUR> {
         if (!ownedGroups.isEmpty()) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.GroupOwnership);
             sce.getElements().addAll(ownedGroups.stream().
-                    map(g -> g.getKey() + " " + g.getName()).collect(Collectors.toList()));
+                    map(g -> g.getKey() + ' ' + g.getName()).collect(Collectors.toList()));
             throw sce;
         }
 
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ImplementationLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ImplementationLogic.java
index 8b45f86..40380cd 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ImplementationLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ImplementationLogic.java
@@ -77,7 +77,7 @@ public class ImplementationLogic extends AbstractTransactionalLogic<Implementati
     @Autowired
     private NotificationDAO notificationDAO;
 
-    private void checkType(final String type) {
+    private static void checkType(final String type) {
         if (!ImplementationTypesHolder.getInstance().getValues().containsKey(type)) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidImplementationType);
             sce.getElements().add("Implementation type not found: ");
@@ -101,7 +101,7 @@ public class ImplementationLogic extends AbstractTransactionalLogic<Implementati
 
         Implementation implementation = implementationDAO.find(key);
         if (implementation == null) {
-            LOG.error("Could not find implementation '" + key + "'");
+            LOG.error("Could not find implementation '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -137,7 +137,7 @@ public class ImplementationLogic extends AbstractTransactionalLogic<Implementati
     public ImplementationTO update(final ImplementationTO implementationTO) {
         Implementation implementation = implementationDAO.find(implementationTO.getKey());
         if (implementation == null) {
-            LOG.error("Could not find implementation '" + implementationTO.getKey() + "'");
+            LOG.error("Could not find implementation '" + implementationTO.getKey() + '\'');
 
             throw new NotFoundException(implementationTO.getKey());
         }
@@ -154,7 +154,7 @@ public class ImplementationLogic extends AbstractTransactionalLogic<Implementati
     public void delete(final String type, final String key) {
         Implementation implementation = implementationDAO.find(key);
         if (implementation == null) {
-            LOG.error("Could not find implementation '" + key + "'");
+            LOG.error("Could not find implementation '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
index 05b5dcb..22c5d37 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
@@ -152,7 +152,7 @@ public class LoggerLogic extends AbstractTransactionalLogic<EntityTO> {
                 collect(Collectors.toList());
     }
 
-    private void throwInvalidLogger(final LoggerType type) {
+    private static void throwInvalidLogger(final LoggerType type) {
         SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidLogger);
         sce.getElements().add("Expected " + type.name());
 
@@ -216,7 +216,7 @@ public class LoggerLogic extends AbstractTransactionalLogic<EntityTO> {
             }
             for (AuditAppender auditAppender : loggerLoader.auditAppenders(AuthContextUtils.getDomain())) {
                 if (auditAppender.getEvents().stream().anyMatch(event -> name.equalsIgnoreCase(event.toLoggerName()))) {
-                    loggerLoader.addAppenderToContext(ctx, auditAppender, logConf);
+                    LoggerLoader.addAppenderToContext(ctx, auditAppender, logConf);
                 }
             }
             if (isRootLogConf) {
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.java
index abc1cde..074a2bd 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.java
@@ -53,7 +53,7 @@ public class MailTemplateLogic extends AbstractTransactionalLogic<MailTemplateTO
     @Autowired
     private EntityFactory entityFactory;
 
-    private MailTemplateTO getMailTemplateTO(final String key) {
+    private static MailTemplateTO getMailTemplateTO(final String key) {
         MailTemplateTO mailTemplateTO = new MailTemplateTO();
         mailTemplateTO.setKey(key);
         return mailTemplateTO;
@@ -64,7 +64,7 @@ public class MailTemplateLogic extends AbstractTransactionalLogic<MailTemplateTO
     public MailTemplateTO read(final String key) {
         MailTemplate mailTemplate = mailTemplateDAO.find(key);
         if (mailTemplate == null) {
-            LOG.error("Could not find mail template '" + key + "'");
+            LOG.error("Could not find mail template '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -95,7 +95,7 @@ public class MailTemplateLogic extends AbstractTransactionalLogic<MailTemplateTO
     public String getFormat(final String key, final MailTemplateFormat format) {
         MailTemplate mailTemplate = mailTemplateDAO.find(key);
         if (mailTemplate == null) {
-            LOG.error("Could not find mail template '" + key + "'");
+            LOG.error("Could not find mail template '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -116,7 +116,7 @@ public class MailTemplateLogic extends AbstractTransactionalLogic<MailTemplateTO
     public void setFormat(final String key, final MailTemplateFormat format, final String template) {
         MailTemplate mailTemplate = mailTemplateDAO.find(key);
         if (mailTemplate == null) {
-            LOG.error("Could not find mail template '" + key + "'");
+            LOG.error("Could not find mail template '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -134,7 +134,7 @@ public class MailTemplateLogic extends AbstractTransactionalLogic<MailTemplateTO
     public MailTemplateTO delete(final String key) {
         MailTemplate mailTemplate = mailTemplateDAO.find(key);
         if (mailTemplate == null) {
-            LOG.error("Could not find mail template '" + key + "'");
+            LOG.error("Could not find mail template '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
index 86dec82..af54d4b 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
@@ -54,7 +54,7 @@ public class NotificationLogic extends AbstractJobLogic<NotificationTO> {
     public NotificationTO read(final String key) {
         Notification notification = notificationDAO.find(key);
         if (notification == null) {
-            LOG.error("Could not find notification '" + key + "'");
+            LOG.error("Could not find notification '" + key + '\'');
 
             throw new NotFoundException(String.valueOf(key));
         }
@@ -77,7 +77,7 @@ public class NotificationLogic extends AbstractJobLogic<NotificationTO> {
     public NotificationTO update(final NotificationTO notificationTO) {
         Notification notification = notificationDAO.find(notificationTO.getKey());
         if (notification == null) {
-            LOG.error("Could not find notification '" + notificationTO.getKey() + "'");
+            LOG.error("Could not find notification '" + notificationTO.getKey() + '\'');
             throw new NotFoundException(String.valueOf(notificationTO.getKey()));
         }
 
@@ -91,7 +91,7 @@ public class NotificationLogic extends AbstractJobLogic<NotificationTO> {
     public NotificationTO delete(final String key) {
         Notification notification = notificationDAO.find(key);
         if (notification == null) {
-            LOG.error("Could not find notification '" + key + "'");
+            LOG.error("Could not find notification '" + key + '\'');
 
             throw new NotFoundException(String.valueOf(key));
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index 7df156a..aa7465c 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -74,7 +74,7 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
     public List<RealmTO> list(final String fullPath) {
         Realm realm = realmDAO.findByFullPath(fullPath);
         if (realm == null) {
-            LOG.error("Could not find realm '" + fullPath + "'");
+            LOG.error("Could not find realm '" + fullPath + '\'');
 
             throw new NotFoundException(fullPath);
         }
@@ -134,7 +134,7 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
     public ProvisioningResult<RealmTO> update(final RealmTO realmTO) {
         Realm realm = realmDAO.findByFullPath(realmTO.getFullPath());
         if (realm == null) {
-            LOG.error("Could not find realm '" + realmTO.getFullPath() + "'");
+            LOG.error("Could not find realm '" + realmTO.getFullPath() + '\'');
 
             throw new NotFoundException(realmTO.getFullPath());
         }
@@ -156,7 +156,7 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
     public ProvisioningResult<RealmTO> delete(final String fullPath) {
         Realm realm = realmDAO.findByFullPath(fullPath);
         if (realm == null) {
-            LOG.error("Could not find realm '" + fullPath + "'");
+            LOG.error("Could not find realm '" + fullPath + '\'');
 
             throw new NotFoundException(fullPath);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java
index 9edca79..1b76d42 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java
@@ -48,7 +48,7 @@ public class RelationshipTypeLogic extends AbstractTransactionalLogic<Relationsh
     public RelationshipTypeTO read(final String key) {
         RelationshipType relationshipType = relationshipTypeDAO.find(key);
         if (relationshipType == null) {
-            LOG.error("Could not find relationshipType '" + key + "'");
+            LOG.error("Could not find relationshipType '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -71,7 +71,7 @@ public class RelationshipTypeLogic extends AbstractTransactionalLogic<Relationsh
     public RelationshipTypeTO update(final RelationshipTypeTO relationshipTypeTO) {
         RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTypeTO.getKey());
         if (relationshipType == null) {
-            LOG.error("Could not find relationshipType '" + relationshipTypeTO.getKey() + "'");
+            LOG.error("Could not find relationshipType '" + relationshipTypeTO.getKey() + '\'');
             throw new NotFoundException(relationshipTypeTO.getKey());
         }
 
@@ -85,7 +85,7 @@ public class RelationshipTypeLogic extends AbstractTransactionalLogic<Relationsh
     public RelationshipTypeTO delete(final String key) {
         RelationshipType relationshipType = relationshipTypeDAO.find(key);
         if (relationshipType == null) {
-            LOG.error("Could not find relationshipType '" + key + "'");
+            LOG.error("Could not find relationshipType '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
index bcc40c1..77568e6 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
@@ -215,8 +215,8 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
     }
 
     @PreAuthorize("hasRole('" + IdRepoEntitlement.REPORT_READ + "')")
-    public void exportExecutionResult(final OutputStream os, final ReportExec reportExec,
-            final ReportExecExportFormat format) {
+    public static void exportExecutionResult(final OutputStream os, final ReportExec reportExec,
+                                             final ReportExecExportFormat format) {
 
         // streaming SAX handler from a compressed byte array stream
         try (ByteArrayInputStream bais = new ByteArrayInputStream(reportExec.getExecResult());
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportTemplateLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportTemplateLogic.java
index e3751a3..907a7b9 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportTemplateLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportTemplateLogic.java
@@ -53,7 +53,7 @@ public class ReportTemplateLogic extends AbstractTransactionalLogic<ReportTempla
     @Autowired
     private EntityFactory entityFactory;
 
-    private ReportTemplateTO getReportTemplateTO(final String key) {
+    private static ReportTemplateTO getReportTemplateTO(final String key) {
         ReportTemplateTO reportTemplateTO = new ReportTemplateTO();
         reportTemplateTO.setKey(key);
         return reportTemplateTO;
@@ -64,7 +64,7 @@ public class ReportTemplateLogic extends AbstractTransactionalLogic<ReportTempla
     public ReportTemplateTO read(final String key) {
         ReportTemplate reportTemplate = reportTemplateDAO.find(key);
         if (reportTemplate == null) {
-            LOG.error("Could not find report template '" + key + "'");
+            LOG.error("Could not find report template '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -95,7 +95,7 @@ public class ReportTemplateLogic extends AbstractTransactionalLogic<ReportTempla
     public String getFormat(final String key, final ReportTemplateFormat format) {
         ReportTemplate reportTemplate = reportTemplateDAO.find(key);
         if (reportTemplate == null) {
-            LOG.error("Could not find report template '" + key + "'");
+            LOG.error("Could not find report template '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -118,7 +118,7 @@ public class ReportTemplateLogic extends AbstractTransactionalLogic<ReportTempla
     public void setFormat(final String key, final ReportTemplateFormat format, final String template) {
         ReportTemplate reportTemplate = reportTemplateDAO.find(key);
         if (reportTemplate == null) {
-            LOG.error("Could not find report template '" + key + "'");
+            LOG.error("Could not find report template '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -146,7 +146,7 @@ public class ReportTemplateLogic extends AbstractTransactionalLogic<ReportTempla
     public ReportTemplateTO delete(final String key) {
         ReportTemplate reportTemplate = reportTemplateDAO.find(key);
         if (reportTemplate == null) {
-            LOG.error("Could not find report template '" + key + "'");
+            LOG.error("Could not find report template '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java
index cf57e08..a37e4ee 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java
@@ -48,7 +48,7 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> {
     public RoleTO read(final String key) {
         Role role = roleDAO.find(key);
         if (role == null) {
-            LOG.error("Could not find role '" + key + "'");
+            LOG.error("Could not find role '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -71,7 +71,7 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> {
     public RoleTO update(final RoleTO roleTO) {
         Role role = roleDAO.find(roleTO.getKey());
         if (role == null) {
-            LOG.error("Could not find role '" + roleTO.getKey() + "'");
+            LOG.error("Could not find role '" + roleTO.getKey() + '\'');
             throw new NotFoundException(roleTO.getKey());
         }
 
@@ -82,7 +82,7 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> {
     public RoleTO delete(final String key) {
         Role role = roleDAO.find(key);
         if (role == null) {
-            LOG.error("Could not find role '" + key + "'");
+            LOG.error("Could not find role '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -96,14 +96,14 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> {
     public String getConsoleLayoutInfo(final String key) {
         Role role = roleDAO.find(key);
         if (role == null) {
-            LOG.error("Could not find role '" + key + "'");
+            LOG.error("Could not find role '" + key + '\'');
 
             throw new NotFoundException(key);
         }
 
         String consoleLayout = role.getConsoleLayoutInfo();
         if (StringUtils.isBlank(consoleLayout)) {
-            LOG.error("Could not find console layout for Role '" + key + "'");
+            LOG.error("Could not find console layout for Role '" + key + '\'');
 
             throw new NotFoundException("Console layout for role " + key);
         }
@@ -115,7 +115,7 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> {
     public void setConsoleLayoutInfo(final String key, final String consoleLayout) {
         Role role = roleDAO.find(key);
         if (role == null) {
-            LOG.error("Could not find role '" + key + "'");
+            LOG.error("Could not find role '" + key + '\'');
 
             throw new NotFoundException(key);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
index 3e3048b..1e08b6e 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
@@ -229,7 +229,7 @@ public class SchemaLogic extends AbstractTransactionalLogic<SchemaTO> {
             case VIRTUAL:
                 VirSchema virSchema = virSchemaDAO.find(schemaTO.getKey());
                 if (virSchema == null) {
-                    throw new NotFoundException("Virtual Schema '" + schemaTO.getKey() + "'");
+                    throw new NotFoundException("Virtual Schema '" + schemaTO.getKey() + '\'');
                 }
 
                 virSchemaDAO.save(binder.update((VirSchemaTO) schemaTO, virSchema));
@@ -238,7 +238,7 @@ public class SchemaLogic extends AbstractTransactionalLogic<SchemaTO> {
             case DERIVED:
                 DerSchema derSchema = derSchemaDAO.find(schemaTO.getKey());
                 if (derSchema == null) {
-                    throw new NotFoundException("Derived schema '" + schemaTO.getKey() + "'");
+                    throw new NotFoundException("Derived schema '" + schemaTO.getKey() + '\'');
                 }
 
                 derSchemaDAO.save(binder.update((DerSchemaTO) schemaTO, derSchema));
@@ -248,7 +248,7 @@ public class SchemaLogic extends AbstractTransactionalLogic<SchemaTO> {
             default:
                 PlainSchema plainSchema = plainSchemaDAO.find(schemaTO.getKey());
                 if (plainSchema == null) {
-                    throw new NotFoundException("Schema '" + schemaTO.getKey() + "'");
+                    throw new NotFoundException("Schema '" + schemaTO.getKey() + '\'');
                 }
 
                 plainSchemaDAO.save(binder.update((PlainSchemaTO) schemaTO, plainSchema));
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
index 2fe2fc8..20610a8 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
@@ -58,7 +58,7 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
     public SecurityQuestionTO read(final String key) {
         SecurityQuestion securityQuestion = securityQuestionDAO.find(key);
         if (securityQuestion == null) {
-            LOG.error("Could not find security question '" + key + "'");
+            LOG.error("Could not find security question '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -75,7 +75,7 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
     public SecurityQuestionTO update(final SecurityQuestionTO securityQuestionTO) {
         SecurityQuestion securityQuestion = securityQuestionDAO.find(securityQuestionTO.getKey());
         if (securityQuestion == null) {
-            LOG.error("Could not find security question '" + securityQuestionTO.getKey() + "'");
+            LOG.error("Could not find security question '" + securityQuestionTO.getKey() + '\'');
 
             throw new NotFoundException(securityQuestionTO.getKey());
         }
@@ -90,7 +90,7 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
     public SecurityQuestionTO delete(final String key) {
         SecurityQuestion securityQuestion = securityQuestionDAO.find(key);
         if (securityQuestion == null) {
-            LOG.error("Could not find security question '" + key + "'");
+            LOG.error("Could not find security question '" + key + '\'');
 
             throw new NotFoundException(key);
         }
@@ -111,7 +111,7 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
         }
 
         if (user.getSecurityQuestion() == null) {
-            LOG.error("Could not find security question for user '" + username + "'");
+            LOG.error("Could not find security question for user '" + username + '\'');
 
             throw new NotFoundException("Security question for user " + username);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index a61d833..58d5433 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -337,7 +337,7 @@ public class SyncopeLogic extends AbstractLogic<EntityTO> {
         return PLATFORM_INFO;
     }
 
-    private void initSystemInfo() {
+    private static void initSystemInfo() {
         if (SYSTEM_INFO == null) {
             OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
             RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
@@ -350,19 +350,19 @@ public class SyncopeLogic extends AbstractLogic<EntityTO> {
             }
 
             SYSTEM_INFO.setOs(operatingSystemMXBean.getName()
-                    + " " + operatingSystemMXBean.getVersion()
-                    + " " + operatingSystemMXBean.getArch());
+                    + ' ' + operatingSystemMXBean.getVersion()
+                    + ' ' + operatingSystemMXBean.getArch());
             SYSTEM_INFO.setAvailableProcessors(operatingSystemMXBean.getAvailableProcessors());
             SYSTEM_INFO.setJvm(
                     runtimeMXBean.getVmName()
-                    + " " + System.getProperty("java.version")
-                    + " " + runtimeMXBean.getVmVendor());
+                    + ' ' + System.getProperty("java.version")
+                    + ' ' + runtimeMXBean.getVmVendor());
             SYSTEM_INFO.setStartTime(runtimeMXBean.getStartTime());
         }
     }
 
     @EventListener
-    public void addLoadInstant(final PayloadApplicationEvent<SystemInfo.LoadInstant> event) {
+    public static void addLoadInstant(final PayloadApplicationEvent<SystemInfo.LoadInstant> event) {
         synchronized (MONITOR) {
             initSystemInfo();
             SYSTEM_INFO.getLoad().add(event.getPayload());
@@ -370,7 +370,7 @@ public class SyncopeLogic extends AbstractLogic<EntityTO> {
     }
 
     @PreAuthorize("isAuthenticated()")
-    public SystemInfo system() {
+    public static SystemInfo system() {
         synchronized (MONITOR) {
             initSystemInfo();
         }
@@ -448,11 +448,11 @@ public class SyncopeLogic extends AbstractLogic<EntityTO> {
             termCond.setSchema("name");
 
             String termSearchableValue = (term.startsWith("*") && !term.endsWith("*"))
-                    ? term + "%"
+                    ? term + '%'
                     : (!term.startsWith("*") && term.endsWith("*"))
-                    ? "%" + term
+                    ? '%' + term
                     : (term.startsWith("*") && term.endsWith("*")
-                    ? term : "%" + term + "%");
+                    ? term : '%' + term + '%');
             termCond.setExpression(termSearchableValue);
 
             searchCond = SearchCond.getAndCond(
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
index 46819fd..0651a98 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
@@ -347,7 +347,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserCR, UserUR> {
         if (!ownedGroups.isEmpty()) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.GroupOwnership);
             sce.getElements().addAll(ownedGroups.stream().
-                    map(group -> group.getKey() + " " + group.getName()).collect(Collectors.toList()));
+                    map(group -> group.getKey() + ' ' + group.getName()).collect(Collectors.toList()));
             throw sce;
         }
 
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/cocoon/XSLTTransformer.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/cocoon/XSLTTransformer.java
index 4c27ee8..271f84a 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/cocoon/XSLTTransformer.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/cocoon/XSLTTransformer.java
@@ -188,6 +188,6 @@ public class XSLTTransformer extends AbstractSAXTransformer implements CachingPi
 
     @Override
     public String toString() {
-        return StringRepresentation.buildString(this, "src=<" + this.source + ">");
+        return StringRepresentation.buildString(this, "src=<" + this.source + '>');
     }
 }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/ClassPathScanImplementationLookup.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/ClassPathScanImplementationLookup.java
index c594ecb..b5421ca 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/ClassPathScanImplementationLookup.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/ClassPathScanImplementationLookup.java
@@ -100,7 +100,7 @@ public class ClassPathScanImplementationLookup implements ImplementationLookup {
      *
      * @return basePackage for classpath scanning
      */
-    protected String getBasePackage() {
+    protected static String getBasePackage() {
         return DEFAULT_BASE_PACKAGE;
     }
 
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerAccessor.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerAccessor.java
index 4f71ae6..4b057e3 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerAccessor.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerAccessor.java
@@ -74,7 +74,7 @@ public class LoggerAccessor {
                     logConf.setLevel(syncopeLoggers.get(loggerName).getLevel().getLevel());
                     syncopeLoggers.remove(loggerName);
                 } else if (!loggerName.startsWith(LoggerType.AUDIT.getPrefix())
-                        || !loggerName.startsWith(AuthContextUtils.getDomain() + "." + LoggerType.AUDIT.getPrefix())) {
+                        || !loggerName.startsWith(AuthContextUtils.getDomain() + '.' + LoggerType.AUDIT.getPrefix())) {
 
                     Logger syncopeLogger = entityFactory.newEntity(Logger.class);
                     syncopeLogger.setKey(loggerName);
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerLoader.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerLoader.java
index 9884e14..f3eddbc 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerLoader.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerLoader.java
@@ -64,7 +64,7 @@ public class LoggerLoader implements SyncopeCoreLoader {
         return 300;
     }
 
-    private ColumnConfig[] buildColumnConfigs(final LoggerContext ctx) {
+    private static ColumnConfig[] buildColumnConfigs(final LoggerContext ctx) {
         ColumnConfig[] columnConfigs = {
             ColumnConfig.newBuilder().
             setConfiguration(ctx.getConfiguration()).setName("EVENT_DATE").setEventTimestamp(true).build(),
@@ -154,10 +154,10 @@ public class LoggerLoader implements SyncopeCoreLoader {
         }).collect(Collectors.toList());
     }
 
-    public void addAppenderToContext(
-            final LoggerContext ctx,
-            final AuditAppender auditAppender,
-            final LoggerConfig eventLogConf) {
+    public static void addAppenderToContext(
+        final LoggerContext ctx,
+        final AuditAppender auditAppender,
+        final LoggerConfig eventLogConf) {
 
         Appender targetAppender = ctx.getConfiguration().getAppender(auditAppender.getTargetAppenderName());
         if (targetAppender == null) {
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
index a98eefc..fe2fdcc 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.rest.cxf;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -154,7 +153,7 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
         return Optional.ofNullable(builder).map(ResponseBuilder::build).orElse(null);
     }
 
-    private ResponseBuilder getSyncopeClientExceptionResponse(final SyncopeClientException ex) {
+    private static ResponseBuilder getSyncopeClientExceptionResponse(final SyncopeClientException ex) {
         ResponseBuilder builder = Response.status(ex.getType().getResponseStatus());
         builder.header(RESTHeaders.ERROR_CODE, ex.getType().name());
 
@@ -170,15 +169,15 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
         return builder.entity(error);
     }
 
-    private ResponseBuilder getSyncopeClientCompositeExceptionResponse(final SyncopeClientCompositeException ex) {
+    private static ResponseBuilder getSyncopeClientCompositeExceptionResponse(
+        final SyncopeClientCompositeException ex) {
         if (ex.getExceptions().size() == 1) {
             return getSyncopeClientExceptionResponse(ex.getExceptions().iterator().next());
         }
 
         ResponseBuilder builder = Response.status(Response.Status.BAD_REQUEST);
 
-        List<ErrorTO> errors = new ArrayList<>();
-        ex.getExceptions().stream().map(sce -> {
+        List<ErrorTO> errors = ex.getExceptions().stream().map(sce -> {
             builder.header(RESTHeaders.ERROR_CODE, sce.getType().name());
 
             ErrorTO error = new ErrorTO();
@@ -196,7 +195,7 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
         return builder.entity(errors);
     }
 
-    private ResponseBuilder processInvalidEntityExceptions(final Exception ex) {
+    private static ResponseBuilder processInvalidEntityExceptions(final Exception ex) {
         InvalidEntityException iee = null;
 
         if (ex instanceof InvalidEntityException) {
@@ -244,7 +243,7 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
         return null;
     }
 
-    private ResponseBuilder processBadRequestExceptions(final Exception ex) {
+    private static ResponseBuilder processBadRequestExceptions(final Exception ex) {
         // This exception might be raised by Flowable (if enabled)
         Class<?> ibatisPersistenceException = null;
         try {
@@ -272,7 +271,7 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
         return null;
     }
 
-    private ResponseBuilder builder(final ClientExceptionType hType, final String msg) {
+    private static ResponseBuilder builder(final ClientExceptionType hType, final String msg) {
         ResponseBuilder builder = Response.status(hType.getResponseStatus()).
                 header(RESTHeaders.ERROR_CODE, hType.name()).
                 header(RESTHeaders.ERROR_INFO, hType.getInfoHeaderValue(msg));
@@ -292,7 +291,7 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
      * @param response model to construct {@link ResponseBuilder} from
      * @return new {@link ResponseBuilder} instance initialized from given response
      */
-    private ResponseBuilder builder(final Response response) {
+    private static ResponseBuilder builder(final Response response) {
         ResponseBuilder builder = JAXRSUtils.toResponseBuilder(response.getStatus());
         builder.entity(response.getEntity());
         response.getMetadata().forEach((key, value) -> {
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/UnwrappedObjectMapper.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/UnwrappedObjectMapper.java
index 31b1dfd..9ab783d 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/UnwrappedObjectMapper.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/UnwrappedObjectMapper.java
@@ -50,7 +50,7 @@ public class UnwrappedObjectMapper extends ObjectMapper {
      * @param value the potential Map to unwrap
      * @return the unwrapped map or the original value
      */
-    private Object unwrapMap(final Object value) {
+    private static Object unwrapMap(final Object value) {
         if (value instanceof Map) {
             Map<?, ?> map = (Map<?, ?>) value;
             if (map.size() == 1) {
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
index e827e6a..8ef9a26 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
@@ -48,7 +48,7 @@ public class WADLServlet extends HttpServlet {
 
     private static final Pattern SCHEMA_PATTERN = Pattern.compile("/schema_(.*)_(.*)\\.html");
 
-    protected void finish(final Pipeline<SAXPipelineComponent> pipeline, final HttpServletResponse response)
+    protected static void finish(final Pipeline<SAXPipelineComponent> pipeline, final HttpServletResponse response)
             throws ServletException, IOException {
 
         pipeline.addComponent(XMLSerializer.createHTML4Serializer());
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java
index df24478..e60994b 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java
@@ -74,11 +74,11 @@ public class ReportServiceImpl extends AbstractExecutableService implements Repo
     public Response exportExecutionResult(final String executionKey, final ReportExecExportFormat fmt) {
         ReportExecExportFormat format = Optional.ofNullable(fmt).orElse(ReportExecExportFormat.XML);
         ReportExec reportExec = logic.getReportExec(executionKey);
-        StreamingOutput sout = (os) -> logic.exportExecutionResult(os, reportExec, format);
+        StreamingOutput sout = (os) -> ReportLogic.exportExecutionResult(os, reportExec, format);
 
         return Response.ok(sout).
                 header(HttpHeaders.CONTENT_DISPOSITION,
-                        "attachment; filename=" + reportExec.getReport().getName() + "." + format.name().toLowerCase()).
+                        "attachment; filename=" + reportExec.getReport().getName() + '.' + format.name().toLowerCase()).
                 build();
     }
 
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SyncopeServiceImpl.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SyncopeServiceImpl.java
index 212fa7c..a86f7e2 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SyncopeServiceImpl.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SyncopeServiceImpl.java
@@ -88,7 +88,7 @@ public class SyncopeServiceImpl extends AbstractServiceImpl implements SyncopeSe
 
     @Override
     public SystemInfo system() {
-        return logic.system();
+        return SyncopeLogic.system();
     }
 
     @Override
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
index 98abd47..7a1a9d4 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
@@ -66,7 +66,7 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean
         this.realm = realm;
     }
 
-    private AttributeCond createAttributeCond(final String schema) {
+    private static AttributeCond createAttributeCond(final String schema) {
         AttributeCond attributeCond = SearchableFields.contains(schema)
                 ? new AnyCond()
                 : new AttributeCond();
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAJSONAnyDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAJSONAnyDAO.java
index 9c8263a..39f50dd 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAJSONAnyDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAJSONAnyDAO.java
@@ -165,7 +165,7 @@ abstract class AbstractJPAJSONAnyDAO extends AbstractDAO<AbstractEntity> impleme
      * @param literals literals/tokens
      * @return split value
      */
-    private List<String> split(final String attrValue, final List<String> literals) {
+    private static List<String> split(final String attrValue, final List<String> literals) {
         final List<String> attrValues = new ArrayList<>();
 
         if (literals.isEmpty()) {
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnyDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnyDAO.java
index 883f6a9..ec3ee70 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnyDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnyDAO.java
@@ -45,7 +45,7 @@ public class MyJPAJSONAnyDAO extends AbstractJPAJSONAnyDAO {
                 : StringUtils.containsIgnoreCase(table, AnyTypeKind.GROUP.name())
                 ? "group_search"
                 : "anyObject_search";
-        return "SELECT DISTINCT id FROM " + view + " ";
+        return "SELECT DISTINCT id FROM " + view + ' ';
     }
 
     @Override
@@ -61,12 +61,12 @@ public class MyJPAJSONAnyDAO extends AbstractJPAJSONAnyDAO {
                     + "AND "
                     + (schemaInfo.getRight() ? "LOWER(" : "")
                     + (schema.isUniqueConstraint()
-                    ? "attrUniqueValue ->> '$." + schemaInfo.getLeft() + "'"
+                    ? "attrUniqueValue ->> '$." + schemaInfo.getLeft() + '\''
                     : schemaInfo.getLeft())
                     + (schemaInfo.getRight() ? ")" : "")
                     + " = "
                     + (schemaInfo.getRight() ? "LOWER(" : "")
-                    + "?"
+                    + '?'
                     + (schemaInfo.getRight() ? ")" : "");
         } else {
             PlainAttr<?> container = anyUtils.newPlainAttr();
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java
index 51fc984..bb48eda 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java
@@ -63,7 +63,7 @@ public class MyJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
                         attrWhere.append("JSON_CONTAINS(plainAttrs, '[{\"schema\":\"").append(field).append("\"}]')");
 
                         nullAttrWhere.append(" UNION SELECT DISTINCT any_id,").append(svs.table().alias).append(".*, ").
-                                append("\"").append(field).append("\"").append(" AS plainShema, ").
+                                append('"').append(field).append('"').append(" AS plainShema, ").
                                 append("null AS binaryValue, ").
                                 append("null AS booleanValue, ").
                                 append("null AS dateValue, ").
@@ -71,7 +71,7 @@ public class MyJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
                                 append("null AS longValue, ").
                                 append("null AS stringValue, ").
                                 append("null AS attrUniqueValue").
-                                append(" FROM ").append(svs.table().name).append(" ").append(svs.table().alias).
+                                append(" FROM ").append(svs.table().name).append(' ').append(svs.table().alias).
                                 append(", ").append(svs.field().name).
                                 append(" WHERE any_id=").append(svs.table().alias).append(".id").
                                 append(" AND any_id NOT IN ").
@@ -105,11 +105,11 @@ public class MyJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
 
         obs.views.add(svs.field());
 
-        item.select = svs.field().alias + "."
+        item.select = svs.field().alias + '.'
                 + (schema.isUniqueConstraint() ? "attrUniqueValue" : key(schema.getType()))
                 + " AS " + fieldName;
-        item.where = "plainSchema = '" + fieldName + "'";
-        item.orderBy = fieldName + " " + clause.getDirection().name();
+        item.where = "plainSchema = '" + fieldName + '\'';
+        item.orderBy = fieldName + ' ' + clause.getDirection().name();
     }
 
     private void fillAttrQuery(
@@ -130,7 +130,7 @@ public class MyJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
             query.append("id NOT IN (SELECT DISTINCT any_id FROM ");
             query.append(svs.field().name).append(" WHERE ");
             fillAttrQuery(anyUtils, query, attrValue, schema, cond, false, parameters, svs);
-            query.append(")");
+            query.append(')');
         } else {
             if (!not && cond.getType() == AttributeCond.Type.EQ) {
                 PlainAttr<?> container = anyUtils.newPlainAttr();
@@ -153,14 +153,14 @@ public class MyJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
                         append(" AND ").
                         append(lower ? "LOWER(" : "").
                         append(schema.isUniqueConstraint()
-                                ? "attrUniqueValue ->> '$." + key + "'"
+                                ? "attrUniqueValue ->> '$." + key + '\''
                                 : key).
                         append(lower ? ")" : "");
 
                 appendOp(query, cond.getType(), not);
 
                 query.append(lower ? "LOWER(" : "").
-                        append("?").append(setParameter(parameters, cond.getExpression())).
+                        append('?').append(setParameter(parameters, cond.getExpression())).
                         append(lower ? ")" : "");
             }
         }
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
index 93d9b2d..dbc7bce 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
@@ -55,10 +55,10 @@ public class PGJPAJSONAnyDAO extends AbstractJPAJSONAnyDAO {
                     + (schemaInfo.getRight() ? "LOWER(" : "")
                     + (schema.isUniqueConstraint() ? "attrs -> 'uniqueValue'" : "attrValues")
                     + " ->> '" + schemaInfo.getLeft()
-                    + "'" + (schemaInfo.getRight() ? ")" : "")
+                    + '\'' + (schemaInfo.getRight() ? ")" : "")
                     + " = "
                     + (schemaInfo.getRight() ? "LOWER(" : "")
-                    + "?"
+                    + '?'
                     + (schemaInfo.getRight() ? ")" : "");
         } else {
             PlainAttr<?> container = anyUtils.newPlainAttr();
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
index 487a1d1..3eef640 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
@@ -67,7 +67,7 @@ public class PGJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
                                 append("'{\"schema\": \"").
                                 append(field).
                                 append("\"}'::jsonb as attrs, '{}'::jsonb as attrValues").
-                                append(" FROM ").append(svs.table().name).append(" ").append(svs.table().alias).
+                                append(" FROM ").append(svs.table().name).append(' ').append(svs.table().alias).
                                 append(", ").append(svs.field().name).
                                 append(" WHERE ").
                                 append("any_id NOT IN ").
@@ -102,8 +102,8 @@ public class PGJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
         obs.views.add(svs.field());
 
         item.select = svs.field().alias + ".attrValues ->> '" + key(schema.getType()) + "' AS " + fieldName;
-        item.where = "attrs ->> 'schema' = '" + fieldName + "'";
-        item.orderBy = fieldName + " " + clause.getDirection().name();
+        item.where = "attrs ->> 'schema' = '" + fieldName + '\'';
+        item.orderBy = fieldName + ' ' + clause.getDirection().name();
     }
 
     private void fillAttrQuery(
@@ -124,7 +124,7 @@ public class PGJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
             query.append("id NOT IN (SELECT DISTINCT any_id FROM ");
             query.append(svs.field().name).append(" WHERE ");
             fillAttrQuery(anyUtils, query, attrValue, schema, cond, false, parameters, svs);
-            query.append(")");
+            query.append(')');
         } else {
             if (!not && cond.getType() == AttributeCond.Type.EQ) {
                 PlainAttr<?> container = anyUtils.newPlainAttr();
@@ -148,7 +148,7 @@ public class PGJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
                         append(lower ? "LOWER(" : "").
                         append(schema.isUniqueConstraint()
                                 ? "attrs -> 'uniqueValue'" : "attrValues").
-                        append(" ->> '").append(key).append("'").
+                        append(" ->> '").append(key).append('\'').
                         append(lower ? ")" : "");
 
                 appendOp(query, cond.getType(), not);
@@ -162,7 +162,7 @@ public class PGJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
                     }
                 }
                 query.append(lower ? "LOWER(" : "").
-                        append("?").append(setParameter(parameters, value)).
+                        append('?').append(setParameter(parameters, value)).
                         append(lower ? ")" : "");
             }
         }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
index 940d87b..2d152de 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
@@ -59,24 +59,24 @@ public class DomainConfFactory implements DomainRegistry, EnvironmentAware {
         this.env = env;
     }
 
-    private void unregisterSingleton(final String name) {
+    private static void unregisterSingleton(final String name) {
         if (ApplicationContextProvider.getBeanFactory().containsSingleton(name)) {
             ApplicationContextProvider.getBeanFactory().destroySingleton(name);
         }
     }
 
-    private void registerSingleton(final String name, final Object bean) {
+    private static void registerSingleton(final String name, final Object bean) {
         unregisterSingleton(name);
         ApplicationContextProvider.getBeanFactory().registerSingleton(name, bean);
     }
 
-    private void unregisterBeanDefinition(final String name) {
+    private static void unregisterBeanDefinition(final String name) {
         if (ApplicationContextProvider.getBeanFactory().containsBeanDefinition(name)) {
             ApplicationContextProvider.getBeanFactory().removeBeanDefinition(name);
         }
     }
 
-    private void registerBeanDefinition(final String name, final BeanDefinition beanDefinition) {
+    private static void registerBeanDefinition(final String name, final BeanDefinition beanDefinition) {
         unregisterBeanDefinition(name);
         ApplicationContextProvider.getBeanFactory().registerBeanDefinition(name, beanDefinition);
     }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/attrvalue/validation/BasicValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/attrvalue/validation/BasicValidator.java
index fc64f03..2e62e16 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/attrvalue/validation/BasicValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/attrvalue/validation/BasicValidator.java
@@ -42,7 +42,7 @@ public class BasicValidator extends AbstractValidator {
 
             if (!found) {
                 throw new InvalidPlainAttrValueException(
-                        "'" + value + "' is not one of: " + schema.getEnumerationValues());
+                    '\'' + value + "' is not one of: " + schema.getEnumerationValues());
             }
         }
     }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/attrvalue/validation/BinaryValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/attrvalue/validation/BinaryValidator.java
index b32f91c..97c2649 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/attrvalue/validation/BinaryValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/attrvalue/validation/BinaryValidator.java
@@ -60,12 +60,12 @@ public class BinaryValidator extends AbstractValidator {
             if (!valid) {
                 throw new InvalidPlainAttrValueException(
                         "Found MIME type: '" + mimeType + "', expecting: '"
-                        + attrValue.getAttr().getSchema().getMimeType() + "'");
+                        + attrValue.getAttr().getSchema().getMimeType() + '\'');
             }
         }
     }
 
-    private boolean isValidJSON(final String value) {
+    private static boolean isValidJSON(final String value) {
         try {
             MAPPER.readTree(value);
             return true;
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
index 905c7ea..4a279f5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
@@ -111,12 +111,13 @@ public class XMLContentExporter implements ContentExporter {
     @Autowired
     private RealmDAO realmDAO;
 
-    private boolean isTableAllowed(final String tableName) {
+    private static boolean isTableAllowed(final String tableName) {
         return TABLE_PREFIXES_TO_BE_EXCLUDED.stream().
                 allMatch(prefix -> !tableName.toUpperCase().startsWith(prefix.toUpperCase()));
     }
 
-    private List<String> sortByForeignKeys(final String dbSchema, final Connection conn, final Set<String> tableNames)
+    private static List<String> sortByForeignKeys(final String dbSchema, final Connection conn,
+                                                  final Set<String> tableNames)
             throws SQLException {
 
         Set<MultiParentNode<String>> roots = new HashSet<>();
@@ -186,7 +187,7 @@ public class XMLContentExporter implements ContentExporter {
         return sortedTableNames;
     }
 
-    private String getValues(final ResultSet rs, final String columnName, final Integer columnType)
+    private static String getValues(final ResultSet rs, final String columnName, final Integer columnType)
             throws SQLException {
 
         String res = null;
@@ -260,7 +261,7 @@ public class XMLContentExporter implements ContentExporter {
                     String columnName = pkeyRS.getString("COLUMN_NAME");
                     if (columnName != null) {
                         if (orderBy.length() > 0) {
-                            orderBy.append(",");
+                            orderBy.append(',');
                         }
 
                         orderBy.append(columnName);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentLoader.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentLoader.java
index 106dcb6..d202922 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentLoader.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentLoader.java
@@ -101,8 +101,8 @@ public class XMLContentLoader implements ContentLoader {
         }
     }
 
-    private void loadDefaultContent(
-            final String domain, final InputStream contentXML, final DataSource dataSource)
+    private static void loadDefaultContent(
+        final String domain, final InputStream contentXML, final DataSource dataSource)
             throws IOException, ParserConfigurationException, SAXException {
 
         SAXParserFactory factory = SAXParserFactory.newInstance();
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index fd537a6..f05cbff 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -160,7 +160,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         A any = find(key);
         if (any == null) {
             throw new NotFoundException(StringUtils.substringBefore(
-                    StringUtils.substringAfter(getClass().getSimpleName(), "JPA"), "DAO") + " " + key);
+                    StringUtils.substringAfter(getClass().getSimpleName(), "JPA"), "DAO") + ' ' + key);
         }
 
         securityChecks(any);
@@ -181,7 +181,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
                 + " AND "
                 + (ignoreCaseMatch ? "LOWER(" : "") + "e.stringValue" + (ignoreCaseMatch ? ")" : "")
                 + " = "
-                + (ignoreCaseMatch ? "LOWER(" : "") + ":stringValue" + (ignoreCaseMatch ? ")" : "") + ")"
+                + (ignoreCaseMatch ? "LOWER(" : "") + ":stringValue" + (ignoreCaseMatch ? ")" : "") + ')'
                 + " OR (e.booleanValue IS NOT NULL AND e.booleanValue = :booleanValue)"
                 + " OR (e.dateValue IS NOT NULL AND e.dateValue = :dateValue)"
                 + " OR (e.longValue IS NOT NULL AND e.longValue = :longValue)"
@@ -255,7 +255,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
      * @param literals literals/tokens
      * @return split value
      */
-    private List<String> split(final String attrValue, final List<String> literals) {
+    private static List<String> split(final String attrValue, final List<String> literals) {
         final List<String> attrValues = new ArrayList<>();
 
         if (literals.isEmpty()) {
@@ -338,10 +338,10 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
                     // clear builder
                     bld.delete(0, bld.length());
 
-                    bld.append("(");
+                    bld.append('(');
 
                     // set schema key
-                    bld.append("s.id = '").append(identifiers.get(i)).append("'");
+                    bld.append("s.id = '").append(identifiers.get(i)).append('\'');
 
                     bld.append(" AND ");
 
@@ -354,7 +354,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
                     // use a value clause different for eanch different schema type
                     switch (schema.getType()) {
                         case Boolean:
-                            bld.append("v.booleanValue = '").append(attrValues.get(i)).append("'");
+                            bld.append("v.booleanValue = '").append(attrValues.get(i)).append('\'');
                             break;
                         case Long:
                             bld.append("v.longValue = ").append(attrValues.get(i));
@@ -363,15 +363,15 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
                             bld.append("v.doubleValue = ").append(attrValues.get(i));
                             break;
                         case Date:
-                            bld.append("v.dateValue = '").append(attrValues.get(i)).append("'");
+                            bld.append("v.dateValue = '").append(attrValues.get(i)).append('\'');
                             break;
                         default:
                             if (ignoreCaseMatch) {
                                 bld.append("LOWER(v.stringValue) = '").
-                                        append(attrValues.get(i).toLowerCase()).append("'");
+                                        append(attrValues.get(i).toLowerCase()).append('\'');
                             } else {
                                 bld.append("v.stringValue = '").
-                                        append(attrValues.get(i)).append("'");
+                                        append(attrValues.get(i)).append('\'');
                             }
                     }
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
index 8ad9157..04edad7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
@@ -95,7 +95,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
     @Autowired
     protected AnyUtilsFactory anyUtilsFactory;
 
-    protected SearchCond buildEffectiveCond(final SearchCond cond, final Set<String> dynRealmKeys) {
+    protected static SearchCond buildEffectiveCond(final SearchCond cond, final Set<String> dynRealmKeys) {
         List<SearchCond> effectiveConds = dynRealmKeys.stream().map(dynRealmKey -> {
             DynRealmCond dynRealmCond = new DynRealmCond();
             dynRealmCond.setDynRealm(dynRealmKey);
@@ -165,7 +165,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
                 ((JPAPlainSchema) schema).validator().validate(cond.getExpression(), attrValue);
             }
         } catch (ValidationException e) {
-            LOG.error("Could not validate expression '" + cond.getExpression() + "'", e);
+            LOG.error("Could not validate expression '" + cond.getExpression() + '\'', e);
             throw new IllegalArgumentException();
         }
 
@@ -228,7 +228,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
             try {
                 ((JPAPlainSchema) schema).validator().validate(computed.getExpression(), attrValue);
             } catch (ValidationException e) {
-                LOG.error("Could not validate expression '" + computed.getExpression() + "'", e);
+                LOG.error("Could not validate expression '" + computed.getExpression() + '\'', e);
                 throw new IllegalArgumentException();
             }
         }
@@ -245,7 +245,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
             groupKey = Optional.ofNullable(group).map(Entity::getKey).orElse(null);
         }
         if (groupKey == null) {
-            LOG.error("Could not find group for '" + cond.getGroup() + "'");
+            LOG.error("Could not find group for '" + cond.getGroup() + '\'');
             throw new IllegalArgumentException();
         }
 
@@ -261,7 +261,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
             rightAnyObjectKey = Optional.ofNullable(anyObject).map(Entity::getKey).orElse(null);
         }
         if (rightAnyObjectKey == null) {
-            LOG.error("Could not find any object for '" + cond.getAnyObject() + "'");
+            LOG.error("Could not find any object for '" + cond.getAnyObject() + '\'');
             throw new IllegalArgumentException();
         }
 
@@ -271,7 +271,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
     protected Realm check(final AssignableCond cond) {
         Realm realm = realmDAO.findByFullPath(cond.getRealmFullPath());
         if (realm == null) {
-            LOG.error("Could not find realm for '" + cond.getRealmFullPath() + "'");
+            LOG.error("Could not find realm for '" + cond.getRealmFullPath() + '\'');
             throw new IllegalArgumentException();
         }
 
@@ -290,7 +290,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
             memberKey = Optional.ofNullable(member).map(Entity::getKey).orElse(null);
         }
         if (memberKey == null) {
-            LOG.error("Could not find user or any object for '" + cond.getMember() + "'");
+            LOG.error("Could not find user or any object for '" + cond.getMember() + '\'');
             throw new IllegalArgumentException();
         }
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAccessTokenDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAccessTokenDAO.java
index 59c69d8..e7fb7d8 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAccessTokenDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAccessTokenDAO.java
@@ -59,7 +59,7 @@ public class JPAAccessTokenDAO extends AbstractDAO<AccessToken> implements Acces
         return result;
     }
 
-    private StringBuilder buildFindAllQuery() {
+    private static StringBuilder buildFindAllQuery() {
         return new StringBuilder("SELECT e FROM ").
                 append(JPAAccessToken.class.getSimpleName()).
                 append(" e WHERE 1=1");
@@ -75,7 +75,7 @@ public class JPAAccessTokenDAO extends AbstractDAO<AccessToken> implements Acces
         return ((Number) query.getSingleResult()).intValue();
     }
 
-    private String toOrderByStatement(final List<OrderByClause> orderByClauses) {
+    private static String toOrderByStatement(final List<OrderByClause> orderByClauses) {
         StringBuilder statement = new StringBuilder();
 
         for (OrderByClause clause : orderByClauses) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyMatchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyMatchDAO.java
index ab27218..1f37e4c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyMatchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyMatchDAO.java
@@ -141,13 +141,13 @@ public class JPAAnyMatchDAO extends AbstractDAO<Any<?>> implements AnyMatchDAO {
         return false;
     }
 
-    private boolean matches(final Any<?> any, final AnyTypeCond cond, final boolean not) {
+    private static boolean matches(final Any<?> any, final AnyTypeCond cond, final boolean not) {
         boolean equals = any.getType().getKey().equals(cond.getAnyTypeKey());
         return not ? !equals : equals;
     }
 
-    private boolean matches(
-            final GroupableRelatable<?, ?, ?, ?, ?> any, final RelationshipTypeCond cond, final boolean not) {
+    private static boolean matches(
+        final GroupableRelatable<?, ?, ?, ?, ?> any, final RelationshipTypeCond cond, final boolean not) {
 
         boolean found = any.getRelationships().stream().
                 anyMatch(rel -> rel.getType().getKey().equals(cond.getRelationshipTypeKey()));
@@ -227,11 +227,11 @@ public class JPAAnyMatchDAO extends AbstractDAO<Any<?>> implements AnyMatchDAO {
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    private boolean matches(
-            final List<? extends PlainAttrValue> anyAttrValues,
-            final PlainAttrValue attrValue,
-            final PlainSchema schema,
-            final AttributeCond cond) {
+    private static boolean matches(
+        final List<? extends PlainAttrValue> anyAttrValues,
+        final PlainAttrValue attrValue,
+        final PlainSchema schema,
+        final AttributeCond cond) {
 
         return anyAttrValues.stream().anyMatch(item -> {
             switch (cond.getType()) {
@@ -320,7 +320,7 @@ public class JPAAnyMatchDAO extends AbstractDAO<Any<?>> implements AnyMatchDAO {
                         ((JPAPlainSchema) schema).validator().validate(cond.getExpression(), attrValue);
                     }
                 } catch (ValidationException e) {
-                    LOG.error("Could not validate expression '" + cond.getExpression() + "'", e);
+                    LOG.error("Could not validate expression '" + cond.getExpression() + '\'', e);
                     return false;
                 }
 
@@ -411,7 +411,7 @@ public class JPAAnyMatchDAO extends AbstractDAO<Any<?>> implements AnyMatchDAO {
                     try {
                         ((JPAPlainSchema) schema).validator().validate(cond.getExpression(), attrValue);
                     } catch (ValidationException e) {
-                        LOG.error("Could not validate expression '" + cond.getExpression() + "'", e);
+                        LOG.error("Could not validate expression '" + cond.getExpression() + '\'', e);
                         return false;
                     }
                 }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index 90ef680..6df44fb 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -212,12 +212,12 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         return List.of();
     }
 
-    protected int setParameter(final List<Object> parameters, final Object parameter) {
+    protected static int setParameter(final List<Object> parameters, final Object parameter) {
         parameters.add(parameter);
         return parameters.size();
     }
 
-    private void fillWithParameters(final Query query, final List<Object> parameters) {
+    private static void fillWithParameters(final Query query, final List<Object> parameters) {
         for (int i = 0; i < parameters.size(); i++) {
             if (parameters.get(i) instanceof Date) {
                 query.setParameter(i + 1, (Date) parameters.get(i), TemporalType.TIMESTAMP);
@@ -231,7 +231,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         }
     }
 
-    private StringBuilder buildSelect(final OrderBySupport obs) {
+    private static StringBuilder buildSelect(final OrderBySupport obs) {
         StringBuilder select = new StringBuilder("SELECT DISTINCT u.any_id");
 
         obs.items.forEach(item -> select.append(',').append(item.select));
@@ -264,10 +264,10 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
                         } else {
                             attrWhere.append(" OR ");
                         }
-                        attrWhere.append("schema_id='").append(field).append("'");
+                        attrWhere.append("schema_id='").append(field).append('\'');
 
                         nullAttrWhere.append(" UNION SELECT any_id, ").
-                                append("'").
+                                append('\'').
                                 append(field).
                                 append("' AS schema_id, ").
                                 append("null AS booleanvalue, ").
@@ -309,7 +309,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         return where;
     }
 
-    private StringBuilder buildOrderBy(final OrderBySupport obs) {
+    private static StringBuilder buildOrderBy(final OrderBySupport obs) {
         StringBuilder orderBy = new StringBuilder();
 
         obs.items.forEach(item -> orderBy.append(item.orderBy).append(','));
@@ -321,7 +321,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         return orderBy;
     }
 
-    protected String key(final AttrSchemaType schemaType) {
+    protected static String key(final AttrSchemaType schemaType) {
         String key;
         switch (schemaType) {
             case Boolean:
@@ -371,8 +371,8 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
                     append(" AS ").append(fieldName).toString();
             item.where = new StringBuilder().
                     append(svs.asSearchViewSupport().uniqueAttr().alias).
-                    append(".schema_id='").append(fieldName).append("'").toString();
-            item.orderBy = fieldName + " " + clause.getDirection().name();
+                    append(".schema_id='").append(fieldName).append('\'').toString();
+            item.orderBy = fieldName + ' ' + clause.getDirection().name();
         } else {
             obs.views.add(svs.asSearchViewSupport().attr());
 
@@ -381,8 +381,8 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
                     append(" AS ").append(fieldName).toString();
             item.where = new StringBuilder().
                     append(svs.asSearchViewSupport().attr().alias).
-                    append(".schema_id='").append(fieldName).append("'").toString();
-            item.orderBy = fieldName + " " + clause.getDirection().name();
+                    append(".schema_id='").append(fieldName).append('\'').toString();
+            item.orderBy = fieldName + ' ' + clause.getDirection().name();
         }
     }
 
@@ -429,9 +429,9 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
 
                 obs.views.add(svs.field());
 
-                item.select = svs.field().alias + "." + fieldName;
+                item.select = svs.field().alias + '.' + fieldName;
                 item.where = StringUtils.EMPTY;
-                item.orderBy = svs.field().alias + "." + fieldName + " " + clause.getDirection().name();
+                item.orderBy = svs.field().alias + '.' + fieldName + ' ' + clause.getDirection().name();
             }
 
             if (item.isEmpty()) {
@@ -531,11 +531,11 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         return Pair.of(query, involvedPlainAttrs);
     }
 
-    protected String getQuery(
-            final AnyTypeCond cond,
-            final boolean not,
-            final List<Object> parameters,
-            final SearchSupport svs) {
+    protected static String getQuery(
+        final AnyTypeCond cond,
+        final boolean not,
+        final List<Object> parameters,
+        final SearchSupport svs) {
 
         StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE type_id");
@@ -551,11 +551,11 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         return query.toString();
     }
 
-    protected String getQuery(
-            final RelationshipTypeCond cond,
-            final boolean not,
-            final List<Object> parameters,
-            final SearchSupport svs) {
+    protected static String getQuery(
+        final RelationshipTypeCond cond,
+        final boolean not,
+        final List<Object> parameters,
+        final SearchSupport svs) {
 
         StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE ");
@@ -648,11 +648,11 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         return query.toString();
     }
 
-    protected String getQuery(
-            final RoleCond cond,
-            final boolean not,
-            final List<Object> parameters,
-            final SearchSupport svs) {
+    protected static String getQuery(
+        final RoleCond cond,
+        final boolean not,
+        final List<Object> parameters,
+        final SearchSupport svs) {
 
         StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE (");
@@ -675,18 +675,18 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         }
 
         query.append("SELECT DISTINCT any_id FROM ").
-                append(svs.dynrolemembership().name).append(" WHERE ").
+                append(SearchSupport.dynrolemembership().name).append(" WHERE ").
                 append("role_id=?").append(setParameter(parameters, cond.getRole())).
                 append("))");
 
         return query.toString();
     }
 
-    protected String getQuery(
-            final PrivilegeCond cond,
-            final boolean not,
-            final List<Object> parameters,
-            final SearchSupport svs) {
+    protected static String getQuery(
+        final PrivilegeCond cond,
+        final boolean not,
+        final List<Object> parameters,
+        final SearchSupport svs) {
 
         StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE (");
@@ -716,11 +716,11 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         return query.toString();
     }
 
-    protected String getQuery(
-            final DynRealmCond cond,
-            final boolean not,
-            final List<Object> parameters,
-            final SearchSupport svs) {
+    protected static String getQuery(
+        final DynRealmCond cond,
+        final boolean not,
+        final List<Object> parameters,
+        final SearchSupport svs) {
 
         StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE (");
@@ -732,18 +732,18 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         }
 
         query.append("SELECT DISTINCT any_id FROM ").
-                append(svs.dynrealmmembership().name).append(" WHERE ").
+                append(SearchSupport.dynrealmmembership().name).append(" WHERE ").
                 append("dynRealm_id=?").append(setParameter(parameters, cond.getDynRealm())).
                 append("))");
 
         return query.toString();
     }
 
-    protected String getQuery(
-            final ResourceCond cond,
-            final boolean not,
-            final List<Object> parameters,
-            final SearchSupport svs) {
+    protected static String getQuery(
+        final ResourceCond cond,
+        final boolean not,
+        final List<Object> parameters,
+        final SearchSupport svs) {
 
         StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE ");
@@ -841,14 +841,14 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         return query.toString();
     }
 
-    private void fillAttrQuery(
-            final StringBuilder query,
-            final PlainAttrValue attrValue,
-            final PlainSchema schema,
-            final AttributeCond cond,
-            final boolean not,
-            final List<Object> parameters,
-            final SearchSupport svs) {
+    private static void fillAttrQuery(
+        final StringBuilder query,
+        final PlainAttrValue attrValue,
+        final PlainSchema schema,
+        final AttributeCond cond,
+        final boolean not,
+        final List<Object> parameters,
+        final SearchSupport svs) {
 
         // This first branch is required for handling with not conditions given on multivalue fields (SYNCOPE-1419)
         if (not && schema.isMultivalue()
@@ -863,14 +863,14 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
             }
             query.append(" WHERE schema_id='").append(schema.getKey());
             fillAttrQuery(query, attrValue, schema, cond, false, parameters, svs);
-            query.append(")");
+            query.append(')');
         } else {
             // activate ignoreCase only for EQ and LIKE operators
             boolean ignoreCase = AttributeCond.Type.ILIKE == cond.getType() || AttributeCond.Type.IEQ == cond.getType();
 
             String column = (cond instanceof AnyCond) ? cond.getSchema() : key(schema.getType());
             if ((schema.getType() == AttrSchemaType.String || schema.getType() == AttrSchemaType.Enum) && ignoreCase) {
-                column = "LOWER (" + column + ")";
+                column = "LOWER (" + column + ')';
             }
             if (!(cond instanceof AnyCond)) {
                 column = "' AND " + column;
@@ -992,19 +992,19 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
                 query.append(checked.getLeft().isUniqueConstraint()
                         ? svs.asSearchViewSupport().uniqueAttr().name
                         : svs.asSearchViewSupport().attr().name).
-                        append(" WHERE schema_id=").append("'").append(checked.getLeft().getKey()).append("'");
+                        append(" WHERE schema_id=").append('\'').append(checked.getLeft().getKey()).append('\'');
                 break;
 
             case ISNULL:
                 query.append(svs.field().name).
                         append(" WHERE any_id NOT IN ").
-                        append("(").
+                        append('(').
                         append("SELECT DISTINCT any_id FROM ").
                         append(checked.getLeft().isUniqueConstraint()
                                 ? svs.asSearchViewSupport().uniqueAttr().name
                                 : svs.asSearchViewSupport().attr().name).
-                        append(" WHERE schema_id=").append("'").append(checked.getLeft().getKey()).append("'").
-                        append(")");
+                        append(" WHERE schema_id=").append('\'').append(checked.getLeft().getKey()).append('\'').
+                        append(')');
                 break;
 
             default:
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 7e45b0d..d671973 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
@@ -151,7 +151,7 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
         return query.getResultList();
     }
 
-    private StringBuilder getByPolicyQuery(final Class<? extends Policy> policyClass) {
+    private static StringBuilder getByPolicyQuery(final Class<? extends Policy> policyClass) {
         StringBuilder query = new StringBuilder("SELECT e FROM ").
                 append(JPAExternalResource.class.getSimpleName()).
                 append(" e WHERE e.");
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index 1fb835a..7829c85 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -232,7 +232,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
         return findAllKeys(JPAGroup.TABLE, page, itemsPerPage);
     }
 
-    private SearchCond buildDynMembershipCond(final String baseCondFIQL, final Realm groupRealm) {
+    private static SearchCond buildDynMembershipCond(final String baseCondFIQL, final Realm groupRealm) {
         AssignableCond cond = new AssignableCond();
         cond.setRealmFullPath(groupRealm.getFullPath());
         cond.setFromGroup(true);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
index c1cb136..57f60b3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
@@ -52,7 +52,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
     @Lazy
     private ExternalResourceDAO resourceDAO;
 
-    private <T extends Policy> Class<? extends AbstractPolicy> getEntityReference(final Class<T> reference) {
+    private static <T extends Policy> Class<? extends AbstractPolicy> getEntityReference(final Class<T> reference) {
         return AccountPolicy.class.isAssignableFrom(reference)
                 ? JPAAccountPolicy.class
                 : PasswordPolicy.class.isAssignableFrom(reference)
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
index d2ed275..c268d64 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
@@ -164,7 +164,7 @@ public class JPARealmDAO extends AbstractDAO<Realm> implements RealmDAO {
         return query.getResultList();
     }
 
-    private void findAncestors(final List<Realm> result, final Realm realm) {
+    private static void findAncestors(final List<Realm> result, final Realm realm) {
         if (realm.getParent() != null && !result.contains(realm.getParent())) {
             result.add(realm.getParent());
             findAncestors(result, realm.getParent());
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
index e26ce31..d14f73f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
@@ -81,7 +81,7 @@ public class JPAReportExecDAO extends AbstractDAO<ReportExec> implements ReportE
         return ((Number) countQuery.getSingleResult()).intValue();
     }
 
-    private String toOrderByStatement(final List<OrderByClause> orderByClauses) {
+    private static String toOrderByStatement(final List<OrderByClause> orderByClauses) {
         StringBuilder statement = new StringBuilder();
 
         for (OrderByClause clause : orderByClauses) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
index 4d9dac3..416412f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
@@ -89,7 +89,7 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
         return result;
     }
 
-    private String getEntityTableName(final TaskType type) {
+    private static String getEntityTableName(final TaskType type) {
         String result = null;
 
         switch (type) {
@@ -205,14 +205,14 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
         return findAll(type, null, null, null, null, -1, -1, List.of());
     }
 
-    private StringBuilder buildFindAllQuery(
-            final TaskType type,
-            final ExternalResource resource,
-            final Notification notification,
-            final AnyTypeKind anyTypeKind,
-            final String entityKey,
-            final boolean orderByTaskExecInfo,
-            final List<Object> queryParameters) {
+    private static StringBuilder buildFindAllQuery(
+        final TaskType type,
+        final ExternalResource resource,
+        final Notification notification,
+        final AnyTypeKind anyTypeKind,
+        final String entityKey,
+        final boolean orderByTaskExecInfo,
+        final List<Object> queryParameters) {
 
         if (resource != null
                 && type != TaskType.PROPAGATION && type != TaskType.PUSH && type != TaskType.PULL) {
@@ -233,11 +233,11 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
         StringBuilder queryString = new StringBuilder("SELECT ").append(AbstractTask.TABLE).append(".*");
 
         if (orderByTaskExecInfo) {
-            queryString.append(",").append(JPATaskExec.TABLE).append(".startDate AS startDate").
-                    append(",").append(JPATaskExec.TABLE).append(".endDate AS endDate").
-                    append(",").append(JPATaskExec.TABLE).append(".status AS status").
+            queryString.append(',').append(JPATaskExec.TABLE).append(".startDate AS startDate").
+                    append(',').append(JPATaskExec.TABLE).append(".endDate AS endDate").
+                    append(',').append(JPATaskExec.TABLE).append(".status AS status").
                     append(" FROM ").append(AbstractTask.TABLE).
-                    append(",").append(JPATaskExec.TABLE).append(",").append("(SELECT ").
+                    append(',').append(JPATaskExec.TABLE).append(',').append("(SELECT ").
                     append(JPATaskExec.TABLE).append(".task_id, ").
                     append("MAX(").append(JPATaskExec.TABLE).append(".startDate) AS startDate").
                     append(" FROM ").append(JPATaskExec.TABLE).
@@ -299,7 +299,8 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
         return queryString;
     }
 
-    private String toOrderByStatement(final Class<? extends Task> beanClass, final List<OrderByClause> orderByClauses) {
+    private static String toOrderByStatement(final Class<? extends Task> beanClass,
+                                             final List<OrderByClause> orderByClauses) {
 
         StringBuilder statement = new StringBuilder();
 
@@ -384,7 +385,7 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
                             false,
                             queryParameters)).
                     append(" AND id NOT IN ").
-                    append("(SELECT task_id AS id FROM ").append(JPATaskExec.TABLE).append(")").
+                    append("(SELECT task_id AS id FROM ").append(JPATaskExec.TABLE).append(')').
                     append(")) T");
         } else {
             queryString.insert(0, "SELECT T.id FROM (").append(") T");
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
index 531cb4b..eb70532 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
@@ -125,7 +125,7 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec> implements TaskExecDAO
         return ((Number) countQuery.getSingleResult()).intValue();
     }
 
-    private String toOrderByStatement(final List<OrderByClause> orderByClauses) {
+    private static String toOrderByStatement(final List<OrderByClause> orderByClauses) {
         StringBuilder statement = new StringBuilder();
 
         for (OrderByClause clause : orderByClauses) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
index 0c36181..5bbd7a2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
@@ -78,7 +78,7 @@ import org.springframework.transaction.annotation.Transactional;
 public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
 
     protected static final Pattern USERNAME_PATTERN =
-            Pattern.compile("^" + SyncopeConstants.NAME_PATTERN, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
+            Pattern.compile('^' + SyncopeConstants.NAME_PATTERN, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
 
     protected static final Encryptor ENCRYPTOR = Encryptor.getInstance();
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/SearchSupport.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/SearchSupport.java
index 84c1c91..db48343 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/SearchSupport.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/SearchSupport.java
@@ -117,12 +117,12 @@ public class SearchSupport {
 
     public SearchView relationship() {
         String kind = anyTypeKind == AnyTypeKind.USER ? "u" : "a";
-        return new SearchView("sv" + kind + "m", field().name + "_" + kind + "relationship");
+        return new SearchView("sv" + kind + 'm', field().name + '_' + kind + "relationship");
     }
 
     public SearchView membership() {
         String kind = anyTypeKind == AnyTypeKind.USER ? "u" : "a";
-        return new SearchView("sv" + kind + "m", field().name + "_" + kind + "membership");
+        return new SearchView("sv" + kind + 'm', field().name + '_' + kind + "membership");
     }
 
     public SearchView dyngroupmembership() {
@@ -142,11 +142,11 @@ public class SearchSupport {
         return new SearchView("svdp", field().name + "_dynpriv");
     }
 
-    public SearchView dynrolemembership() {
+    public static SearchView dynrolemembership() {
         return new SearchView("svdr", JPARoleDAO.DYNMEMB_TABLE);
     }
 
-    public SearchView dynrealmmembership() {
+    public static SearchView dynrealmmembership() {
         return new SearchView("svdrealm", JPADynRealmDAO.DYNMEMB_TABLE);
     }
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/BooleanValueHandler.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/BooleanValueHandler.java
index 01145dd..9e1ca1a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/BooleanValueHandler.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/BooleanValueHandler.java
@@ -52,7 +52,7 @@ public class BooleanValueHandler extends AbstractValueHandler {
         return map(vm, colName, io, adapt);
     }
 
-    public Column[] map(final ValueMapping vm, final DBIdentifier name, final ColumnIO io, final boolean adapt) {
+    public static Column[] map(final ValueMapping vm, final DBIdentifier name, final ColumnIO io, final boolean adapt) {
         Column col = new Column();
         col.setIdentifier(name);
         col.setJavaType(JavaTypes.INT);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/LocaleValueHandler.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/LocaleValueHandler.java
index 56ee3cc..a85d845 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/LocaleValueHandler.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/LocaleValueHandler.java
@@ -55,7 +55,7 @@ public class LocaleValueHandler extends AbstractValueHandler {
         return map(vm, colName, io, adapt);
     }
 
-    public Column[] map(final ValueMapping vm, final DBIdentifier name, final ColumnIO io, final boolean adapt) {
+    public static Column[] map(final ValueMapping vm, final DBIdentifier name, final ColumnIO io, final boolean adapt) {
         Column col = new Column();
         col.setIdentifier(name);
         col.setJavaType(JavaTypes.STRING);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AbstractValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AbstractValidator.java
index b06d5ea..ea6743a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AbstractValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AbstractValidator.java
@@ -31,15 +31,15 @@ public abstract class AbstractValidator<A extends Annotation, T> implements Cons
     protected static final Logger LOG = LoggerFactory.getLogger(AbstractValidator.class);
 
     protected static final Pattern KEY_PATTERN =
-            Pattern.compile("^" + SyncopeConstants.NAME_PATTERN, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
+            Pattern.compile('^' + SyncopeConstants.NAME_PATTERN, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
 
     @Override
     public void initialize(final A annotation) {
         // no initialization
     }
 
-    protected final String getTemplate(final EntityViolationType type, final String message) {
-        return type.name() + ";" + message;
+    protected static String getTemplate(final EntityViolationType type, final String message) {
+        return type.name() + ';' + message;
     }
 
     protected boolean isHtml(final String text) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyValidator.java
index 9694850..baa33f9 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyValidator.java
@@ -33,10 +33,10 @@ import org.apache.syncope.core.spring.ApplicationContextProvider;
 @SuppressWarnings("rawtypes")
 public class AnyValidator extends AbstractValidator<AnyCheck, Any> {
 
-    private boolean raiseNotAllowedViolation(
-            final ConstraintValidatorContext context,
-            final String schema,
-            final Group group) {
+    private static boolean raiseNotAllowedViolation(
+        final ConstraintValidatorContext context,
+        final String schema,
+        final Group group) {
 
         if (group == null) {
             context.buildConstraintViolationWithTemplate(
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java
index 4fde449..52ef08c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java
@@ -70,7 +70,8 @@ public class EntityValidationListener {
                 }
             }
 
-            throw new InvalidEntityException(entityInt == null ? "Entity" : entityInt.getSimpleName(), violations);
+            throw new InvalidEntityException(entityInt == null
+                ? "Entity" : entityInt.getSimpleName(), violations);
         }
     }
 }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
index f4f6bc3..46f931e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
@@ -33,7 +33,7 @@ import org.identityconnectors.framework.common.objects.ObjectClass;
 
 public class ExternalResourceValidator extends AbstractValidator<ExternalResourceCheck, ExternalResource> {
 
-    private boolean isValid(final List<? extends Item> items, final ConstraintValidatorContext context) {
+    private static boolean isValid(final List<? extends Item> items, final ConstraintValidatorContext context) {
         long connObjectKeys = items.stream().filter(Item::isConnObjectKey).count();
         if (connObjectKeys != 1) {
             context.buildConstraintViolationWithTemplate(
@@ -45,7 +45,7 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc
         return true;
     }
 
-    private boolean isValid(final OrgUnit orgUnit, final ConstraintValidatorContext context) {
+    private static boolean isValid(final OrgUnit orgUnit, final ConstraintValidatorContext context) {
         if (orgUnit == null) {
             return true;
         }
@@ -53,7 +53,7 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc
         return isValid(orgUnit.getItems(), context);
     }
 
-    private boolean isValid(final Mapping mapping, final ConstraintValidatorContext context) {
+    private static boolean isValid(final Mapping mapping, final ConstraintValidatorContext context) {
         if (mapping == null) {
             return true;
         }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PropagationTaskValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PropagationTaskValidator.java
index a50d105..2abc2e9 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PropagationTaskValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PropagationTaskValidator.java
@@ -45,7 +45,7 @@ public class PropagationTaskValidator extends AbstractValidator<PropagationTaskC
                     try {
                         ExecStatus.valueOf(execution.getStatus());
                     } catch (IllegalArgumentException e) {
-                        LOG.error("Invalid execution status '" + execution.getStatus() + "'", e);
+                        LOG.error("Invalid execution status '" + execution.getStatus() + '\'', e);
                         isValid = false;
                     }
                 }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java
index 2be2072..09b6368 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java
@@ -48,7 +48,7 @@ public class ReportValidator extends AbstractValidator<ReportCheck, Report> {
             try {
                 new CronExpression(report.getCronExpression());
             } catch (ParseException e) {
-                LOG.error("Invalid cron expression '" + report.getCronExpression() + "'", e);
+                LOG.error("Invalid cron expression '" + report.getCronExpression() + '\'', e);
                 isValid = false;
 
                 context.disableDefaultConstraintViolation();
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchedTaskValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchedTaskValidator.java
index cc813c6..8699dd5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchedTaskValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchedTaskValidator.java
@@ -34,7 +34,7 @@ public class SchedTaskValidator extends AbstractValidator<SchedTaskCheck, SchedT
             try {
                 new CronExpression(task.getCronExpression());
             } catch (ParseException e) {
-                LOG.error("Invalid cron expression '" + task.getCronExpression() + "'", e);
+                LOG.error("Invalid cron expression '" + task.getCronExpression() + '\'', e);
                 isValid = false;
 
                 context.disableDefaultConstraintViolation();
diff --git a/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor/OpenJpaDialect.java b/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor/OpenJpaDialect.java
index 56ec969..efeae69 100644
--- a/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor/OpenJpaDialect.java
+++ b/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor/OpenJpaDialect.java
@@ -87,7 +87,7 @@ public class OpenJpaDialect extends DefaultJpaDialect {
      * @param em the generic {@code EntityManager} instance
      * @return the OpenJPA-specific variant of {@code EntityManager}
      */
-    protected OpenJPAEntityManager getOpenJPAEntityManager(final EntityManager em) {
+    protected static OpenJPAEntityManager getOpenJPAEntityManager(final EntityManager em) {
         return OpenJPAPersistence.cast(em);
     }
 
diff --git a/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor/OpenJpaVendorAdapter.java b/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor/OpenJpaVendorAdapter.java
index 009a5e0..2a2fb96 100644
--- a/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor/OpenJpaVendorAdapter.java
+++ b/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor/OpenJpaVendorAdapter.java
@@ -88,7 +88,7 @@ public class OpenJpaVendorAdapter extends AbstractJpaVendorAdapter {
      * @param database the specified database
      * @return the OpenJPA database dictionary name, or {@code null} if none found
      */
-    protected String determineDatabaseDictionary(final Database database) {
+    protected static String determineDatabaseDictionary(final Database database) {
         switch (database) {
             case DB2:
                 return "db2";
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 a9e1895..9bf8c74 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
@@ -130,7 +130,7 @@ public class PlainSchemaTest extends AbstractTest {
         }
 
         schema.setEnumerationValues("red" + SyncopeConstants.ENUM_VALUES_SEPARATOR + "yellow");
-        schema.setEnumerationKeys("1" + SyncopeConstants.ENUM_VALUES_SEPARATOR + "2");
+        schema.setEnumerationKeys('1' + SyncopeConstants.ENUM_VALUES_SEPARATOR + '2');
 
         plainSchemaDAO.save(schema);
 
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
index 7dfe167..835682c 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
@@ -242,11 +242,11 @@ public class UserTest extends AbstractTest {
         assertNotNull(firstname);
 
         // search by ksuffix derived attribute
-        List<User> list = userDAO.findByDerAttrValue(derSchemaDAO.find("ksuffix"), firstname + "k", false);
+        List<User> list = userDAO.findByDerAttrValue(derSchemaDAO.find("ksuffix"), firstname + 'k', false);
         assertEquals(1, list.size());
 
         // search by kprefix derived attribute
-        list = userDAO.findByDerAttrValue(derSchemaDAO.find("kprefix"), "k" + firstname, false);
+        list = userDAO.findByDerAttrValue(derSchemaDAO.find("kprefix"), 'k' + firstname, false);
         assertEquals(1, list.size());
     }
 
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationException.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationException.java
index 8e47872..d7cbe49 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationException.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationException.java
@@ -37,7 +37,7 @@ public class PropagationException extends RuntimeException {
      * @param stackTrace original stacktrace
      */
     public PropagationException(final String resourceName, final String stackTrace) {
-        super("Exception during provision on resource " + resourceName + "\n" + stackTrace);
+        super("Exception during provision on resource " + resourceName + '\n' + stackTrace);
 
         this.resourceName = resourceName;
     }
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java
index 66c308c..5b16b1a 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java
@@ -27,7 +27,7 @@ import java.util.stream.Collectors;
 public final class RealmUtils {
 
     public static String getGroupOwnerRealm(final String realmPath, final String groupKey) {
-        return realmPath + "@" + groupKey;
+        return realmPath + '@' + groupKey;
     }
 
     public static boolean normalizingAddTo(final Set<String> realms, final String newRealm) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AuditEntry.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AuditEntry.java
index 9870dc1..c0cd4cf 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AuditEntry.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AuditEntry.java
@@ -66,7 +66,7 @@ public class AuditEntry implements Serializable {
         }
     }
 
-    private Object maskSensitive(final Object object) {
+    private static Object maskSensitive(final Object object) {
         Object masked;
 
         if (object instanceof UserTO) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
index 9c0b1cb..16faf61 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
@@ -509,7 +509,7 @@ public class ConnectorFacadeProxy implements Connector {
         return connInstance;
     }
 
-    private Object getPropertyValue(final String propType, final List<?> values) {
+    private static Object getPropertyValue(final String propType, final List<?> values) {
         Object value = null;
 
         try {
@@ -551,6 +551,6 @@ public class ConnectorFacadeProxy implements Connector {
     @Override
     public String toString() {
         return "ConnectorFacadeProxy{"
-                + "connector=" + connector + "\n" + "capabitilies=" + connInstance.getCapabilities() + '}';
+                + "connector=" + connector + '\n' + "capabitilies=" + connInstance.getCapabilities() + '}';
     }
 }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
index 6cf2a23..f6f3b7d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
@@ -68,7 +68,7 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory {
 
     private EntityFactory entityFactory;
 
-    private String getBeanName(final ExternalResource resource) {
+    private static String getBeanName(final ExternalResource resource) {
         return String.format("connInstance-%s-%S-%s",
                 AuthContextUtils.getDomain(), resource.getConnector().getKey(), resource.getKey());
     }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java
index 2d5788d..0f4757f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java
@@ -45,7 +45,7 @@ public class DerAttrHandlerImpl implements DerAttrHandler {
     @Autowired
     private AnyUtilsFactory anyUtilsFactory;
 
-    private Map<DerSchema, String> getValues(final Any<?> any, final Set<DerSchema> schemas) {
+    private static Map<DerSchema, String> getValues(final Any<?> any, final Set<DerSchema> schemas) {
         Map<DerSchema, String> result = new HashMap<>(schemas.size());
 
         schemas.forEach(schema -> {
@@ -90,8 +90,8 @@ public class DerAttrHandlerImpl implements DerAttrHandler {
                 anyUtilsFactory.getInstance(any).dao().findAllowedSchemas(any, DerSchema.class).getForSelf());
     }
 
-    private Map<DerSchema, String> getValues(
-            final GroupableRelatable<?, ?, ?, ?, ?> any, final Membership<?> membership, final Set<DerSchema> schemas) {
+    private static Map<DerSchema, String> getValues(
+        final GroupableRelatable<?, ?, ?, ?, ?> any, final Membership<?> membership, final Set<DerSchema> schemas) {
 
         Map<DerSchema, String> result = new HashMap<>(schemas.size());
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/MappingManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/MappingManagerImpl.java
index c030a6f..04c1300 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/MappingManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/MappingManagerImpl.java
@@ -221,7 +221,7 @@ public class MappingManagerImpl implements MappingManager {
         return Pair.of(connObjectKey, attributes);
     }
 
-    private String getIntValue(final Realm realm, final Item orgUnitItem) {
+    private static String getIntValue(final Realm realm, final Item orgUnitItem) {
         String value = null;
         switch (orgUnitItem.getIntAttrName()) {
             case "key":
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
index 370be9e..c7aae0d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
@@ -168,12 +168,12 @@ abstract class AbstractAnyDataBinder {
         return schema;
     }
 
-    private void fillAttr(
-            final List<String> values,
-            final AnyUtils anyUtils,
-            final PlainSchema schema,
-            final PlainAttr<?> attr,
-            final SyncopeClientException invalidValues) {
+    private static void fillAttr(
+        final List<String> values,
+        final AnyUtils anyUtils,
+        final PlainSchema schema,
+        final PlainAttr<?> attr,
+        final SyncopeClientException invalidValues) {
 
         // if schema is multivalue, all values are considered for addition;
         // otherwise only the fist one - if provided - is considered
@@ -249,11 +249,11 @@ abstract class AbstractAnyDataBinder {
         return reqValMissing;
     }
 
-    private void checkMandatory(
-            final PlainSchema schema,
-            final PlainAttr<?> attr,
-            final Any<?> any,
-            final SyncopeClientException reqValMissing) {
+    private static void checkMandatory(
+        final PlainSchema schema,
+        final PlainAttr<?> attr,
+        final Any<?> any,
+        final SyncopeClientException reqValMissing) {
 
         if (attr == null
                 && !schema.isReadonly()
@@ -265,7 +265,7 @@ abstract class AbstractAnyDataBinder {
         }
     }
 
-    private SyncopeClientException checkMandatory(final Any<?> any, final AnyUtils anyUtils) {
+    private static SyncopeClientException checkMandatory(final Any<?> any, final AnyUtils anyUtils) {
         SyncopeClientException reqValMissing = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
 
         // Check if there is some mandatory schema defined for which no value has been provided
@@ -545,15 +545,15 @@ abstract class AbstractAnyDataBinder {
         }
     }
 
-    protected void fillTO(
-            final AnyTO anyTO,
-            final String realmFullPath,
-            final Collection<? extends AnyTypeClass> auxClasses,
-            final Collection<? extends PlainAttr<?>> plainAttrs,
-            final Map<DerSchema, String> derAttrs,
-            final Map<VirSchema, List<String>> virAttrs,
-            final Collection<? extends ExternalResource> resources,
-            final boolean details) {
+    protected static void fillTO(
+        final AnyTO anyTO,
+        final String realmFullPath,
+        final Collection<? extends AnyTypeClass> auxClasses,
+        final Collection<? extends PlainAttr<?>> plainAttrs,
+        final Map<DerSchema, String> derAttrs,
+        final Map<VirSchema, List<String>> virAttrs,
+        final Collection<? extends ExternalResource> resources,
+        final boolean details) {
 
         anyTO.setRealm(realmFullPath);
 
@@ -572,17 +572,17 @@ abstract class AbstractAnyDataBinder {
         anyTO.getResources().addAll(resources.stream().map(Entity::getKey).collect(Collectors.toSet()));
     }
 
-    protected RelationshipTO getRelationshipTO(final String relationshipType, final AnyObject otherEnd) {
+    protected static RelationshipTO getRelationshipTO(final String relationshipType, final AnyObject otherEnd) {
         return new RelationshipTO.Builder().
                 type(relationshipType).otherEnd(otherEnd.getType().getKey(), otherEnd.getKey(), otherEnd.getName()).
                 build();
     }
 
-    protected MembershipTO getMembershipTO(
-            final Collection<? extends PlainAttr<?>> plainAttrs,
-            final Map<DerSchema, String> derAttrs,
-            final Map<VirSchema, List<String>> virAttrs,
-            final Membership<? extends Any<?>> membership) {
+    protected static MembershipTO getMembershipTO(
+        final Collection<? extends PlainAttr<?>> plainAttrs,
+        final Map<DerSchema, String> derAttrs,
+        final Map<VirSchema, List<String>> virAttrs,
+        final Membership<? extends Any<?>> membership) {
 
         MembershipTO membershipTO = new MembershipTO.Builder(membership.getRightEnd().getKey())
                 .groupName(membership.getRightEnd().getName())
@@ -613,8 +613,8 @@ abstract class AbstractAnyDataBinder {
                 ifPresent(provision -> {
                     MappingItem connObjectKeyItem = MappingUtils.getConnObjectKeyItem(provision).
                             orElseThrow(() -> new NotFoundException(
-                            "ConnObjectKey mapping for " + any.getType().getKey() + " " + any.getKey()
-                            + " on resource '" + resource.getKey() + "'"));
+                            "ConnObjectKey mapping for " + any.getType().getKey() + ' ' + any.getKey()
+                            + " on resource '" + resource.getKey() + '\''));
 
                     mappingManager.getConnObjectKeyValue(any, provision).
                             ifPresent(value -> connObjectKeys.put(resource.getKey(), value));
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 023c62f..815fe3c 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
@@ -133,7 +133,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
     public ConnInstance update(final ConnInstanceTO connInstanceTO) {
         ConnInstance connInstance = connInstanceDAO.authFind(connInstanceTO.getKey());
... 4460 lines suppressed ...