Reflow
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
index a66019f..0569905 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
@@ -141,14 +141,6 @@
         return sce.getType().name() + ": " + sce.getElements().stream().collect(Collectors.joining(", "));
     }
 
-    /**
-     * Extract and localize (if translation available) the actual message from the given exception; then, report it
-     * via {@link Session#error(java.io.Serializable)}.
-     *
-     * @see org.apache.syncope.client.lib.RestClientExceptionMapper
-     *
-     * @param e raised exception
-     */
     @Override
     public void onException(final Exception e) {
         Throwable root = ExceptionUtils.getRootCause(e);
@@ -157,8 +149,7 @@
         if (root instanceof SyncopeClientException) {
             SyncopeClientException sce = (SyncopeClientException) root;
             message = sce.isComposite()
-                    ? sce.asComposite().getExceptions().stream().
-                            map(c -> message(c)).collect(Collectors.joining("; "))
+                    ? sce.asComposite().getExceptions().stream().map(this::message).collect(Collectors.joining("; "))
                     : message(sce);
         } else if (root instanceof AccessControlException || root instanceof ForbiddenException) {
             Error error = StringUtils.containsIgnoreCase(message, "expired")
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserSession.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserSession.java
index 1404289..e9052f5 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserSession.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserSession.java
@@ -44,7 +44,6 @@
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
 import org.apache.syncope.common.rest.api.RESTHeaders;
 import org.apache.wicket.Session;
@@ -98,6 +97,10 @@
         executor.initialize();
     }
 
+    protected String message(final SyncopeClientException sce) {
+        return sce.getType().name() + ": " + sce.getElements().stream().collect(Collectors.joining(", "));
+    }
+
     @Override
     public void onException(final Exception e) {
         Throwable root = ExceptionUtils.getRootCause(e);
@@ -105,12 +108,9 @@
 
         if (root instanceof SyncopeClientException) {
             SyncopeClientException sce = (SyncopeClientException) root;
-            if (sce.getType() == ClientExceptionType.InvalidSecurityAnswer) {
-                message = getApplication().getResourceSettings().getLocalizer().
-                        getString("invalid.security.answer", null);
-            } else if (!sce.isComposite()) {
-                message = sce.getElements().stream().collect(Collectors.joining(", "));
-            }
+            message = sce.isComposite()
+                    ? sce.asComposite().getExceptions().stream().map(this::message).collect(Collectors.joining("; "))
+                    : message(sce);
         } else if (root instanceof AccessControlException || root instanceof ForbiddenException) {
             Error error = StringUtils.containsIgnoreCase(message, "expired")
                     ? Error.SESSION_EXPIRED