diff --git a/org.eclipse.osbp.authentication.ui/.classpath b/org.eclipse.osbp.authentication.ui/.classpath
index a0a6461..12fd359 100644
--- a/org.eclipse.osbp.authentication.ui/.classpath
+++ b/org.eclipse.osbp.authentication.ui/.classpath
@@ -3,7 +3,7 @@
 	<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
-	<classpathentry kind="src" path="src-gen/"/>
+	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry kind="src" path="ecviews/"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/org.eclipse.osbp.authentication.ui/OSGI-INF/org.eclipse.osbp.authentication.account.tables.TablesServiceBinder.xml b/org.eclipse.osbp.authentication.ui/OSGI-INF/org.eclipse.osbp.authentication.account.tables.TablesServiceBinder.xml
new file mode 100644
index 0000000..6606549
--- /dev/null
+++ b/org.eclipse.osbp.authentication.ui/OSGI-INF/org.eclipse.osbp.authentication.account.tables.TablesServiceBinder.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osbp.authentication.account.tables.TablesServiceBinder">
+   <reference bind="bindUserAccessMethod" cardinality="1..1" interface="org.eclipse.osbp.ui.api.useraccess.IUserAccessService" name="UserAccessMethod" policy="static" unbind="unbindUserAccessMethod"/>
+   <implementation class="org.eclipse.osbp.authentication.account.tables.TablesServiceBinder"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication.ui/ecviews/.gitignore b/org.eclipse.osbp.authentication.ui/ecviews/.gitignore
deleted file mode 100644
index ff10ed4..0000000
--- a/org.eclipse.osbp.authentication.ui/ecviews/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.ecview
-/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.ecview
diff --git a/org.eclipse.osbp.authentication.ui/ecviews/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.ecview b/org.eclipse.osbp.authentication.ui/ecviews/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.ecview
index cd37116..4329eda 100644
--- a/org.eclipse.osbp.authentication.ui/ecviews/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.ecview
+++ b/org.eclipse.osbp.authentication.ui/ecviews/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.ecview
@@ -14,12 +14,6 @@
           <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
         </valueBindingEndpoints>
       </suspects>
-      <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.password" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="password" labelI18nKey="password" label="password" typeQualifiedName="java.lang.String" type="java.lang.String">
-        <tags>text</tags>
-        <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="password" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
-          <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
-        </valueBindingEndpoints>
-      </suspects>
       <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.extraPassword" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="extraPassword" labelI18nKey="extraPassword" label="extraPassword" typeQualifiedName="java.lang.String" type="java.lang.String">
         <tags>text</tags>
         <tags>constraint</tags>
@@ -67,12 +61,6 @@
           <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
         </valueBindingEndpoints>
       </suspects>
-      <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.supervisor" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="supervisor" labelI18nKey="supervisor" label="supervisor" typeQualifiedName="boolean">
-        <tags>boolean</tags>
-        <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="supervisor" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
-          <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
-        </valueBindingEndpoints>
-      </suspects>
       <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.forcePwdChange" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="forcePwdChange" labelI18nKey="forcePwdChange" label="forcePwdChange" typeQualifiedName="boolean">
         <tags>boolean</tags>
         <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="forcePwdChange" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
@@ -97,12 +85,6 @@
           <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
         </valueBindingEndpoints>
       </suspects>
-      <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.cookieHashCode" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="cookieHashCode" labelI18nKey="cookieHashCode" label="cookieHashCode" typeQualifiedName="int">
-        <tags>number</tags>
-        <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="cookieHashCode" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
-          <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
-        </valueBindingEndpoints>
-      </suspects>
       <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.localeTag" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="localeTag" labelI18nKey="localeTag" label="localeTag" typeQualifiedName="java.lang.String" type="java.lang.String">
         <tags>i18nCombo</tags>
         <properties key="i18n" value=""/>
@@ -143,15 +125,6 @@
           <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
         </valueBindingEndpoints>
       </suspects>
-      <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAccount.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.savedProperties" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="savedProperties" labelI18nKey="savedProperties" label="savedProperties" typeQualifiedName="byte[]">
-        <tags>blob</tags>
-        <tags>constraint</tags>
-        <properties key="class" value="org.eclipse.osbp.authentication.account.dtos.UserAccountDto"/>
-        <properties key="name" value="savedProperties"/>
-        <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="savedProperties" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
-          <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
-        </valueBindingEndpoints>
-      </suspects>
     </elements>
     <cellStyles target="strategyLayout" alignment="FILL_FILL"/>
   </content>
diff --git a/org.eclipse.osbp.authentication.ui/ecviews/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.ecview b/org.eclipse.osbp.authentication.ui/ecviews/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.ecview
index 1dd6ff1..a8b15c6 100644
--- a/org.eclipse.osbp.authentication.ui/ecviews/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.ecview
+++ b/org.eclipse.osbp.authentication.ui/ecviews/org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.ecview
@@ -14,12 +14,6 @@
           <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
         </valueBindingEndpoints>
       </suspects>
-      <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.password" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="password" labelI18nKey="password" label="password" typeQualifiedName="java.lang.String" type="java.lang.String">
-        <tags>text</tags>
-        <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="password" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
-          <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
-        </valueBindingEndpoints>
-      </suspects>
       <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.extraPassword" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="extraPassword" labelI18nKey="extraPassword" label="extraPassword" typeQualifiedName="java.lang.String" type="java.lang.String">
         <tags>text</tags>
         <tags>constraint</tags>
@@ -67,12 +61,6 @@
           <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
         </valueBindingEndpoints>
       </suspects>
-      <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.supervisor" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="supervisor" labelI18nKey="supervisor" label="supervisor" typeQualifiedName="boolean">
-        <tags>boolean</tags>
-        <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="supervisor" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
-          <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
-        </valueBindingEndpoints>
-      </suspects>
       <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.forcePwdChange" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="forcePwdChange" labelI18nKey="forcePwdChange" label="forcePwdChange" typeQualifiedName="boolean">
         <tags>boolean</tags>
         <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="forcePwdChange" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
@@ -97,12 +85,6 @@
           <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
         </valueBindingEndpoints>
       </suspects>
-      <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.cookieHashCode" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="cookieHashCode" labelI18nKey="cookieHashCode" label="cookieHashCode" typeQualifiedName="int">
-        <tags>number</tags>
-        <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="cookieHashCode" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
-          <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
-        </valueBindingEndpoints>
-      </suspects>
       <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.localeTag" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="localeTag" labelI18nKey="localeTag" label="localeTag" typeQualifiedName="java.lang.String" type="java.lang.String">
         <tags>i18nCombo</tags>
         <properties key="i18n" value=""/>
@@ -143,15 +125,6 @@
           <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
         </valueBindingEndpoints>
       </suspects>
-      <suspects xsi:type="model:YTypedSuspect" id="org.eclipse.osbp.authentication.account.dialogs.autobinded.UserAdministration.org.eclipse.osbp.authentication.account.dtos.UserAccountDto.savedProperties" authorizationGroup="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" authorizationId="savedProperties" labelI18nKey="savedProperties" label="savedProperties" typeQualifiedName="byte[]">
-        <tags>blob</tags>
-        <tags>constraint</tags>
-        <properties key="class" value="org.eclipse.osbp.authentication.account.dtos.UserAccountDto"/>
-        <properties key="name" value="savedProperties"/>
-        <valueBindingEndpoints xsi:type="binding:YDetailValueBindingEndpoint" propertyPath="savedProperties" type="org.eclipse.osbp.authentication.account.dtos.UserAccountDto">
-          <masterObservable xsi:type="core:YBeanSlotValueBindingEndpoint" attributePath="value" beanSlot="//@beanSlots.0"/>
-        </valueBindingEndpoints>
-      </suspects>
     </elements>
     <cellStyles target="strategyLayout" alignment="FILL_FILL"/>
   </content>
diff --git a/org.eclipse.osbp.authentication.ui/i18n/I18N.properties b/org.eclipse.osbp.authentication.ui/i18n/I18N.properties
index 1413b57..7dc8cc1 100644
--- a/org.eclipse.osbp.authentication.ui/i18n/I18N.properties
+++ b/org.eclipse.osbp.authentication.ui/i18n/I18N.properties
@@ -7,7 +7,7 @@
 cancel_register_tip=Cancels the registration and steps back to login.
 clear_filter=clear_filter
 close=close
-copyright=Copyright 2012-2017
+copyright=Copyright 2012-
 create_new_item=create_new_item
 created_at=created_at
 created_by=created_by
@@ -18,7 +18,7 @@
 edit_account=edit_account
 email_is_empty_message=Please fill the email address!
 email_is_incorrect_message=Email is incorrect!
-email_password_reset_body=Please find your new password here.\\nYou have to change it with your next login!\\n\\nYour new password is:
+email_password_reset_body=Please find your new password here.\\nYou have to change it with your next login!\\n\\nYour new password is: {0}
 email_password_reset_subject=Your new password
 end_date=end_date
 equal_to=equal_to
@@ -55,7 +55,7 @@
 part_name=part_name
 password=Password
 password_is_empty=Please fill the password!
-password_reset=Your password was reset to
+password_reset=password reset
 password_reset_success_message=Password successfully reset!
 password_tip=Enter your password
 password_verifying=Verifying password
@@ -63,8 +63,8 @@
 password_verifying_tip=Enter your verifying password
 passwords_not_equal=The passwords are not equal!
 perspective_na=perspective_na
-register=Register
 register_caption=REGISTRATION
+register_new_user=Register
 register_password_is_empty_message=Please fill both password fields with your desired password! 
 register_tip=If this is the first time to work with the system, you must provide some personal data so the Administrator can create an account for you. After successful registration process, you can use the sign-in button the next time.
 register_username_already_exists=User name already exists! Its registration is not possible!
@@ -92,11 +92,12 @@
 start_date=start_date
 too_many_users=More than one user with the same user name found.
 toolbar_for_dialogs=toolbar_for_dialogs
-trademark=OS.bee is a Registered Trademark of Loetz GmbH & Co KG.
+trademark=OS.bee is a Registered Trademark of Loetz GmbH&Co.KG.
 undo_changes=undo_changes
 unknown=unknown
 updated_at=updated_at
 updated_by=updated_by
+user_account=user_account
 user_administration=user_administration
 user_exist_message=User already exists!
 username=Username
diff --git a/org.eclipse.osbp.authentication.ui/i18n/I18N_de.properties b/org.eclipse.osbp.authentication.ui/i18n/I18N_de.properties
index a7a1f60..a101d22 100644
--- a/org.eclipse.osbp.authentication.ui/i18n/I18N_de.properties
+++ b/org.eclipse.osbp.authentication.ui/i18n/I18N_de.properties
@@ -7,7 +7,7 @@
 cancel_register_tip=Hiermit brechen Sie die Registrierung ab und kehren zur\u00FCck zur Anmeldung.
 clear_filter=Clear filter
 close=Close
-copyright=Copyright 2012-2017\n
+copyright=Copyright 2012-\n
 create_new_item=Create new item
 created_at=Created at
 created_by=Created by
@@ -18,7 +18,7 @@
 edit_account=Edit account
 email_is_empty_message=Geben Sie bitte Ihre Email Adresse an!
 email_is_incorrect_message=Geben Sie bitte eine richtige Emailadresse an!
-email_password_reset_body=Anbei Ihr neues Passwort.\\nSie m\u00FCssen das Passwort bei der n\u00E4chsten Anmeldung \u00E4ndern!\\n\\nDas neue Passwort lautet:\t\t\t\t
+email_password_reset_body=Anbei Ihr neues Passwort.\\nSie m\u00FCssen das Passwort bei der n\u00E4chsten Anmeldung \u00E4ndern!\\n\\nDas neue Passwort lautet: {0}\t\t\t\t
 email_password_reset_subject=Passwort erfolgreich zur\u00FCckgesetzt! Anbei ihr neues Passwort.
 end_date=End date
 equal_to=Equal to
@@ -55,22 +55,19 @@
 page=Page
 part_name=Part name
 password=Passwort
-passwordVerifying=Best\u00E4tigendes Passwort
-passwordVerifying_tip=Geben Sie Ihr Passwort zur Best\u00E4tigung ein
 password_is_empty=Please fill the password!
 password_is_empty_message=Geben Sie bitte Ihr Passwort ein!
-password_reset=Dein zur\u00FCckgesetztes Passwort lautet: 
+password_reset=Passwort zur\u00FCcksetzen
 password_reset_success_message=Passwort erfolgreich zur\u00FCckgesetzt!
 password_tip=Geben Sie Ihr Passwort ein
-password_verifying=Verifying password
-password_verifying_is_empty=Please fill the verifying password!
+password_verifying=Passwortwiederholung
+password_verifying_is_empty=Bitte geben Sie Ihr Passwort zur Best\u00E4tigung ein!
 password_verifying_is_empty_message=Bitte geben Sie Ihr Passwort zur Best\u00E4tigung ein!
-password_verifying_tip=Enter your verifying password
-passwords_not_equal=The passwords are not equal!
-passwords_not_equal_message=Die eingegebenen Passw\u00F6rter ist nicht identisch!
-perspective_na=Perspective na
-register=Registrieren
+password_verifying_tip=Bitte wiederholen Sie das Passwort hier!
+passwords_not_equal=Die eingegebenen Passworte sind nicht identisch!
+perspective_na=Perspective nicht gefunden
 register_caption=REGISTRIERUNG
+register_new_user=Registrieren
 register_password_is_empty_message=Bitte geben Sie in beiden Passwortfeldern das gew\u00FCnsche Passwort ein! 
 register_tip=Wenn dies Ihr erstes Mal am System ist, m\u00FCssen Sie einige pers\u00F6nliche Daten angeben, damit der Administrator ein Konto f\u00FCr Sie einrichten kann. Nach der erfolgreichen Registrierung k\u00F6nnen Sie sich am System anmelden.
 register_username_already_exists=Benutzername ist bereits vorhanden! Registrierung nicht m\u00F6glich!
@@ -98,11 +95,12 @@
 start_date=Start date
 too_many_users=Mehr als einen Benutzer mit dem gleichen Benutzernamen gefunden.
 toolbar_for_dialogs=Toolbar for dialogs
-trademark=OS.bee is a Registered Trademark of Loetz GmbH & Co KG.
+trademark=OS.bee is a Registered Trademark of Loetz GmbH&Co.KG.
 undo_changes=Undo changes
 unknown=Unknown
 updated_at=Updated at
 updated_by=Updated by
+user_account=User account
 user_administration=User administration
 user_exist_message=Benutzer existiert bereits!
 username=Benutzername
diff --git a/org.eclipse.osbp.authentication.ui/i18n/I18N_de_AT.properties b/org.eclipse.osbp.authentication.ui/i18n/I18N_de_AT.properties
index 6c73e1d..3f64431 100644
--- a/org.eclipse.osbp.authentication.ui/i18n/I18N_de_AT.properties
+++ b/org.eclipse.osbp.authentication.ui/i18n/I18N_de_AT.properties
@@ -1 +1 @@
-#de_AT
+#Generated by Eclipse Messages Editor (Eclipse Babel)
diff --git a/org.eclipse.osbp.authentication.ui/i18n/I18N_en.properties b/org.eclipse.osbp.authentication.ui/i18n/I18N_en.properties
index 2b7225b..1732f2d 100644
--- a/org.eclipse.osbp.authentication.ui/i18n/I18N_en.properties
+++ b/org.eclipse.osbp.authentication.ui/i18n/I18N_en.properties
@@ -7,7 +7,7 @@
 cancel_register_tip=Cancels the registration and steps back to login.
 clear_filter=Clear filter
 close=Close
-copyright=Copyright 2012-2017
+copyright=Copyright 2012-
 create_new_item=Create new item
 created_at=Created at
 created_by=Created by
@@ -18,8 +18,8 @@
 edit_account=Edit account
 email_is_empty_message=Please fill the email address!
 email_is_incorrect_message=Email is incorrect!
-email_password_reset_body=Please find your new password here.\\nYou have to change it with your next login!\\n\\nYour new password is:
-email_password_reset_subject=Your new password
+email_password_reset_body=Please find your new password here.\\nYou have to change it with your next login!\\n\\nYour new password is: {0}
+email_password_reset_subject=Your password has been reset. Please find your new password in the message.
 end_date=End date
 equal_to=Equal to
 failedmessage=Either user name or password is wrong. Please try again or press \"Forgot Password\" to get a new password.
@@ -55,19 +55,19 @@
 part_name=Part name
 password=Password
 password_is_empty=Please fill the password!
-password_reset=Your password was reset to
+password_reset=Reset password
 password_reset_success_message=Password successfully reset!
 password_tip=Enter your password
-password_verifying=Verifying password
-password_verifying_is_empty=Please fill the verifying password!
-password_verifying_tip=Enter your verifying password
+password_verifying=Verify password
+password_verifying_is_empty=Please repeat your new password!
+password_verifying_tip=Enter your verify password here!
 passwords_not_equal=The passwords are not equal!
-perspective_na=Perspective na
-register=Register
+perspective_na=Perspective not available
 register_caption=REGISTRATION
+register_new_user=Register
 register_password_is_empty_message=Please fill both password fields with your desired password!
 register_tip=If this is the first time to work with the system, you must provide some personal data so the Administrator can create an account for you. After successful registration process, you can use the sign-in button the next time.
-register_username_already_exists=User name already exists! Its registration is not possible!
+register_username_already_exists=User name already exists! Registration is not possible!
 register_username_is_empty_message=Please fill the username to register!
 registration_success_message=The administrator will contact you as soon as your registration was completed.
 remember_me=remember me
@@ -92,11 +92,12 @@
 start_date=Start date
 too_many_users=More than one user with the same user name found.
 toolbar_for_dialogs=Toolbar for dialogs
-trademark=OS.bee is a Registered Trademark of Loetz GmbH & Co KG.
+trademark=OS.bee is a Registered Trademark of Loetz GmbH&Co.KG.
 undo_changes=Undo changes
 unknown=Unknown
 updated_at=Updated at
 updated_by=Updated by
+user_account=User account
 user_administration=User administration
 user_exist_message=User already exists!
 username=Username
diff --git a/org.eclipse.osbp.authentication.ui/i18n/I18N_en_US.properties b/org.eclipse.osbp.authentication.ui/i18n/I18N_en_US.properties
index d89e21c..3f64431 100644
--- a/org.eclipse.osbp.authentication.ui/i18n/I18N_en_US.properties
+++ b/org.eclipse.osbp.authentication.ui/i18n/I18N_en_US.properties
@@ -1 +1 @@
-#en_US
+#Generated by Eclipse Messages Editor (Eclipse Babel)
diff --git a/org.eclipse.osbp.authentication.ui/i18n/I18N_fr.properties b/org.eclipse.osbp.authentication.ui/i18n/I18N_fr.properties
index 0b9340c..72f7b49 100644
--- a/org.eclipse.osbp.authentication.ui/i18n/I18N_fr.properties
+++ b/org.eclipse.osbp.authentication.ui/i18n/I18N_fr.properties
@@ -1,5 +1,5 @@
 #fr
-copyright=Copyright 2012-2017
+copyright=Copyright 2012-
 disabledmessage=For security reasons your account was disabled. Contact your administrator to enable your account.
 failedmessage=L'utilisateur est inconnu ou le mot de passe est non valide. S'il vous pla\u00EEt essaiez encore une fois ou pressez le bouton \"Mot de passe oubli\u00E9\" pour recevoir un nouveau.
 forgot_password=Mot de passe oubli\u00E9 ?
@@ -8,8 +8,10 @@
 login_caption=LOGIN
 login_caption_tip=Vous \u00EAtes forcer d'identifier \u00E0 syst\u00E8me avant vous pouvez utilizer la fonctionnalit\u00E9 provisionn\u00E9e. 
 password=Mot de passe
+password_reset=R\u00E9initialiser le mot de passe
 password_tip=Saisirez votre mot de passe
-register=Enregistrer
+perspective_na=Perspective non disponible
+register_new_user=Enregistrer
 register_tip=Si vous travaillez avec le syst\u00E8me la premiere fois, il faut donner quelques donn\u00E9es personelles pour que l'Administrateur peut installer un compte d'utilisateur pour vous. Apr\u00E8s l'enregistration r\u00E9ussi, vous \u00EAtez en \u00E9tat de connexer avec le syst\u00E8me la prochaine fois.  
 remember_me=Garder ma session active
 remember_me_tip=Posez ce crochet quand vous voulez connexier avec le syst\u00E8me automaticallement la prochaine fois. 
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/CancelItemAction.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/CancelItemAction.java
index d04d13b..68cd7ea 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/CancelItemAction.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/CancelItemAction.java
@@ -54,8 +54,10 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.osbp.core.api.persistence.IPersistenceService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.eventbroker.EventBrokerMsg;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.runtime.common.annotations.IsDirty;
@@ -73,6 +75,9 @@
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.utils.vaadin.MDXDialog;
 import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService;
 import org.eclipse.osbp.xtext.action.ChartActionEnum;
@@ -94,6 +99,8 @@
 public class CancelItemAction {
   private static Logger log = org.slf4j.LoggerFactory.getLogger("action");
   
+  private static Map<String, Boolean> isGranted = new HashMap();
+  
   private MUIElement activePart;
   
   public MUIElement getActivePart() {
@@ -101,7 +108,7 @@
   }
   
   @CanExecute
-  public boolean canExecute(final IEclipseContext eclipseContext) {
+  public boolean canExecute(final IEclipseContext eclipseContext, final IUserAccessService userAccessService, final IViewContext viewContext) {
     IE4Dialog dialog = eclipseContext.get(IE4Dialog.class);
     if (dialog == null) {
     	return false;
@@ -114,7 +121,8 @@
   public void execute(final IEclipseContext eclipseContext, final IEventDispatcher eventDispatcher) {
     log.debug("action execute called for cancelItem");
     String uuid = (String)eclipseContext.get("TOOLBAR_UUID");
-    EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.cancelItem");
+    MPerspective perspective = eclipseContext.get(MPerspective.class);
+    EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.cancelItem");
     evnt.addItem(EventDispatcherDataTag.BUTTON_ID, DialogActionEnum.DIALOG_ACTION_CANCEL);
     eventDispatcher.sendEvent(evnt);
   }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DatabaseInfoAction.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DatabaseInfoAction.java
index c4c6686..43f8c74 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DatabaseInfoAction.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DatabaseInfoAction.java
@@ -54,8 +54,10 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.osbp.core.api.persistence.IPersistenceService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.eventbroker.EventBrokerMsg;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.runtime.common.annotations.IsDirty;
@@ -73,6 +75,8 @@
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
 import org.eclipse.osbp.utils.vaadin.MDXDialog;
 import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService;
 import org.eclipse.osbp.xtext.action.ChartActionEnum;
@@ -94,6 +98,8 @@
 public class DatabaseInfoAction {
   private static Logger log = org.slf4j.LoggerFactory.getLogger("action");
   
+  private static Map<String, Boolean> isGranted = new HashMap();
+  
   private MUIElement activePart;
   
   public MUIElement getActivePart() {
@@ -114,7 +120,8 @@
   public void execute(final IEclipseContext eclipseContext, final IEventDispatcher eventDispatcher) {
     log.debug("action execute called for databaseInfo");
     String uuid = (String)eclipseContext.get("TOOLBAR_UUID");
-    EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.databaseInfo");
+    MPerspective perspective = eclipseContext.get(MPerspective.class);
+    EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.databaseInfo");
     evnt.addItem(EventDispatcherDataTag.BUTTON_ID, UIActionEnum.DATABASE_INFO);
     eventDispatcher.sendEvent(evnt);
   }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DeleteItemAction.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DeleteItemAction.java
index 50116f4..d018cf5 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DeleteItemAction.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DeleteItemAction.java
@@ -54,8 +54,10 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.osbp.core.api.persistence.IPersistenceService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.eventbroker.EventBrokerMsg;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.runtime.common.annotations.IsDirty;
@@ -73,6 +75,9 @@
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.utils.vaadin.MDXDialog;
 import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService;
 import org.eclipse.osbp.xtext.action.ChartActionEnum;
@@ -94,6 +99,8 @@
 public class DeleteItemAction {
   private static Logger log = org.slf4j.LoggerFactory.getLogger("action");
   
+  private static Map<String, Boolean> isGranted = new HashMap();
+  
   private MUIElement activePart;
   
   public MUIElement getActivePart() {
@@ -101,21 +108,34 @@
   }
   
   @CanExecute
-  public boolean canExecute(final IEclipseContext eclipseContext) {
+  public boolean canExecute(final IEclipseContext eclipseContext, final IUserAccessService userAccessService, final IViewContext viewContext) {
     IE4Dialog dialog = eclipseContext.get(IE4Dialog.class);
     if (dialog == null) {
     	return false;
     }
+    Object dto = viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
     boolean result1 = !(boolean) ContextInjectionFactory.invoke(dialog, IsNew.class, eclipseContext);
     boolean result2 = (boolean) ContextInjectionFactory.invoke(dialog, IsPositioned.class, eclipseContext);
-    return result1 && result2;
+    boolean result3 = true;
+    if( result1 && result2 ) {
+    	String clazzName = dto.getClass().getName();
+    	String grantKey = clazzName + "###DELETEABLE";
+    	if( isGranted.containsKey(grantKey)) {
+    		result3=isGranted.get(grantKey);
+    	} else {
+    		result3=userAccessService.isGranted(Group.DTO, Action.DELETEABLE, clazzName);
+    		isGranted.put(grantKey,result3);
+    	}
+    }
+    return result1 && result2 && result3;
   }
   
   @Execute
   public void execute(final IEclipseContext eclipseContext, final IEventDispatcher eventDispatcher) {
     log.debug("action execute called for deleteItem");
     String uuid = (String)eclipseContext.get("TOOLBAR_UUID");
-    EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.deleteItem");
+    MPerspective perspective = eclipseContext.get(MPerspective.class);
+    EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.deleteItem");
     evnt.addItem(EventDispatcherDataTag.BUTTON_ID, DialogActionEnum.DIALOG_ACTION_DELETE);
     eventDispatcher.sendEvent(evnt);
   }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DialogToolbar.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DialogToolbar.java
index ad12d62..2e1989e 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DialogToolbar.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/DialogToolbar.java
@@ -52,9 +52,11 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.e4.ui.workbench.IPresentationEngine;
 import org.eclipse.osbp.core.api.persistence.IPersistenceService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.eventbroker.EventBrokerMsg;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.runtime.common.annotations.IsDirty;
@@ -71,6 +73,8 @@
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
 import org.eclipse.osbp.utils.vaadin.MDXDialog;
 import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService;
 import org.eclipse.osbp.xtext.action.ChartActionEnum;
@@ -102,6 +106,8 @@
   
   private MToolBar toolbar;
   
+  private String stateLabelUUID;
+  
   @Override
   public void createToolbar(final IEclipseContext eclipseContext, final IPresentationEngine renderingEngine, final IThemeResourceService themeResourceService) {
     MenuFactoryImpl factory = MenuFactoryImpl.eINSTANCE;
@@ -217,6 +223,11 @@
     return toolbar;
   }
   
+  @Override
+  public String getStateLabelUUID() {
+    return stateLabelUUID;
+  }
+  
   private void setCommand(final String commandName, final MHandledToolItem toolItem, final MApplication application) {
     for(MCommand command:application.getCommands()) {
     	if(command.getCommandName().equals(commandName)) {
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/NewItemAction.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/NewItemAction.java
index e4c10c2..edffea2 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/NewItemAction.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/NewItemAction.java
@@ -54,8 +54,10 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.osbp.core.api.persistence.IPersistenceService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.eventbroker.EventBrokerMsg;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.runtime.common.annotations.IsDirty;
@@ -73,6 +75,9 @@
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.utils.vaadin.MDXDialog;
 import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService;
 import org.eclipse.osbp.xtext.action.ChartActionEnum;
@@ -94,6 +99,8 @@
 public class NewItemAction {
   private static Logger log = org.slf4j.LoggerFactory.getLogger("action");
   
+  private static Map<String, Boolean> isGranted = new HashMap();
+  
   private MUIElement activePart;
   
   public MUIElement getActivePart() {
@@ -101,20 +108,33 @@
   }
   
   @CanExecute
-  public boolean canExecute(final IEclipseContext eclipseContext) {
+  public boolean canExecute(final IEclipseContext eclipseContext, final IUserAccessService userAccessService, final IViewContext viewContext) {
     IE4Dialog dialog = eclipseContext.get(IE4Dialog.class);
     if (dialog == null) {
     	return false;
     }
+    Object dto = viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
     boolean result = !(boolean) ContextInjectionFactory.invoke(dialog, IsDirty.class, eclipseContext);
-    return result;
+    boolean result2 = true;
+    if( result ) {
+    	String clazzName = dto.getClass().getName();
+    	String grantKey = clazzName + "###CREATABLE";
+    	if( isGranted.containsKey(grantKey)) {
+    		result2=isGranted.get(grantKey);
+    	} else {
+    		result2=userAccessService.isGranted(Group.DTO, Action.CREATABLE, clazzName);
+    		isGranted.put(grantKey,result2);
+    	}
+    }
+    return result && result2;
   }
   
   @Execute
   public void execute(final IEclipseContext eclipseContext, final IEventDispatcher eventDispatcher) {
     log.debug("action execute called for newItem");
     String uuid = (String)eclipseContext.get("TOOLBAR_UUID");
-    EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.newItem");
+    MPerspective perspective = eclipseContext.get(MPerspective.class);
+    EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.newItem");
     evnt.addItem(EventDispatcherDataTag.BUTTON_ID, DialogActionEnum.DIALOG_ACTION_NEW);
     eventDispatcher.sendEvent(evnt);
   }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveAndNewAction.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveAndNewAction.java
index 6524083..9462a2c 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveAndNewAction.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveAndNewAction.java
@@ -54,8 +54,10 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.osbp.core.api.persistence.IPersistenceService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.eventbroker.EventBrokerMsg;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.runtime.common.annotations.IsDirty;
@@ -73,6 +75,9 @@
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.utils.vaadin.MDXDialog;
 import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService;
 import org.eclipse.osbp.xtext.action.ChartActionEnum;
@@ -94,6 +99,8 @@
 public class SaveAndNewAction {
   private static Logger log = org.slf4j.LoggerFactory.getLogger("action");
   
+  private static Map<String, Boolean> isGranted = new HashMap();
+  
   private MUIElement activePart;
   
   public MUIElement getActivePart() {
@@ -101,21 +108,44 @@
   }
   
   @CanExecute
-  public boolean canExecute(final IEclipseContext eclipseContext) {
+  public boolean canExecute(final IEclipseContext eclipseContext, final IUserAccessService userAccessService, final IViewContext viewContext) {
     IE4Dialog dialog = eclipseContext.get(IE4Dialog.class);
     if (dialog == null) {
     	return false;
     }
+    Object dto = viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
     boolean result1 = (boolean) ContextInjectionFactory.invoke(dialog, IsValid.class, eclipseContext);
     boolean result2 = (boolean) ContextInjectionFactory.invoke(dialog, IsDirty.class, eclipseContext);
-    return result1 && result2;
+    boolean result3 = true;
+    boolean result4 = true;
+    if( result1 && result2) {
+    	String clazzName = dto.getClass().getName();
+    	String grantKey = clazzName + "###UPDATABLE";
+    	if( isGranted.containsKey(grantKey)) {
+    		result3=isGranted.get(grantKey);
+    	} else {
+    		result3 = userAccessService.isGranted(Group.DTO, Action.UPDATABLE, clazzName);
+    		isGranted.put(grantKey,result3);
+    	}
+    	if( result3 ) {
+    		grantKey = clazzName + "###CREATABLE";
+    		if( isGranted.containsKey(grantKey)) {
+    			result4=isGranted.get(grantKey);
+    		} else {
+    			result4 = userAccessService.isGranted(Group.DTO, Action.CREATABLE, clazzName);
+    			isGranted.put(grantKey,result4);
+    		}
+    	}
+    }
+    return result1 && result2 && result3 && result4;
   }
   
   @Execute
   public void execute(final IEclipseContext eclipseContext, final IEventDispatcher eventDispatcher) {
     log.debug("action execute called for saveAndNew");
     String uuid = (String)eclipseContext.get("TOOLBAR_UUID");
-    EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.saveAndNew");
+    MPerspective perspective = eclipseContext.get(MPerspective.class);
+    EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.saveAndNew");
     evnt.addItem(EventDispatcherDataTag.BUTTON_ID, DialogActionEnum.DIALOG_ACTION_SAVE_AND_NEW);
     eventDispatcher.sendEvent(evnt);
   }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveAsNewAction.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveAsNewAction.java
index 7c69c8f..4c5d424 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveAsNewAction.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveAsNewAction.java
@@ -54,8 +54,10 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.osbp.core.api.persistence.IPersistenceService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.eventbroker.EventBrokerMsg;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.runtime.common.annotations.IsDirty;
@@ -73,6 +75,9 @@
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.utils.vaadin.MDXDialog;
 import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService;
 import org.eclipse.osbp.xtext.action.ChartActionEnum;
@@ -94,6 +99,8 @@
 public class SaveAsNewAction {
   private static Logger log = org.slf4j.LoggerFactory.getLogger("action");
   
+  private static Map<String, Boolean> isGranted = new HashMap();
+  
   private MUIElement activePart;
   
   public MUIElement getActivePart() {
@@ -101,21 +108,34 @@
   }
   
   @CanExecute
-  public boolean canExecute(final IEclipseContext eclipseContext) {
+  public boolean canExecute(final IEclipseContext eclipseContext, final IUserAccessService userAccessService, final IViewContext viewContext) {
     IE4Dialog dialog = eclipseContext.get(IE4Dialog.class);
     if (dialog == null) {
     	return false;
     }
+    Object dto = viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
     boolean result1 = (boolean) ContextInjectionFactory.invoke(dialog, IsValid.class, eclipseContext);
     boolean result2 = (boolean) ContextInjectionFactory.invoke(dialog, IsDirty.class, eclipseContext);
-    return result1 && result2;
+    boolean result3 = true;
+    if( result1 && result2 ) {
+    	String clazzName = dto.getClass().getName();
+    	String grantKey = clazzName + "###CREATABLE";
+    	if( isGranted.containsKey(grantKey)) {
+    		result3=isGranted.get(grantKey);
+    	} else {
+    		result3 = userAccessService.isGranted(Group.DTO, Action.CREATABLE, clazzName);
+    		isGranted.put(grantKey,result3);
+    	}
+    }
+    return result1 && result2 && result3;
   }
   
   @Execute
   public void execute(final IEclipseContext eclipseContext, final IEventDispatcher eventDispatcher) {
     log.debug("action execute called for saveAsNew");
     String uuid = (String)eclipseContext.get("TOOLBAR_UUID");
-    EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.saveAsNew");
+    MPerspective perspective = eclipseContext.get(MPerspective.class);
+    EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.saveAsNew");
     evnt.addItem(EventDispatcherDataTag.BUTTON_ID, DialogActionEnum.DIALOG_ACTION_SAVE_AS_NEW);
     eventDispatcher.sendEvent(evnt);
   }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveItemAction.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveItemAction.java
index 5f680c3..f60ca05 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveItemAction.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/actions/SaveItemAction.java
@@ -54,8 +54,10 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.osbp.core.api.persistence.IPersistenceService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.eventbroker.EventBrokerMsg;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.runtime.common.annotations.IsDirty;
@@ -73,6 +75,9 @@
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.utils.vaadin.MDXDialog;
 import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService;
 import org.eclipse.osbp.xtext.action.ChartActionEnum;
@@ -94,6 +99,8 @@
 public class SaveItemAction {
   private static Logger log = org.slf4j.LoggerFactory.getLogger("action");
   
+  private static Map<String, Boolean> isGranted = new HashMap();
+  
   private MUIElement activePart;
   
   public MUIElement getActivePart() {
@@ -101,21 +108,34 @@
   }
   
   @CanExecute
-  public boolean canExecute(final IEclipseContext eclipseContext) {
+  public boolean canExecute(final IEclipseContext eclipseContext, final IUserAccessService userAccessService, final IViewContext viewContext) {
     IE4Dialog dialog = eclipseContext.get(IE4Dialog.class);
     if (dialog == null) {
     	return false;
     }
+    Object dto = viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
     boolean result1 = (boolean) ContextInjectionFactory.invoke(dialog, IsValid.class, eclipseContext);
     boolean result2 = (boolean) ContextInjectionFactory.invoke(dialog, IsDirty.class, eclipseContext);
-    return result1 && result2;
+    boolean result3 = true;
+    if( result1 && result2) {
+    	String clazzName = dto.getClass().getName();
+    	String grantKey = clazzName + "###UPDATABLE";
+    	if( isGranted.containsKey(grantKey)) {
+    		result3=isGranted.get(grantKey);
+    	} else {
+    		result3 = userAccessService.isGranted(Group.DTO, Action.UPDATABLE, clazzName);
+    		isGranted.put(grantKey,result3);
+    	}
+    }
+    return result1 && result2 && result3;
   }
   
   @Execute
   public void execute(final IEclipseContext eclipseContext, final IEventDispatcher eventDispatcher) {
     log.debug("action execute called for saveItem");
     String uuid = (String)eclipseContext.get("TOOLBAR_UUID");
-    EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.saveItem");
+    MPerspective perspective = eclipseContext.get(MPerspective.class);
+    EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.ACTION, uuid, "org.eclipse.osbp.authentication.account.actions.saveItem");
     evnt.addItem(EventDispatcherDataTag.BUTTON_ID, DialogActionEnum.DIALOG_ACTION_SAVE);
     eventDispatcher.sendEvent(evnt);
   }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/DatamartsServiceBinder.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/DatamartsServiceBinder.java
index 18aca65..563fb4b 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/DatamartsServiceBinder.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/DatamartsServiceBinder.java
@@ -32,11 +32,12 @@
 import org.eclipse.osbp.runtime.common.i18n.ITranslator;
 import org.eclipse.osbp.ui.api.datamart.DatamartData;
 import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
+import org.eclipse.osbp.ui.api.datamart.IDataMart;
 import org.eclipse.osbp.ui.api.datamart.IDataMart.EType;
+import org.eclipse.osbp.ui.api.date.SimpleDateFormatter;
 import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
 import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.user.User;
-import org.eclipse.osbp.utils.vaadin.SimpleDateFormatter;
 import org.eclipse.osbp.xtext.datamart.common.DatamartDtoMapper;
 import org.eclipse.osbp.xtext.datamart.common.olap.DerivedAxis;
 import org.eclipse.osbp.xtext.datamart.common.olap.DerivedMember;
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/DatamartsTestClass.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/DatamartsTestClass.java
index 50fb5e8..db5615e 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/DatamartsTestClass.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/DatamartsTestClass.java
@@ -30,9 +30,10 @@
 import org.eclipse.osbp.runtime.common.i18n.ITranslator;
 import org.eclipse.osbp.ui.api.datamart.DatamartData;
 import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
+import org.eclipse.osbp.ui.api.datamart.IDataMart;
 import org.eclipse.osbp.ui.api.datamart.IDataMart.EType;
+import org.eclipse.osbp.ui.api.date.SimpleDateFormatter;
 import org.eclipse.osbp.user.User;
-import org.eclipse.osbp.utils.vaadin.SimpleDateFormatter;
 import org.eclipse.osbp.xtext.datamart.common.DatamartDtoMapper;
 import org.eclipse.osbp.xtext.datamart.common.olap.DerivedAxis;
 import org.eclipse.osbp.xtext.datamart.common.olap.DerivedMember;
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/UserAccountDatamart.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/UserAccountDatamart.java
index 0d8ca44..9349b87 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/UserAccountDatamart.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/datamarts/UserAccountDatamart.java
@@ -24,9 +24,9 @@
 import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
 import org.eclipse.osbp.ui.api.datamart.DatamartPrimary;
 import org.eclipse.osbp.ui.api.datamart.IDataMart;
+import org.eclipse.osbp.ui.api.date.SimpleDateFormatter;
 import org.eclipse.osbp.ui.api.user.IUser;
 import org.eclipse.osbp.user.User;
-import org.eclipse.osbp.utils.vaadin.SimpleDateFormatter;
 import org.eclipse.osbp.xtext.datamart.common.AEntityDatamart;
 import org.eclipse.osbp.xtext.datamart.common.DatamartDtoMapper;
 import org.eclipse.osbp.xtext.datamart.common.olap.DerivedAxis;
@@ -48,7 +48,7 @@
   
   private Map<String, Map<String, String>> dateFilterAttributeProperties = new HashMap<String, Map<String, String>>();
   
-  private String statement = "select UserAccount.USER_NAME as \"userName\",UserAccount.EMAIL as \"email\",UserAccount.NOT_REGISTERED as \"notRegistered\",UserAccount.POSITION as \"position\",UserAccount.PROFILEIMAGE as \"profileimage\",UserAccount.id as \"__UserAccount__ID__\" from USER_ACCOUNT UserAccount";
+  private String statement = "select UserAccount.USER_NAME as \"userName\",UserAccount.EMAIL as \"email\",UserAccount.POSITION as \"position\",UserAccount.PROFILEIMAGE as \"profileimage\",UserAccount.NOT_REGISTERED as \"notRegistered\",UserAccount.id as \"__UserAccount__ID__\" from USER_ACCOUNT UserAccount";
   
   private DatamartDtoMapper datamartDtoMapper = new DatamartDtoMapper()
     .add("org.eclipse.osbp.authentication.account.dtos.UserAccountDto", "id", EType.STRING, "__UserAccount__ID__");
@@ -74,6 +74,9 @@
     	put("profileimage","org.eclipse.osbp.authentication.account.entities.UserAccount.profileimage");
     }};
   
+  private Map<String, IDataMart.AttributeVisibility> hiddenMap = new HashMap<String,AttributeVisibility>() {{
+    }};
+  
   private Map<String, IDataMart.EType> idMap = new HashMap<String,EType>() {{
     			put("__UserAccount__ID__", EType.STRING);
     }};
@@ -112,6 +115,10 @@
     return this.aliasMap;
   }
   
+  public Map<String, IDataMart.AttributeVisibility> getHiddenMap() {
+    return this.hiddenMap;
+  }
+  
   public Map<String, String> getTypesProp() {
     return this.typesProp;
   }
@@ -126,7 +133,7 @@
   
   protected ArrayList<DatamartFilter> initializeFilterMap() {
     return new ArrayList<DatamartFilter>() {{
-    add(new DatamartFilter(org.eclipse.osbp.authentication.account.datamarts.DatamartsServiceBinder.getDSLMetadataService(), user, DatamartFilter.FilterType.BY_ID, "UserAccount.id",""));
+    add(new DatamartFilter(org.eclipse.osbp.authentication.account.datamarts.DatamartsServiceBinder.getDSLMetadataService(), user, DatamartFilter.FilterType.BY_ID, "UserAccount.id","", false));
     }};
     
   }
@@ -194,9 +201,7 @@
     if (connection != null) {
     	for (DatamartFilter filter : getFilters()) {
     		if((DatamartFilter.FilterType.BY_ID != filter.getType()) && (DatamartFilter.FilterType.BETWEEN != filter.getType()) && (DatamartFilter.FilterType.BETWEEN_DATE != filter.getType())) {
-    			ResultSet rs = null;
-    			try {
-    				rs = connection.createStatement().executeQuery(getVendorSql(filter));
+    			try (ResultSet rs = connection.createStatement().executeQuery(getVendorSql(filter))){
     				if (rs != null) {
     					while (rs.next()) {
     					 		int type = rs.getMetaData().getColumnType(1);
@@ -205,9 +210,9 @@
     					 			    Date date = rs.getDate(1);
     					 			    if (date != null) {
     					 					if (user == null) {
-    					 						filter.addItem(date.toString(), getVendorToDateSQLMethod()+"('"+date.toString().replace(".0","")+"','YYYY-MM-DD HH24:MI:SS')", false);
+    					 						filter.addItem(date.toString(), vendorConvertToDateSQL( date ), false);
     					 					} else {
-    					 						filter.addItem(SimpleDateFormatter.getFormat("LONGDATE", user.getLocale()).format(date), getVendorToDateSQLMethod()+"('"+date.toString().replace(".0","")+"','YYYY-MM-DD HH24:MI:SS')", false);
+    					 						filter.addItem(SimpleDateFormatter.getFormat("LONGDATE", user.getLocale()).format(date), vendorConvertToDateSQL( date ), false);
     					 					}
     					 				}
     					 				break;
@@ -215,9 +220,9 @@
     					 				Timestamp timestamp = rs.getTimestamp(1);
     					 				if (timestamp != null) {
     					 					if (user == null) {
-    					 						filter.addItem(timestamp.toString(), getVendorToTimestampSQLMethod()+"('"+timestamp.toString().replace(".0","")+"','YYYY-MM-DD HH24:MI:SS')", false);
+    					 						filter.addItem(timestamp.toString(), vendorConvertToTimestampSQL( timestamp ), false);
     					 					} else {
-    					 						filter.addItem(SimpleDateFormatter.getFormat("LONGDATE", user.getLocale()).format(timestamp), getVendorToTimestampSQLMethod()+"('"+timestamp.toString().replace(".0","")+"','YYYY-MM-DD HH24:MI:SS')", false);
+    					 						filter.addItem(SimpleDateFormatter.getFormat("LONGDATE", user.getLocale()).format(timestamp), vendorConvertToTimestampSQL( timestamp ), false);
     					 					}
     					 				}
     					 				break;
@@ -250,10 +255,6 @@
     				}
     			} catch (SQLException e) {
     				log.error("{}", e);
-    			} finally {
-    				try {
-    					rs.close();
-    				} catch (java.sql.SQLException e) {}
     			}
     		}
     	}
@@ -295,52 +296,32 @@
   }
   
   public DerivedCellSet getResults(final Class operativeDtoClass, final List<IDto> operativeDtos) {
-    ResultSet rs = null;
     SqlCellSet cellSet = null;
     java.sql.ResultSetMetaData metaData = null;
-    // --- if filler text is enabled ---
-    if	(fFillerTextEnabled) {
-    	// --- try to generate filler text ---
-    	rs = generateFillerTextResultSet();
-    }
-    // --- if no result set is generated by now ---
     connect();
-    if (rs == null) {
-    	if (connection != null) {
-    		String query = applyFilters();
-    		if (query.length()>0) {
-    			try {
-    				rs = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY).executeQuery(query);
-    			} catch (SQLException e) {
-    				log.error("Query: "+query);
-    				log.error("{}", e);
-    			}
+    if (connection != null) {
+    	String query = applyFilters();
+    	if (query.length()>0) {
+    		try (ResultSet rs = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY).executeQuery(query)){
+    			cellSet = new SqlCellSet(rs, getAxisMap(), getIdMap(), getAliasMap(), getHiddenMap(), datamartDtoMapper, operativeDtoClass, operativeDtos, getPrimaryList(), org.eclipse.osbp.authentication.account.datamarts.DatamartsServiceBinder.getUserAccessService());
+    			registerFirstLine(rs, user);
+    			metaData = rs.getMetaData();
+    			disconnect();
+    			return (new DerivedCellSet(cellSet,
+    				metaData,
+    				org.eclipse.osbp.authentication.account.datamarts.DatamartsServiceBinder.getDSLMetadataService(), user));
+    		}
+    		catch (java.sql.SQLException e) {
+    			log.error("Statement: {}  error {}", query, e);
     		}
     	}
     }
-    if (rs != null) {
-    	try {
-    		cellSet = new SqlCellSet(rs, getAxisMap(), getIdMap(), getAliasMap(), datamartDtoMapper, operativeDtoClass, operativeDtos, getPrimaryList(), org.eclipse.osbp.authentication.account.datamarts.DatamartsServiceBinder.getUserAccessService());
-    		registerFirstLine(rs, user);
-    		metaData = rs.getMetaData();
-    		rs.close();
-    	}
-    	catch (java.sql.SQLException e) {
-    		try {
-    			log.error("Statement: "+rs.getStatement().toString());
-    		} catch (SQLException e1) {}
-    		log.error("{}", e);
-    	}
-    	return (new DerivedCellSet(cellSet,
-    		metaData,
-    		org.eclipse.osbp.authentication.account.datamarts.DatamartsServiceBinder.getDSLMetadataService(), user));
-    }
     disconnect();
     return null;
   }
   
   public void registerFirstLine(final ResultSet rs, final IUser user) throws SQLException {
-    if (rs != null && rs.first()) {
+    if (rs != null && !rs.isClosed() && rs.first()) {
     	for (int column = 1; column <= rs.getMetaData().getColumnCount(); column++) {
     		int type = rs.getMetaData().getColumnType(column);
     		switch (type) {
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/DialogsServiceBinder.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/DialogsServiceBinder.java
index 1b2b1f8..97a8efd 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/DialogsServiceBinder.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/DialogsServiceBinder.java
@@ -60,7 +60,6 @@
 import org.eclipse.osbp.ui.api.user.IUser;
 import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.utils.vaadin.SelectDialog;
-import org.eclipse.osbp.vaaclipse.addons.softwarefactory.handler.StrategyHandler;
 import org.eclipse.osbp.xtext.dialogdsl.common.AbstractMobileView;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.service.component.annotations.Component;
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAccountDialogEmbedded.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAccountDialogEmbedded.java
index 34602b1..19fdc4d 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAccountDialogEmbedded.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAccountDialogEmbedded.java
@@ -60,7 +60,6 @@
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
 import org.eclipse.osbp.ui.api.user.IUser;
 import org.eclipse.osbp.utils.vaadin.SelectDialog;
-import org.eclipse.osbp.vaaclipse.addons.softwarefactory.handler.StrategyHandler;
 import org.eclipse.osbp.xtext.action.common.IToolbarAction;
 import org.eclipse.osbp.xtext.dialogdsl.common.AbstractEmbeddedDialog;
 import org.eclipse.osbp.xtext.dialogdsl.common.AbstractMobileView;
@@ -121,11 +120,19 @@
   
   @Override
   public String getBindingPropertyName() {
-    return "";
+    return "user_account";
   }
   
   @Override
   public int getNumColumns() {
     return 0;
   }
+  
+  public String getInitializationGroup() {
+    return null;
+  }
+  
+  public String getInitializationMethod() {
+    return null;
+  }
 }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAccountDialogEmbeddedContextFunction.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAccountDialogEmbeddedContextFunction.java
index 4f09fec..75eadae 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAccountDialogEmbeddedContextFunction.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAccountDialogEmbeddedContextFunction.java
@@ -59,7 +59,6 @@
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
 import org.eclipse.osbp.ui.api.user.IUser;
 import org.eclipse.osbp.utils.vaadin.SelectDialog;
-import org.eclipse.osbp.vaaclipse.addons.softwarefactory.handler.StrategyHandler;
 import org.eclipse.osbp.xtext.dialogdsl.common.AbstractMobileView;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.service.component.annotations.Component;
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAdministrationDialog.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAdministrationDialog.java
index 10d17ee..220ccd5 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAdministrationDialog.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/dialogs/UserAdministrationDialog.java
@@ -63,7 +63,6 @@
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
 import org.eclipse.osbp.ui.api.user.IUser;
 import org.eclipse.osbp.utils.vaadin.SelectDialog;
-import org.eclipse.osbp.vaaclipse.addons.softwarefactory.handler.StrategyHandler;
 import org.eclipse.osbp.xtext.action.common.IToolbarAction;
 import org.eclipse.osbp.xtext.dialogdsl.common.AbstractECViewDialog;
 import org.eclipse.osbp.xtext.dialogdsl.common.AbstractMobileView;
@@ -125,11 +124,19 @@
   
   @Override
   public String getBindingPropertyName() {
-    return "";
+    return "user_administration";
   }
   
   @Override
   public int getNumColumns() {
     return 0;
   }
+  
+  public String getInitializationGroup() {
+    return null;
+  }
+  
+  public String getInitializationMethod() {
+    return null;
+  }
 }
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/tables/TablesServiceBinder.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/tables/TablesServiceBinder.java
new file mode 100644
index 0000000..5d72547
--- /dev/null
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/tables/TablesServiceBinder.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2011, 2017 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ */
+package org.eclipse.osbp.authentication.account.tables;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.server.Page;
+import com.vaadin.server.Page.Styles;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CustomTable;
+import com.vaadin.ui.CustomTable.Align;
+import com.vaadin.ui.CustomTable.ColumnCollapseEvent;
+import com.vaadin.ui.CustomTable.ColumnCollapseListener;
+import com.vaadin.ui.CustomTable.ColumnReorderEvent;
+import com.vaadin.ui.CustomTable.ColumnReorderListener;
+import com.vaadin.ui.CustomTable.ColumnResizeEvent;
+import com.vaadin.ui.CustomTable.ColumnResizeListener;
+import com.vaadin.ui.CustomTable.RowHeaderMode;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.Notification.Type;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
+import com.vaadin.ui.UI;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.UUID;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import org.eclipse.bpmn2.Task;
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.di.extensions.EventUtils;
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.osbp.bpm.api.BPMOperation;
+import org.eclipse.osbp.bpm.api.BPMTaskEventType;
+import org.eclipse.osbp.bpm.api.BPMTaskSummary;
+import org.eclipse.osbp.bpm.api.BPMTaskUserEvent;
+import org.eclipse.osbp.bpm.api.IBlipBPMConstants;
+import org.eclipse.osbp.bpm.api.IBlipBPMFunctionProvider;
+import org.eclipse.osbp.bpm.api.IBlipBPMStartInfo;
+import org.eclipse.osbp.bpm.api.IBlipBPMWorkloadModifiableItem;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.dsl.dto.lib.impl.DtoServiceAccess;
+import org.eclipse.osbp.eventbroker.EventBrokerMsg;
+import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherCommand;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag;
+import org.eclipse.osbp.runtime.common.event.IDualData;
+import org.eclipse.osbp.runtime.common.filter.IDTOServiceWithMutablePersistence;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchServiceFactory;
+import org.eclipse.osbp.ui.api.contextfunction.IViewEmbeddedProvider;
+import org.eclipse.osbp.ui.api.customfields.IBlobService;
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
+import org.eclipse.osbp.ui.api.datamart.DatamartPrimary;
+import org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator.FilterChangeListener;
+import org.eclipse.osbp.ui.api.e4.IE4Table;
+import org.eclipse.osbp.ui.api.perspective.IPerspectiveProvider;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
+import org.eclipse.osbp.utils.constants.ExtendedDate;
+import org.eclipse.osbp.utils.vaadin.SelectUserWindow;
+import org.eclipse.osbp.utils.vaadin.ViewLayoutManager;
+import org.eclipse.osbp.vaaclipse.common.ecview.api.IECViewSessionHelper;
+import org.eclipse.osbp.xtext.action.SelectWorkloadActionEnum;
+import org.eclipse.osbp.xtext.blip.BlipItem;
+import org.eclipse.osbp.xtext.datamart.common.AEntityDatamart;
+import org.eclipse.osbp.xtext.datamart.common.DatamartFilterGenerator;
+import org.eclipse.osbp.xtext.datamart.common.olap.DerivedAxis;
+import org.eclipse.osbp.xtext.datamart.common.olap.DerivedHierarchy;
+import org.eclipse.osbp.xtext.datamart.common.olap.DerivedLevel;
+import org.eclipse.osbp.xtext.datamart.common.olap.DerivedMember;
+import org.eclipse.osbp.xtext.datamart.common.olap.DerivedPosition;
+import org.eclipse.osbp.xtext.datamart.common.sql.OperativeDtoContainer;
+import org.eclipse.osbp.xtext.table.common.BeanFilterTable;
+import org.eclipse.osbp.xtext.table.common.CellSetFilterTable;
+import org.eclipse.osbp.xtext.table.common.CellSetIndexedContainer;
+import org.eclipse.osbp.xtext.table.common.CellSetPagedFilterTable;
+import org.eclipse.osbp.xtext.table.common.CheckboxSelectionCellSetFilterTable;
+import org.eclipse.osbp.xtext.table.common.TableFilterDecorator;
+import org.eclipse.osbp.xtext.table.common.TableFilterGenerator;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventHandler;
+import org.slf4j.Logger;
+import org.vaadin.hene.popupbutton.PopupButton;
+
+@SuppressWarnings("serial")
+@Component
+public class TablesServiceBinder {
+  private static Logger log = org.slf4j.LoggerFactory.getLogger("servicebinder");
+  
+  private static IUserAccessService userAccessService;
+  
+  public static IUserAccessService getUserAccessService() {
+    return userAccessService;
+  }
+  
+  @Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.STATIC)
+  public synchronized void bindUserAccessMethod(final IUserAccessService userAccessService) {
+    TablesServiceBinder.userAccessService = userAccessService;
+    log.debug("Datamart UserAccessService bound");
+  }
+  
+  public synchronized void unbindUserAccessMethod(final IUserAccessService userAccessService) {
+    TablesServiceBinder.userAccessService = null;
+    log.debug("Datamart UserAccessService unbound");
+  }
+}
diff --git a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/tables/UserAdministrationTable.java b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/tables/UserAdministrationTable.java
index 24ae69e..6557d19 100644
--- a/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/tables/UserAdministrationTable.java
+++ b/org.eclipse.osbp.authentication.ui/src-gen/org/eclipse/osbp/authentication/account/tables/UserAdministrationTable.java
@@ -53,7 +53,7 @@
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
-import org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveImpl;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.workbench.IPresentationEngine;
 import org.eclipse.osbp.authentication.account.datamarts.UserAccountDatamart;
 import org.eclipse.osbp.bpm.api.BPMOperation;
@@ -85,11 +85,11 @@
 import org.eclipse.osbp.ui.api.e4.IE4Table;
 import org.eclipse.osbp.ui.api.layout.IViewLayoutManager;
 import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
+import org.eclipse.osbp.ui.api.perspective.IPerspectiveProvider;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
 import org.eclipse.osbp.ui.api.user.IUser;
 import org.eclipse.osbp.utils.constants.ExtendedDate;
-import org.eclipse.osbp.utils.vaadin.PropertyLookup;
 import org.eclipse.osbp.utils.vaadin.SelectUserWindow;
 import org.eclipse.osbp.utils.vaadin.ViewLayoutManager;
 import org.eclipse.osbp.vaaclipse.common.ecview.api.IECViewSessionHelper;
@@ -109,6 +109,7 @@
 import org.eclipse.osbp.xtext.table.common.CellSetIndexedContainer;
 import org.eclipse.osbp.xtext.table.common.CellSetPagedFilterTable;
 import org.eclipse.osbp.xtext.table.common.CheckboxSelectionCellSetFilterTable;
+import org.eclipse.osbp.xtext.table.common.PropertyLookup;
 import org.eclipse.osbp.xtext.table.common.TableFilterDecorator;
 import org.eclipse.osbp.xtext.table.common.TableFilterGenerator;
 import org.osgi.service.event.Event;
@@ -243,42 +244,42 @@
   
   public void createComponents() {
     if (renderAllowed()){
-    // get the results
-    final DerivedCellSet cellSet = getCellSet();
-    if (cellSet == null) {
-    	promptSecurityMessage(dslMetadataService.translate(user.getLocale().toLanguageTag(), "securityMessage"), layoutManager.getDataArea());
-    	return;
-    } else {
-    	layoutManager.getDataArea().removeAllComponents();
-    }
-    getCoordinateSystem().clear();
-    tables.clear();
-    // generate a new result component
-    if (cellSet != null) {
-    	// create a multidimensional coordinate system against the cellSet
-    	for	(int axis = 0; axis < cellSet.getAxes().size(); axis++) {
-    		getCoordinateSystem().add(0);
-    	}
-    	// remove any previous component
-    	if	(dataComponent != null) {
-    		layoutManager.getDataArea().removeComponent(dataComponent);
-    		dataComponent = null;
-    	}
-    	if (cellSet.getAxes().size() < 2) {
-    		log.error("at least 2 axes from referenced datamart UserAccount are needed to render UserAdministration");
+    	// get the results
+    	final DerivedCellSet cellSet = getCellSet();
+    	if (cellSet == null) {
+    		promptSecurityMessage(dslMetadataService.translate(user.getLocale().toLanguageTag(), "securityMessage"), layoutManager.getDataArea());
+    		return;
     	} else {
-    		dataComponent = createTabSheet(cellSet, cellSet.getAxes().size());
-    		if	(dataComponent != null) {
-    			dataComponent.setSizeFull();
-    			dataComponent.setId("dataComponent");
-    			layoutManager.getDataArea().addComponent(dataComponent);
-    			layoutManager.getDataArea().setExpandRatio(dataComponent, 1);
-    		}
+    		layoutManager.getDataArea().removeAllComponents();
     	}
-    } 
-    else {
-    	log.error("referenced datamart UserAccount generates no results");
-    }
+    	getCoordinateSystem().clear();
+    	tables.clear();
+    	// generate a new result component
+    	if (cellSet != null) {
+    		// create a multidimensional coordinate system against the cellSet
+    		for	(int axis = 0; axis < cellSet.getAxes().size(); axis++) {
+    			getCoordinateSystem().add(0);
+    		}
+    		// remove any previous component
+    		if	(dataComponent != null) {
+    			layoutManager.getDataArea().removeComponent(dataComponent);
+    			dataComponent = null;
+    		}
+    		if (cellSet.getAxes().size() < 2) {
+    			log.error("at least 2 axes from referenced datamart UserAccount are needed to render UserAdministration");
+    		} else {
+    			dataComponent = createTabSheet(cellSet, cellSet.getAxes().size());
+    			if	(dataComponent != null) {
+    				dataComponent.setSizeFull();
+    				dataComponent.setId("dataComponent");
+    				layoutManager.getDataArea().addComponent(dataComponent);
+    				layoutManager.getDataArea().setExpandRatio(dataComponent, 1);
+    			}
+    		}
+    	} 
+    	else {
+    		log.error("referenced datamart UserAccount generates no results");
+    	}
     }
     
   }
@@ -373,9 +374,37 @@
     dataSourceContainer = new CellSetIndexedContainer(eclipseContext, attributeLookupMap, cellSet, coordinateSystem, false);
     table.setContainerDataSource(dataSourceContainer);
     dataSourceContainer.addExtras(table);
+    // Setting the order of the columns via the visibleColumns list
+    Map<Object, Integer> visibleColumnsMap = user.getColumnUtil().getVisibleColumns(this.getClass().getCanonicalName() + ".columns");
+    if (visibleColumnsMap != null){
+    	boolean unmodifiedVisibleColumns = true;
+    	for (Object visibleColumnKey : visibleColumnsMap.keySet()) {
+    		CellSetIndexedContainer container = dataSourceContainer;
+    		// creates a hash code by the column position members		
+    		int membersHash = 0;
+    		if (container != null) {
+    			List<DerivedMember> members = container.getColumnPosition(visibleColumnKey).getMembers();
+    			for (DerivedMember member : members) {
+    				membersHash += (member.getUniqueName() != null) ? member.getUniqueName().hashCode() : member.hashCode();
+    			}
+    		}
+    		if (membersHash != visibleColumnsMap.get(visibleColumnKey)) {
+    			unmodifiedVisibleColumns = false;
+    			break;
+    		}
+    	}
+    	if (unmodifiedVisibleColumns) {
+    		try {
+    			Object[] visibleColumns = visibleColumnsMap.values().toArray();
+    			table.setVisibleColumns(visibleColumns );
+    		} catch (IllegalArgumentException e) {
+    			// this occurs if a saved column is no longer existing due to model changes
+    		}
+    	}
+    }
     // Setting table columns width from the persisted user properties
     for (Object visibleId : table.getVisibleColumns()) {
-    	String widthStr = user.getColumnUtil().getColumnWidth(this.getClass().getCanonicalName() + "." + visibleId.toString() + "." + "width");
+    	String widthStr = user.getColumnUtil().getColumnWidth(this.getClass().getCanonicalName() + "." + visibleId.toString() + ".width");
     	if (widthStr!= null) {
     		try {
     			table.setColumnWidth(visibleId, Integer.parseInt(widthStr));
@@ -386,7 +415,7 @@
     }
     // Setting table collapsed columns from the persisted user properties
     for (Object propertyId : table.getContainerDataSource().getContainerPropertyIds()) {
-    	String collapsedColumn = user.getColumnUtil().getColumnCollapsed(this.getClass().getCanonicalName() + "." + propertyId + "." + "collapsed");
+    	String collapsedColumn = user.getColumnUtil().getColumnCollapsed(this.getClass().getCanonicalName() + "." + propertyId + ".collapsed");
     	try {
     		if (collapsedColumn != null){
     			table.setColumnCollapsed(propertyId, true);
@@ -394,14 +423,6 @@
     	} catch (IllegalArgumentException e) {
     		// this occurs if a saved column is no longer existing due to model changes
     	}
-    	Object[] visibleColumns = user.getColumnUtil().getVisibleColumns(this.getClass().getCanonicalName() + "." + "columns");
-    	if (visibleColumns != null){
-    		try {
-    			table.setVisibleColumns(visibleColumns);
-    		} catch (IllegalArgumentException e) {
-    			// this occurs if a saved column is no longer existing due to model changes
-    		}
-    	}
     }
     table.addValueChangeListener(new ValueChangeListener() {
     	@Override
@@ -422,17 +443,15 @@
         			}
     			}
     		}
-    		PerspectiveImpl perspective = (PerspectiveImpl) getContext().get(MPerspective.class);
-    		EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.SELECT, "org.eclipse.osbp.authentication.account.entities.UserAccount.id", "org.eclipse.osbp.authentication.account.tables.UserAdministration");
-    		if(perspective != null){evnt.setPerspective(perspective);}
+    		MPerspective perspective = getContext().get(MPerspective.class);
+    		EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.SELECT, "org.eclipse.osbp.authentication.account.entities.UserAccount.id", "org.eclipse.osbp.authentication.account.tables.UserAdministration");
     		evnt.addItem(EventDispatcherDataTag.ID, dataSourceContainer.getValueByProperty(selection, "__useraccount__id__"));
     		eventDispatcher.sendEvent(evnt);
     		for (DatamartPrimary<?> primary : datamartInstance.getPrimaryList()){
     			if (!"org.eclipse.osbp.authentication.account.entities.UserAccount".equals(primary.getEntityName())){
     				Object primaryValue = dataSourceContainer.getValueByProperty(selection, primary.getAlias().toLowerCase());
     				if (primaryValue != null) {
-    					evnt = new EventDispatcherEvent(EventDispatcherCommand.SELECT, primary.getEntityName() + "." + primary.getAttributeName(), "org.eclipse.osbp.authentication.account.tables.UserAdministration");
-    		    		if(perspective != null){evnt.setPerspective(perspective);}
+    					evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.SELECT, primary.getEntityName() + "." + primary.getAttributeName(), "org.eclipse.osbp.authentication.account.tables.UserAdministration");
     					evnt.addItem(EventDispatcherDataTag.ID, primaryValue);
     					eventDispatcher.sendEvent(evnt);
     				}
@@ -445,7 +464,7 @@
     		// Get the ID of the column collapse event
     		Object columnId = event.getPropertyId();
     		Object source = event.getSource();
-    		String propertyKey = this.getClass().getEnclosingClass().getCanonicalName() + "." + columnId.toString() + "." + "collapsed";
+    		String propertyKey = this.getClass().getEnclosingClass().getCanonicalName() + "." + columnId.toString() + ".collapsed";
     		if (source instanceof CustomTable){
     			if (((CustomTable)source).isColumnCollapsed(columnId)) {
     				user.addToProperties(propertyKey, "true");
@@ -458,11 +477,25 @@
     table.addColumnReorderListener(new ColumnReorderListener(){
     	public void columnReorder(ColumnReorderEvent event) {
     		Object source = event.getSource();
-    		String propertyKey = this.getClass().getEnclosingClass().getCanonicalName() + "." + "columns";
-    		if (source instanceof CustomTable){
-    			Object[] visibleColumns = ((CustomTable)source).getVisibleColumns();
+    		String propertyKey = this.getClass().getEnclosingClass().getCanonicalName() + ".columns";
+    		if (source instanceof CellSetFilterTable){
+    			Map<Object, Integer> visibleColumnsPositions = new HashMap<>();
+    			Object[] visibleColumns = ((CellSetFilterTable)source).getVisibleColumns();
+    			for (int i = 0; i < visibleColumns.length; i++) {
+    				CellSetIndexedContainer container = ((CellSetFilterTable)source).getCellSetIndexedContainer();
+    				Object visibleColumnKey = visibleColumns[i];
+    				// creates a hash code by the column position members		
+    				int membersHash = 0;
+    				if (container != null) {
+    					List<DerivedMember> members = container.getColumnPosition(visibleColumnKey).getMembers();
+    					for (DerivedMember member : members) {
+    						membersHash += (member.getUniqueName() != null) ? member.getUniqueName().hashCode() : member.hashCode();
+    					}
+    				}
+    				visibleColumnsPositions.put(visibleColumnKey, membersHash);
+    			}
     			if (visibleColumns!=null){
-    				user.addToProperties(propertyKey, visibleColumns);
+    				user.addToProperties(propertyKey, visibleColumnsPositions);
     			}
     		}
     	}
@@ -474,7 +507,7 @@
     		
     		// Get the property ID of the resized column
     		Object columnId = event.getPropertyId();
-    		user.addToProperties(this.getClass().getEnclosingClass().getCanonicalName() + "." + columnId.toString() + "." + "width", String.valueOf(width));
+    		user.addToProperties(this.getClass().getEnclosingClass().getCanonicalName() + "." + columnId.toString() + ".width", String.valueOf(width));
     	}
     });
     // Must be immediate to send the resize events immediately
@@ -509,14 +542,8 @@
   public boolean renderAllowed() {
     if (getSelectById() && getSelectedId()==null) {
     	for (DatamartFilter filter : datamartInstance.getFilters()) {
-    		List<IDualData> selectedData = filter.getSelectedData();
-    		if (!selectedData.isEmpty()) {
-    			for (IDualData iDualData : selectedData) {
-    				if (!"*".equals(iDualData.getFormattedValue()) || !"*".equals(iDualData.getSelectionValue())){
-    					return true;
-    				}
-    			}
-    			return false;
+    		if(filter.isOptional()) {
+    			return true;
     		}
     	} 
     	return false;
@@ -545,9 +572,10 @@
   @Override
   public void receiveEvent(final EventDispatcherEvent event) {
     switch(event.getCommand()) {
-    	case SELECT:
-    		PerspectiveImpl perspective = (PerspectiveImpl) eclipseContext.getActive(MPerspective.class);
-    		if(event.getPerspective() == null || (perspective != null && event.getPerspective().equals(perspective))){ 
+    	case SELECT: 
+    		MPerspective perspective = eclipseContext.get(MPerspective.class);
+    		ArrayList<String> allowedSenderParts = (ArrayList<String>) eclipseContext.getActive(MPart.class).getTransientData().get(IPerspectiveProvider.EventDispatcherConstants.ACCEPTED_SENDERS);
+    		if((event.getPerspective() == null || (perspective != null && event.getPerspective().equals(perspective))) && ((allowedSenderParts != null && allowedSenderParts.contains(event.getSender())) || allowedSenderParts == null)){
     			if(!event.getSender().equals("org.eclipse.osbp.authentication.account.tables.UserAdministration")) {
     				if(filterGenerator.selectItem(event, getSelectById())) {
     					selectedId = event.getData().get(EventDispatcherDataTag.ID);
@@ -577,6 +605,9 @@
     				dataRefresh();
     			}
     		}
+    		if (filterGenerator != null) {
+    			filterGenerator.updateFilter();
+    		}
     		break;
     	}
     
@@ -585,9 +616,8 @@
   @Override
   public void filterChanged(final DatamartFilter changedFilter) {
     if(changedFilter != null) {
-    	EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.SELECT, changedFilter.getName(), "org.eclipse.osbp.authentication.account.tables.UserAdministration");
-    	PerspectiveImpl perspective = (PerspectiveImpl) getContext().get(MPerspective.class);
-    	if(perspective != null){evnt.setPerspective(perspective);}
+    	MPerspective perspective = eclipseContext.get(MPerspective.class);
+    	EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.SELECT, changedFilter.getName(), "org.eclipse.osbp.authentication.account.tables.UserAdministration");
     	evnt.addData(changedFilter.getSelectedData());
     	eventDispatcher.sendEvent(evnt);
     }
diff --git a/org.eclipse.osbp.authentication.ui/src/account.datamart b/org.eclipse.osbp.authentication.ui/src/account.datamart
index 54a48e8..5702290 100644
--- a/org.eclipse.osbp.authentication.ui/src/account.datamart
+++ b/org.eclipse.osbp.authentication.ui/src/account.datamart
@@ -16,7 +16,7 @@
 package org.eclipse.osbp.authentication.account.datamarts{ 
 
 	datamart UserAccount 
-	using entity UserAccount { 
+	using entity UserAccount {
 		attributes {
 			attribute userName axis columns
 			attribute email axis columns
diff --git a/org.eclipse.osbp.authentication.ui/src/account.table b/org.eclipse.osbp.authentication.ui/src/account.table
index 66694a0..ecf0df3 100644
--- a/org.eclipse.osbp.authentication.ui/src/account.table
+++ b/org.eclipse.osbp.authentication.ui/src/account.table
@@ -15,5 +15,5 @@
  */
 package org.eclipse.osbp.authentication.account.tables {
 
-	table UserAdministration as readOnly filtering using datamart UserAccount 
+	table UserAdministration as readOnly filtering using datamart UserAccount
 }
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/Activator.java b/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/Activator.java
index 3fedcb5..3903ae3 100644
--- a/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/Activator.java
+++ b/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/Activator.java
@@ -29,7 +29,7 @@
 	/** The context. */
 	private static BundleContext context;
 	
-	/** The Constant LOGGER. */
+	/** The constant LOGGER. */
 	private static final Logger LOGGER = LoggerFactory.getLogger("activator");
 
 	/**
diff --git a/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/AuthenticationProvider.java b/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/AuthenticationProvider.java
index 0b5c461..db95a6b 100644
--- a/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/AuthenticationProvider.java
+++ b/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/AuthenticationProvider.java
@@ -15,7 +15,10 @@
 package org.eclipse.osbp.authentication.ui.login;
 
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import java.security.Key;
+import java.text.MessageFormat;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Dictionary;
 import java.util.List;
@@ -29,7 +32,6 @@
 import org.apache.commons.lang.SerializationUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.mail.Email;
-import org.apache.commons.mail.EmailException;
 import org.apache.shiro.codec.Hex;
 import org.apache.shiro.crypto.AesCipherService;
 import org.apache.shiro.crypto.CryptoException;
@@ -165,6 +167,7 @@
 		this.postAuthentication = postAuthentication;
 	}
 
+	@SuppressWarnings("restriction")
 	@PostConstruct
 	public void init(VerticalLayout parent) {
 		LOGGER.debug("AuthenticationProvider init");
@@ -185,7 +188,7 @@
 		String appName = brandingName != null ? brandingName : "App";
 		Dictionary<String, String> headers = bundle.getHeaders();
 		String brandingVendor = headers.get("Bundle-Vendor");
-		String vendor = brandingVendor != null ? brandingVendor : "Loetz GmbH & Co. KG Heidelberg Germany";
+		String vendor = brandingVendor != null ? brandingVendor : "Loetz GmbH&Co.KG Heidelberg Germany";
 		/* --------------------------- */
 		
 		// set polling is necessary due to possible progress bars
@@ -330,8 +333,8 @@
 			register = new Button();
 			register.setSizeFull();
 			registerArea.addComponent(register);
-			register.setCaption(dslMetadataService.translate(locale.toLanguageTag(), "register"));
-			register.setDescription(dslMetadataService.translate(locale.toLanguageTag(), "register_tip"));
+			register.setCaption(dslMetadataService.translate(locale.toLanguageTag(), "register_new_user"));
+			register.setDescription(dslMetadataService.translate(locale.toLanguageTag(), "register_new_user_tip"));
 			register.addClickListener(new ClickListener() {
 				@Override
 				public void buttonClick(ClickEvent event) {
@@ -344,7 +347,8 @@
 		copyrightField.setSizeFull();
 		copyrightArea.addComponent(copyrightField);
 		copyrightArea.setComponentAlignment(copyrightField, Alignment.MIDDLE_CENTER);
-		String cprText = dslMetadataService.translate(locale.toLanguageTag(), "copyright") + " " + vendor;
+		String actualYear = String.valueOf(LocalDate.now().getYear());
+		String cprText = dslMetadataService.translate(locale.toLanguageTag(), "copyright") + actualYear + " " + vendor;
 		String trdmText = dslMetadataService.translate(locale.toLanguageTag(), "trademark");
 		copyrightField.setValue(cprText + "<br>" + trdmText);
 		copyrightField.setContentMode(ContentMode.HTML);
@@ -385,19 +389,24 @@
 		if ( "email_password_reset_subject".equals(emailSubject) ){
 			emailSubject = "Your new password";
 		}
+		String charset=Charset.defaultCharset().name();		
+		email.setCharset(charset);  
+		
 		email.setSubject(emailSubject);
 		try {
-			email.setFrom(ProductConfiguration.getAdminEmail());
+			email.setFrom(ProductConfiguration.getAdminEmail(), ProductConfiguration.getAdminEmailUsername() );
 			String emailBody = dslMetadataService.translate(locale.toLanguageTag(), "email_password_reset_body");
 			if ( "email_password_reset_body".equals(emailBody) ){
-				emailBody="Please find your new password here.\nYou have to change it with your next login!\n\nYour new password is:";
+				emailBody="Please find your new password here.\nYou have to change it with your next login!\n\nYour new password is: {0}.";
 			}
-			email.setMsg(emailBody + " '" + resetPassword + "'.");
+			
+			String fmt=MessageFormat.format(emailBody,resetPassword).replace("\\n", "\n");
+			email.setMsg(fmt);
 			email.addTo(user.getEmail());
 			email.send();
-		} catch (EmailException e) {
+		} catch (Exception e) {
 			LOGGER.error("EmailException: " + e.getLocalizedMessage());
-			LOGGER.info("failed to send password {} to user {}", resetPassword, user.getUserName() );
+			LOGGER.error("failed to send password {} to user {} to address {}", resetPassword, user.getUserName(), user.getEmail() );
 		}
 	}
 
diff --git a/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/NewPasswordDialog.java b/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/NewPasswordDialog.java
index 6199a81..7e1122e 100644
--- a/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/NewPasswordDialog.java
+++ b/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/NewPasswordDialog.java
@@ -14,6 +14,8 @@
  */
 package org.eclipse.osbp.authentication.ui.login;
 
+import java.time.LocalDate;
+
 import org.eclipse.e4.core.services.events.IEventBroker;
 import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
 import org.eclipse.osbp.authentication.providerimpl.UserProtocol;
@@ -122,7 +124,8 @@
 		copyrightField.setSizeFull();
 		copyrightArea.addComponent(copyrightField);
 		copyrightArea.setComponentAlignment(copyrightField, Alignment.MIDDLE_CENTER);
-		copyrightField.setValue(dslMetadataService.translate(getLocale().toLanguageTag(), "copyright"));
+		String actualYear = String.valueOf(LocalDate.now().getYear());
+		copyrightField.setValue(dslMetadataService.translate(getLocale().toLanguageTag(), "copyright") + actualYear);
 
 		// Text field OLDPASSWORD
 		PasswordField oldPasswordField = new PasswordField();
diff --git a/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/RegistrationDialog.java b/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/RegistrationDialog.java
index 6702a9a..9f32347 100644
--- a/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/RegistrationDialog.java
+++ b/org.eclipse.osbp.authentication.ui/src/org/eclipse/osbp/authentication/ui/login/RegistrationDialog.java
@@ -14,6 +14,8 @@
  */
 package org.eclipse.osbp.authentication.ui.login;
 
+import java.time.LocalDate;
+
 import org.apache.commons.validator.routines.EmailValidator;
 import org.eclipse.e4.core.services.events.IEventBroker;
 import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
@@ -137,7 +139,8 @@
 		copyrightField.setSizeFull();
 		copyrightArea.addComponent(copyrightField);
 		copyrightArea.setComponentAlignment(copyrightField, Alignment.MIDDLE_CENTER);
-		copyrightField.setValue(dslMetadataService.translate(getLocale().toLanguageTag(), "copyright"));
+		String actualYear = String.valueOf(LocalDate.now().getYear());
+		copyrightField.setValue(dslMetadataService.translate(getLocale().toLanguageTag(), "copyright") + actualYear);
 
 		// Text field USERNAME
 		TextField userNameField = new TextField();
@@ -173,7 +176,7 @@
 		Button registerButton = new Button();
 		registerButton.setSizeFull();
 		registerArea.addComponent(registerButton);
-		registerButton.setCaption(dslMetadataService.translate(getLocale().toLanguageTag(), "register"));
+		registerButton.setCaption(dslMetadataService.translate(getLocale().toLanguageTag(), "register_new_user"));
 		registerButton.setDescription(dslMetadataService.translate(getLocale().toLanguageTag(), "register_tip"));
 		registerButton.addClickListener(new Button.ClickListener() {
 
