diff --git a/entity/EmployeeRole_entity/entityfields/role/possibleItemsProcess.js b/entity/EmployeeRole_entity/entityfields/role/possibleItemsProcess.js
index 6c9d51db744719d480f8fcaedaed2a2208ee39b7..e52145c8011337d56bd0cd3a5e9eea62f3562493 100644
--- a/entity/EmployeeRole_entity/entityfields/role/possibleItemsProcess.js
+++ b/entity/EmployeeRole_entity/entityfields/role/possibleItemsProcess.js
@@ -1,7 +1,9 @@
+import("system.translate");
 import("system.vars");
 import("system.result");
 import("system.tools");
 
+var selectedRole = vars.get("$field.ROLE");
 var roles = [];
 var allRoles = tools.getAllRoles([tools.ROLE_INTERNAL, tools.ROLE_PROJECT, tools.ROLE_XMPP]);
 var excludeRoles = {
@@ -11,13 +13,15 @@ var excludeRoles = {
     "INTERNAL_TECHNICAL" : true
 };
 
-var userRoles = tools.getRoles(vars.get("$param.UserTitle_param"));
-for (let i in userRoles)
-    if (vars.get("$field.ROLE") != userRoles[i])
+if (tools.existUsers(vars.get("$param.UserTitle_param")))
+{
+    var userRoles = tools.getRoles(vars.get("$param.UserTitle_param"));
+    for (let i in userRoles)
         excludeRoles[userRoles[i]] = true;
+}
 
 for (let roleId in allRoles)
-    if (!excludeRoles[roleId])
-        roles.push([roleId, allRoles[roleId][0]]);
+    if (!excludeRoles[roleId] || roleId == selectedRole)
+        roles.push([roleId, translate.text(allRoles[roleId][0])]);
 
 result.object(roles);
\ No newline at end of file
diff --git a/entity/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod
index c4d400c893adef4ff884578005b71e11a8310d15..c1a5ae6a1cac8d1b1bf52605674c30452af5ed67 100644
--- a/entity/Employee_entity/Employee_entity.aod
+++ b/entity/Employee_entity/Employee_entity.aod
@@ -15,14 +15,15 @@
     </entityProvider>
     <entityField>
       <name>UID</name>
-      <title>Username</title>
-      <mandatory v="true" />
-      <onValidation>%aditoprj%/entity/Employee_entity/entityfields/uid/onValidation.js</onValidation>
+      <searchable v="false" />
+      <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/uid/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
-      <name>TITLE_ORIGINAL</name>
-      <description>the original username, this is required to update the correct user when the username is changed</description>
-      <searchable v="false" />
+      <name>TITLE</name>
+      <title>Username</title>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/title/valueProcess.js</valueProcess>
+      <onValidation>%aditoprj%/entity/Employee_entity/entityfields/title/onValidation.js</onValidation>
     </entityField>
     <entityField>
       <name>CONTACT_ID</name>
@@ -40,6 +41,7 @@
     <entityField>
       <name>LASTNAME</name>
       <title>Lastname</title>
+      <mandatory v="false" />
       <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/lastname/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
@@ -53,6 +55,10 @@
       <name>EMAIL_ADDRESS</name>
       <title>Email</title>
       <mandatory v="true" />
+      <possibleItemsProcess>%aditoprj%/entity/Employee_entity/entityfields/email_address/possibleItemsProcess.js</possibleItemsProcess>
+      <newItemsAllowed v="true" />
+      <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/email_address/valueProcess.js</valueProcess>
+      <onValidation>%aditoprj%/entity/Employee_entity/entityfields/email_address/onValidation.js</onValidation>
     </entityField>
     <entityField>
       <name>PASSWORD</name>
@@ -210,30 +216,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityConsumer>
-      <name>StoredSelections</name>
-      <title>Stored selections</title>
-      <fieldType>DEPENDENCY_OUT</fieldType>
-      <dependency>
-        <name>dependency</name>
-        <entityName>StoredSelection_entity</entityName>
-        <fieldName>StoredSelections</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>Base64String_param</name>
-          <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/storedselections/children/base64string_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>UserName_param</name>
-          <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/storedselections/children/username_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityField>
-      <name>STORED_SELECTIONS</name>
-      <searchable v="false" />
-    </entityField>
     <entityProvider>
       <name>Employees</name>
       <fieldType>DEPENDENCY_IN</fieldType>
@@ -259,6 +241,10 @@
         </entityParameter>
       </children>
     </entityProvider>
+    <entityField>
+      <name>TITLE_ORIGINAL</name>
+      <searchable v="false" />
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -270,11 +256,13 @@
       <onDelete>%aditoprj%/entity/Employee_entity/recordcontainers/jdito/onDelete.js</onDelete>
       <recordFields>
         <element>UID.value</element>
+        <element>TITLE.value</element>
         <element>TITLE_ORIGINAL.value</element>
         <element>ISACTIVE.value</element>
         <element>FIRSTNAME.value</element>
         <element>LASTNAME.value</element>
         <element>EMAIL_ADDRESS.value</element>
+        <element>EMAIL_ADDRESS.displayValue</element>
         <element>DESCRIPTION.value</element>
         <element>CONTACT_ID.value</element>
         <element>CONTACT_ID.displayValue</element>
diff --git a/entity/Employee_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js b/entity/Employee_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js
index ef0d5bcac51027b862291e5abd61c0c05773a8df..16c85500b5355a72548030867e3d300661e9d4aa 100644
--- a/entity/Employee_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js
+++ b/entity/Employee_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.CONTACT_ID"));
\ No newline at end of file
+result.string(vars.get("$field.UID"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/attributetree/children/objectrowid_param/valueProcess.js b/entity/Employee_entity/entityfields/attributetree/children/objectrowid_param/valueProcess.js
index ef0d5bcac51027b862291e5abd61c0c05773a8df..16c85500b5355a72548030867e3d300661e9d4aa 100644
--- a/entity/Employee_entity/entityfields/attributetree/children/objectrowid_param/valueProcess.js
+++ b/entity/Employee_entity/entityfields/attributetree/children/objectrowid_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.CONTACT_ID"));
\ No newline at end of file
+result.string(vars.get("$field.UID"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js b/entity/Employee_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
index ef0d5bcac51027b862291e5abd61c0c05773a8df..16c85500b5355a72548030867e3d300661e9d4aa 100644
--- a/entity/Employee_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
+++ b/entity/Employee_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.CONTACT_ID"));
\ No newline at end of file
+result.string(vars.get("$field.UID"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/email_address/onValidation.js b/entity/Employee_entity/entityfields/email_address/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..f6a829134cf820a5f5028330b0e6d05545c742c1
--- /dev/null
+++ b/entity/Employee_entity/entityfields/email_address/onValidation.js
@@ -0,0 +1,10 @@
+import("system.translate");
+import("system.neon");
+import("system.result");
+import("system.vars");
+import("system.tools");
+import("Entity_lib");
+
+var email = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.EMAIL_ADDRESS"));
+if (email != "" && tools.getUsersByAttribute(tools.EMAIL, [email]).length)
+        result.string(translate.text("Email must be unique!"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/email_address/possibleItemsProcess.js b/entity/Employee_entity/entityfields/email_address/possibleItemsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a171cd824ec1eb6faaae60df9587c8e8da8653e0
--- /dev/null
+++ b/entity/Employee_entity/entityfields/email_address/possibleItemsProcess.js
@@ -0,0 +1,30 @@
+import("Communication_lib");
+import("system.neon");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var contactId = vars.get("$field.CONTACT_ID");
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    && contactId)
+{
+    var sql = SqlCondition.begin()
+        .andPrepare("COMMUNICATION.CONTACT_ID", contactId)
+        .and("COMMUNICATION.MEDIUM_ID in ('" + CommUtil.getMediumIdsByCategory("EMAIL").join("', '") + "')")
+        .buildSql("select ADDR, ADDR from COMMUNICATION");
+    
+    var addresses = db.table(sql);
+    
+    //include the currently set email address
+    var currentAddress = vars.get("$field.EMAIL_ADDRESS");
+    if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && currentAddress
+        && !addresses.some(function (row) {return row[0] == currentAddress;}))
+    {
+        addresses.push([currentAddress, currentAddress]);
+    }   
+            
+    result.object(addresses);
+}
+else
+    result.object([])
diff --git a/entity/Employee_entity/entityfields/email_address/valueProcess.js b/entity/Employee_entity/entityfields/email_address/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7931dce1d63582d4b0b6bcd09f086c34d3d8742b
--- /dev/null
+++ b/entity/Employee_entity/entityfields/email_address/valueProcess.js
@@ -0,0 +1,17 @@
+import("system.result");
+import("system.db");
+import("system.neon");
+import("system.vars");
+import("Sql_lib");
+import("Communication_lib");
+
+var contactId = vars.get("$field.CONTACT_ID");
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    && contactId && !vars.get("$field.EMAIL_ADDRESS"))
+{
+    var defaultMail = db.cell(SqlCondition.begin()
+        .andPrepare("CONTACT.CONTACTID", contactId)
+        .buildSql("select (" + CommUtil.getStandardSubSqlMail() + ") from CONTACT")
+    );
+    result.string(defaultMail);
+}
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/firstname/valueProcess.js b/entity/Employee_entity/entityfields/firstname/valueProcess.js
index 310fb8ddc85d7f2e3d3d97a8d934ffa9e86f6ba0..f118b02d965a2fb451f4cf784a8f3da33f8d2957 100644
--- a/entity/Employee_entity/entityfields/firstname/valueProcess.js
+++ b/entity/Employee_entity/entityfields/firstname/valueProcess.js
@@ -5,8 +5,8 @@ import("system.vars");
 import("Sql_lib");
 
 var contactId = vars.get("$field.CONTACT_ID");
-if ((vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
-    && contactId)
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    && contactId && !vars.get("$field.FIRSTNAME"))
 {
     var firstname = db.cell(SqlCondition.begin()
         .andPrepare("CONTACT.CONTACTID", contactId)
diff --git a/entity/Employee_entity/entityfields/isactive/valueProcess.js b/entity/Employee_entity/entityfields/isactive/valueProcess.js
index 7993af1a5f422c0cbe027b436b00644ceee8d3ed..86ff56f08f7147b273771b10752464d691c1deb0 100644
--- a/entity/Employee_entity/entityfields/isactive/valueProcess.js
+++ b/entity/Employee_entity/entityfields/isactive/valueProcess.js
@@ -2,5 +2,5 @@ import("system.neon");
 import("system.vars");
 import("system.result");
 
-if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
     result.string("true");
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/lastname/valueProcess.js b/entity/Employee_entity/entityfields/lastname/valueProcess.js
index 5913681662c97cf9041552ec407090d186ece436..d0f5d394fa6952d26136cd4f3971efbcc40c7539 100644
--- a/entity/Employee_entity/entityfields/lastname/valueProcess.js
+++ b/entity/Employee_entity/entityfields/lastname/valueProcess.js
@@ -5,8 +5,8 @@ import("system.vars");
 import("Sql_lib");
 
 var contactId = vars.get("$field.CONTACT_ID");
-if ((vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
-    && contactId)
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    && contactId && !vars.get("$field.LASTNAME"))
 {
     var lastname = db.cell(SqlCondition.begin()
         .andPrepare("CONTACT.CONTACTID", contactId)
diff --git a/entity/Employee_entity/entityfields/storedselections/children/base64string_param/valueProcess.js b/entity/Employee_entity/entityfields/storedselections/children/base64string_param/valueProcess.js
deleted file mode 100644
index 8d34e510f8d26ac8c60f33215e307cdc3067de51..0000000000000000000000000000000000000000
--- a/entity/Employee_entity/entityfields/storedselections/children/base64string_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.STORED_SELECTIONS"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/storedselections/children/username_param/valueProcess.js b/entity/Employee_entity/entityfields/storedselections/children/username_param/valueProcess.js
deleted file mode 100644
index 2c71e53a498b1ad3d5a0f915aacb4a836b81657f..0000000000000000000000000000000000000000
--- a/entity/Employee_entity/entityfields/storedselections/children/username_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.UID"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/uid/onValidation.js b/entity/Employee_entity/entityfields/title/onValidation.js
similarity index 69%
rename from entity/Employee_entity/entityfields/uid/onValidation.js
rename to entity/Employee_entity/entityfields/title/onValidation.js
index e6c2cc26a81f30f31d1916545a062ac1c023498c..b7a2177b025698809ddcc9f2d4adb5ea62cdd6e6 100644
--- a/entity/Employee_entity/entityfields/uid/onValidation.js
+++ b/entity/Employee_entity/entityfields/title/onValidation.js
@@ -5,7 +5,7 @@ import("system.vars");
 import("system.tools");
 import("Entity_lib");
 
-var title = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.UID"));
-if (!(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT && title == vars.get("$field.TITLE_ORIGINAL")) 
+var title = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.TITLE"));
+if (!(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && title == vars.get("$field.TITLE_ORIGINAL")) 
     && title != "" && tools.existUsers(title))
         result.string(translate.text("Username already exists!"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/title/valueProcess.js b/entity/Employee_entity/entityfields/title/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..058b37c3c1c367ab44f6212d3e684707bb3a398b
--- /dev/null
+++ b/entity/Employee_entity/entityfields/title/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("Employee_lib");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && !vars.get("$field.TITLE"))
+    result.string(EmployeeUtils.generateUserName(vars.get("$field.FIRSTNAME"), vars.get("$field.LASTNAME"), "f.l+"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/uid/valueProcess.js b/entity/Employee_entity/entityfields/uid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e2c2abf86f0bd1c75ffb84ca5ef712288a78c3f
--- /dev/null
+++ b/entity/Employee_entity/entityfields/uid/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    && vars.get("$field.TITLE"))
+        result.string(vars.get("$field.TITLE"));
\ No newline at end of file
diff --git a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
index bd4a9109ac97ec98be86b3e4252d94fbf258a7be..f40cbd25c020ec69598596d91c051cac0ab0c538 100644
--- a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
@@ -4,6 +4,7 @@ import("system.tools");
 import("Util_lib");
 import("Contact_lib");
 import("JditoFilter_lib");
+import("Employee_lib");
 
 var users;
 if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
@@ -19,12 +20,14 @@ else
 users = users.map(function (user)
 {
     return [
+        user[tools.TITLE],
         user[tools.TITLE],
         user[tools.TITLE],
         user[tools.PARAMS][tools.ISACTIVE],
         user[tools.PARAMS][tools.FIRSTNAME],
         user[tools.PARAMS][tools.LASTNAME],
         user[tools.PARAMS][tools.EMAIL],
+        user[tools.PARAMS][tools.EMAIL],
         user[tools.DESCRIPTION],
         user[tools.PARAMS][tools.CONTACTID],
         ContactUtils.getTitleByContactId(user[tools.PARAMS][tools.CONTACTID]), //TODO: get the names more efficiently
@@ -35,7 +38,7 @@ users = users.map(function (user)
 var filter = vars.exists("$local.filter") && vars.get("$local.filter"); 
 
 //TODO: this is a workaround that filters the records manually, it should be possible to filter the users with a tools.* method
-users = JditoFilterUtils.filterRecords(["UID", "", "ISACTIVE", "FIRSTNAME", "LASTNAME", "EMAIL_ADDRESS", "DESCRIPTION", "CONTACT_ID", "", ], users, filter);
+users = JditoFilterUtils.filterRecords(["UID", "TITLE", "TITLE_ORIGINAL", "ISACTIVE", "FIRSTNAME", "LASTNAME", "EMAIL_ADDRESS", "DESCRIPTION", "CONTACT_ID", ""], users, filter);
 
 
 ArrayUtils.sort2d(users, 0, true, false); //sort by username
diff --git a/entity/Employee_entity/recordcontainers/jdito/onDelete.js b/entity/Employee_entity/recordcontainers/jdito/onDelete.js
index 084591314517206b0f791a54ad7a39699e6622fe..212b6d23132d934d2e7169624a2607b58d99a2e0 100644
--- a/entity/Employee_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/Employee_entity/recordcontainers/jdito/onDelete.js
@@ -4,5 +4,5 @@ import("system.tools");
 import("Employee_lib");
 
 //TODO: the current user should not delete himself, put this condition in grantDelete when available
-if (EmployeeUtils.getCurrentUserName() != vars.get("$field.UID"))
-    tools.deleteUser(vars.get("$field.UID"));
\ No newline at end of file
+if (EmployeeUtils.getCurrentUserName() != vars.get("$field.TITLE") && !EmployeeUtils.hasRelations(vars.get("$field.CONTACT_ID")))
+    tools.deleteUser(vars.get("$field.TITLE"));
\ No newline at end of file
diff --git a/entity/Employee_entity/recordcontainers/jdito/onInsert.js b/entity/Employee_entity/recordcontainers/jdito/onInsert.js
index 21f772e8ce2d94252d75f4381f4b7de8b48c0c67..9d7e0fddbe405e9a445b8373a512eec792dc929c 100644
--- a/entity/Employee_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/Employee_entity/recordcontainers/jdito/onInsert.js
@@ -1,6 +1,7 @@
 import("system.neon");
 import("system.vars");
 import("system.tools");
+import("Employee_lib");
 
 var user = {};
 var params = []; //this has to be an array
@@ -12,7 +13,7 @@ params[tools.CONTACTID] = vars.get("$field.CONTACT_ID");
 params[tools.DESCRIPTION] = vars.get("$field.DESCRIPTION");
 params[tools.ISACTIVE] = vars.get("$field.ISACTIVE");
 
-user[tools.TITLE] = vars.get("$field.UID");
+user[tools.TITLE] = vars.get("$field.TITLE");
 user[tools.PARAMS] = params;
 
 if (vars.get("$field.PASSWORD") && vars.get("$field.PASSWORD") == vars.get("$field.CONFIRM_PASSWORD"))
diff --git a/entity/Employee_entity/recordcontainers/jdito/onUpdate.js b/entity/Employee_entity/recordcontainers/jdito/onUpdate.js
index 03a003f2633627942005c8c90878f827e3e54ccd..6818acfd629dda2cb3ec98a6b3e59fc11e98e6c2 100644
--- a/entity/Employee_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/Employee_entity/recordcontainers/jdito/onUpdate.js
@@ -18,10 +18,9 @@ FieldChanges.assimilateChangeAndDispose("$field.IMAGE", function (state, value)
         PersUtils.removeImage(personId);
 });
 
-var user = {};
-user[tools.PARAMS] = [];
+var user = tools.getUser(vars.get("$field.TITLE_ORIGINAL"));
 
-user[tools.TITLE] = vars.get("$field.UID");
+user[tools.TITLE] = vars.get("$field.TITLE");
 user[tools.PARAMS][tools.ISACTIVE] = vars.get("$field.ISACTIVE");
 user[tools.PARAMS][tools.FIRSTNAME] = vars.get("$field.FIRSTNAME");
 user[tools.PARAMS][tools.LASTNAME] = vars.get("$field.LASTNAME");
diff --git a/entity/StoredSelection_entity/StoredSelection_entity.aod b/entity/StoredSelection_entity/StoredSelection_entity.aod
deleted file mode 100644
index 59114c2e095d2872d2ffad92b4ca259ec526a4bc..0000000000000000000000000000000000000000
--- a/entity/StoredSelection_entity/StoredSelection_entity.aod
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.1">
-  <name>StoredSelection_entity</name>
-  <title>Stored selections</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <recordContainer>jdito</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-    </entityProvider>
-    <entityField>
-      <name>UID</name>
-    </entityField>
-    <entityParameter>
-      <name>Base64String_param</name>
-      <expose v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityProvider>
-      <name>StoredSelections</name>
-      <fieldType>DEPENDENCY_IN</fieldType>
-      <dependencies>
-        <entityDependency>
-          <name>1386345f-0ed8-4c82-b96d-a249775314ee</name>
-          <entityName>Employee_entity</entityName>
-          <fieldName>StoredSelections</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
-    </entityProvider>
-    <entityField>
-      <name>CONTEXT_NAME</name>
-      <title>Module</title>
-      <state>READONLY</state>
-    </entityField>
-    <entityField>
-      <name>SELECTION_TITLE</name>
-      <title>Name</title>
-      <state>READONLY</state>
-    </entityField>
-    <entityParameter>
-      <name>UserName_param</name>
-      <expose v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-  </entityFields>
-  <recordContainers>
-    <jDitoRecordContainer>
-      <name>jdito</name>
-      <contentProcess>%aditoprj%/entity/StoredSelection_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
-      <onDelete>%aditoprj%/entity/StoredSelection_entity/recordcontainers/jdito/onDelete.js</onDelete>
-      <recordFields>
-        <element>UID.value</element>
-        <element>CONTEXT_NAME.value</element>
-        <element>SELECTION_TITLE.value</element>
-      </recordFields>
-    </jDitoRecordContainer>
-  </recordContainers>
-</entity>
diff --git a/entity/StoredSelection_entity/recordcontainers/jdito/contentProcess.js b/entity/StoredSelection_entity/recordcontainers/jdito/contentProcess.js
deleted file mode 100644
index d92a27b39c76caada2055333b64b68dcef957d0d..0000000000000000000000000000000000000000
--- a/entity/StoredSelection_entity/recordcontainers/jdito/contentProcess.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import("system.result");
-import("system.pack");
-import("system.util");
-import("system.vars");
-
-var records = [];
-if (vars.exists("$param.Base64String_param") && vars.get("$param.Base64String_param"))
-{
-    var codedSelections = pack.gunzip(vars.get("$param.Base64String_param"));
-
-    var selections = new XML(util.decodeBase64String(codedSelections));
-    selections = selections.FRAME;
-    for (let i in selections)
-    {
-        context = selections[i];
-        var contextName = context.NAME;
-        if (contextName)
-        {
-            var title = context.STORE.(ID == "#STORE_SAVED").ELEMENT.TITLE;
-            for (let ii in title)
-            {
-                records.push([(contextName + title[ii]), contextName, title[ii]]);
-            }
-        }
-    }
-}
-
-result.object(records);
\ No newline at end of file
diff --git a/entity/StoredSelection_entity/recordcontainers/jdito/onDelete.js b/entity/StoredSelection_entity/recordcontainers/jdito/onDelete.js
deleted file mode 100644
index cf864004f9807838ec293f1781702977c2f518a0..0000000000000000000000000000000000000000
--- a/entity/StoredSelection_entity/recordcontainers/jdito/onDelete.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import("system.util");
-import("system.pack");
-import("system.vars");
-import("system.tools");
-import("Employee_lib");
-
-var userName = vars.exists("$param.UserName_param") && vars.get("$param.UserName_param");
-var contextName = vars.get("$field.CONTEXT_NAME");
-var selectionTitle = vars.get("$field.SELECTION_TITLE");
-
-if (vars.exists("$param.Base64String_param") && vars.get("$param.Base64String_param") && user && tools.existUsers(user))
-{
-    var user;
-    if (userName == EmployeeUtils.getCurrentUserName())
-        user = tools.getCurrentUser();
-    else 
-        user = tools.getUser(userName, tools.PROFILE_FULL);
-    
-    var codedSelections = pack.gunzip(vars.get("$param.Base64String_param"));
-    var selections = new XML(util.decodeBase64String(codedSelections));
-    delete selections.FRAME.(NAME == contextName).STORE.(ID == "#STORE_SAVED").ELEMENT.(TITLE == selectionTitle)[0];
-
-    user[tools.PARAMS][tools.FRAME_STOREDSEARCHES] = pack.gzip(util.encodeBase64String(selections.toString()));
-    
-    if (userName == EmployeeUtils.getCurrentUserName()) 
-        tools.updateCurrentUser(user) 
-    else 
-        tools.updateUser(user);
-}
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 6c31d77bfabe75ad026e1dc4d407b4839a2b415a..73af0d0247c8e3de0895628b50ec6efe7d86984d 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -2688,6 +2688,36 @@
     <entry>
       <key>This private person doeas already exist and can not be created once more.</key>
     </entry>
+    <entry>
+      <key>Everyone</key>
+    </entry>
+    <entry>
+      <key>Project</key>
+    </entry>
+    <entry>
+      <key>Human resources</key>
+    </entry>
+    <entry>
+      <key>Project management</key>
+    </entry>
+    <entry>
+      <key>Office staff</key>
+    </entry>
+    <entry>
+      <key>Field staff</key>
+    </entry>
+    <entry>
+      <key>Resource</key>
+    </entry>
+    <entry>
+      <key>Human Resources</key>
+    </entry>
+    <entry>
+      <key>The title already exists!</key>
+    </entry>
+    <entry>
+      <key>Note</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
   <sqlModels>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 816ec30255ae6e8a1b3215357028d5d705267acb..3ab2420888cc7a03a69aaa9395ea3a83e108cacc 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -6,14 +6,26 @@
   <country></country>
   <variant></variant>
   <keyValueMap>
+    <entry>
+      <key>Project management</key>
+      <value>Projektmanagement</value>
+    </entry>
     <entry>
       <key>Company</key>
       <value>Firma</value>
     </entry>
+    <entry>
+      <key>Office staff</key>
+      <value>Innendienst</value>
+    </entry>
     <entry>
       <key>Confirm password</key>
       <value>Passwort prüfen</value>
     </entry>
+    <entry>
+      <key>Human Resources</key>
+      <value>Personal</value>
+    </entry>
     <entry>
       <key>Entrydate (Day)</key>
       <value>Eingangsdatum (Tag)</value>
@@ -26,6 +38,10 @@
       <key>Discount %</key>
       <value>Rabatt %</value>
     </entry>
+    <entry>
+      <key>Email must be unique!</key>
+      <value>Die E-Mail-Adresse muss eindeutig sein!</value>
+    </entry>
     <entry>
       <key>E-Mail</key>
       <value>E-Mail</value>
@@ -1067,6 +1083,10 @@
       <key>My Activities</key>
       <value>Meine Aktivitäten</value>
     </entry>
+    <entry>
+      <key>Everyone</key>
+      <value>Jeder</value>
+    </entry>
     <entry>
       <key>Combobox Value</key>
       <value>Combobox-Wert</value>
@@ -1201,6 +1221,10 @@
     <entry>
       <key>ISO 3166-1 alpha-2</key>
     </entry>
+    <entry>
+      <key>Field staff</key>
+      <value>Außendienst</value>
+    </entry>
     <entry>
       <key>0.00</key>
     </entry>
@@ -2506,6 +2530,10 @@
       <key>Christmas Island</key>
       <value>Weihnachtsinsel</value>
     </entry>
+    <entry>
+      <key>Project</key>
+      <value>Projekt</value>
+    </entry>
     <entry>
       <key>Netherlands</key>
       <value>Niederlande</value>
@@ -2602,6 +2630,10 @@
       <key>Congo (Democratic Republic of the)</key>
       <value>Kongo (Demokratische Republik)</value>
     </entry>
+    <entry>
+      <key>Resource</key>
+      <value>Ressource</value>
+    </entry>
     <entry>
       <key>Greece</key>
       <value>Griechenland</value>
@@ -3462,6 +3494,15 @@
       <key>This private person doeas already exist and can not be created once more.</key>
       <value>Diese Privatperson existiert bereits und kann daher nicht noch ein mal angelegt werden.</value>
     </entry>
+    <entry>
+      <key>The title already exists!</key>
+    </entry>
+    <entry>
+      <key>Human resources</key>
+    </entry>
+    <entry>
+      <key>Note</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index c35bab99b660eb04386d69ba03d2cd8349f107af..a7440fd6ab588bb059a7f54073e5c70464c4b4b8 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -1038,6 +1038,9 @@
     <entry>
       <key>Seite</key>
     </entry>
+    <entry>
+      <key>Note</key>
+    </entry>
     <entry>
       <key>Senden per E-Mail</key>
     </entry>
@@ -2671,6 +2674,9 @@
       <key>${MIN_MAX_ERROR} field: %0, value: %1, min: %2, max: %3</key>
       <value>%0 has to be between %2 and %3.</value>
     </entry>
+    <entry>
+      <key>The title already exists!</key>
+    </entry>
     <entry>
       <key>Password</key>
     </entry>
@@ -2718,6 +2724,30 @@
     <entry>
       <key>This private person doeas already exist and can not be created once more.</key>
     </entry>
+    <entry>
+      <key>Everyone</key>
+    </entry>
+    <entry>
+      <key>Project</key>
+    </entry>
+    <entry>
+      <key>Human resources</key>
+    </entry>
+    <entry>
+      <key>Project management</key>
+    </entry>
+    <entry>
+      <key>Office staff</key>
+    </entry>
+    <entry>
+      <key>Field staff</key>
+    </entry>
+    <entry>
+      <key>Resource</key>
+    </entry>
+    <entry>
+      <key>Human Resources</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonContext/StoredSelection/StoredSelection.aod b/neonContext/StoredSelection/StoredSelection.aod
deleted file mode 100644
index b758aed2aa3f95619ca280233109a7d76774ea31..0000000000000000000000000000000000000000
--- a/neonContext/StoredSelection/StoredSelection.aod
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
-  <name>StoredSelection</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <entity>StoredSelection_entity</entity>
-  <references>
-    <neonViewReference>
-      <name>8ab7727b-5dc7-47bb-9034-079d84ede3a3</name>
-      <view>StoredSelectionFilter_view</view>
-    </neonViewReference>
-  </references>
-</neonContext>
diff --git a/neonView/EmployeeEdit_view/EmployeeEdit_view.aod b/neonView/EmployeeEdit_view/EmployeeEdit_view.aod
index 9d89615fa4e2538be132137725f8fdf77e50b3c6..71614eff593bccfb770ea91b005d958a6feecad7 100644
--- a/neonView/EmployeeEdit_view/EmployeeEdit_view.aod
+++ b/neonView/EmployeeEdit_view/EmployeeEdit_view.aod
@@ -14,17 +14,13 @@
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
-          <name>fdd5320e-a8c0-4043-a88e-aeba1ca02cd1</name>
-          <entityField>UID</entityField>
+          <name>1925ef51-54a8-41e2-aa78-6d95d1ee4b99</name>
+          <entityField>CONTACT_ID</entityField>
         </entityFieldLink>
         <entityFieldLink>
           <name>9170856b-45c2-4d8a-864d-4db36bfe4a8c</name>
           <entityField>ISACTIVE</entityField>
         </entityFieldLink>
-        <entityFieldLink>
-          <name>1925ef51-54a8-41e2-aa78-6d95d1ee4b99</name>
-          <entityField>CONTACT_ID</entityField>
-        </entityFieldLink>
         <entityFieldLink>
           <name>7d36467f-8b79-4647-b8e5-5759bdbf37a7</name>
           <entityField>FIRSTNAME</entityField>
@@ -33,6 +29,10 @@
           <name>00a2dedb-67f5-4662-b053-bf841b30e365</name>
           <entityField>LASTNAME</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>9c030b62-bf17-4be1-bcc6-87b304a618c0</name>
+          <entityField>TITLE</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>6155e6b7-ee2c-45b4-87f5-9e506ffc5775</name>
           <entityField>EMAIL_ADDRESS</entityField>
diff --git a/neonView/EmployeeFilter_view/EmployeeFilter_view.aod b/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
index a11de42475c354c9b1c019cd96f898b0cf038fa8..88171ca8fcb9cc79b14de3c3d8590240268af14a 100644
--- a/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
+++ b/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
@@ -19,7 +19,7 @@
         </neonTableColumn>
         <neonTableColumn>
           <name>3e3552f9-9591-45ae-a0bb-a85210c2b382</name>
-          <entityField>UID</entityField>
+          <entityField>TITLE</entityField>
         </neonTableColumn>
         <neonTableColumn>
           <name>307dfdad-a0b2-436f-b8a1-9825821dba0c</name>
diff --git a/neonView/EmployeeMain_view/EmployeeMain_view.aod b/neonView/EmployeeMain_view/EmployeeMain_view.aod
index ce9851ad9aed43497e71f8f2ca8afff081a3bc5b..1cbb84296df85b58403b1279cf5f4a87241b3118 100644
--- a/neonView/EmployeeMain_view/EmployeeMain_view.aod
+++ b/neonView/EmployeeMain_view/EmployeeMain_view.aod
@@ -34,10 +34,5 @@
       <entityField>Documents</entityField>
       <view>DocumentFilter_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>aaca4c8c-7953-43d8-9390-53b78d86863a</name>
-      <entityField>StoredSelections</entityField>
-      <view>StoredSelectionFilter_view</view>
-    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/EmployeePreview_view/EmployeePreview_view.aod b/neonView/EmployeePreview_view/EmployeePreview_view.aod
index cbad6667101afd8d381dcc04c3dca3fdb1cf05ba..198c613625f55b8cf69b2094f843b9876ad4fc3e 100644
--- a/neonView/EmployeePreview_view/EmployeePreview_view.aod
+++ b/neonView/EmployeePreview_view/EmployeePreview_view.aod
@@ -12,7 +12,7 @@
       <name>Header</name>
       <iconField>IMAGE</iconField>
       <titleField>NAME_fieldGroup</titleField>
-      <subtitleField>UID</subtitleField>
+      <subtitleField>TITLE</subtitleField>
       <entityField>#ENTITY</entityField>
     </cardViewTemplate>
     <genericViewTemplate>
diff --git a/neonView/StoredSelectionFilter_view/StoredSelectionFilter_view.aod b/neonView/StoredSelectionFilter_view/StoredSelectionFilter_view.aod
deleted file mode 100644
index 9974513f1b52101a6ffc1357761d24e5545a320d..0000000000000000000000000000000000000000
--- a/neonView/StoredSelectionFilter_view/StoredSelectionFilter_view.aod
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
-  <name>StoredSelectionFilter_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <tableViewTemplate>
-      <name>Table</name>
-      <isEditable v="false" />
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTableColumn>
-          <name>713574de-2d9c-4006-93a3-3860fb145c26</name>
-          <entityField>CONTEXT_NAME</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>4cc4d5ff-24cf-46d9-9941-cda11e445a17</name>
-          <entityField>SELECTION_TITLE</entityField>
-        </neonTableColumn>
-      </columns>
-    </tableViewTemplate>
-  </children>
-</neonView>
diff --git a/process/Employee_lib/process.js b/process/Employee_lib/process.js
index ef3273b495502a48ea29ed752400895251dd08a8..99e490486795ffb0288807c8694ffa68746b8bc6 100644
--- a/process/Employee_lib/process.js
+++ b/process/Employee_lib/process.js
@@ -1,3 +1,6 @@
+import("system.logging");
+import("system.db");
+import("Sql_lib");
 import("system.tools");
 
 /**
@@ -29,4 +32,84 @@ EmployeeUtils.getCurrentUserName = function ()
 {
     var user = tools.getCurrentUser();
     return user ? user[tools.TITLE] : null;
+}
+
+EmployeeUtils.sliceUserId = function (pUserId)
+{
+    return pUserId.substr(10, 36);
+}
+
+/**
+ * generates a username from the firstname and lastname with the given structure
+ * 
+ * @param {String} pFirstName
+ * @param {String} pLastName
+ * @param {String} pStructure the structure of the username, special characters:
+ *      f - one letter of the firstname in lowercase
+ *      F - one letter of the firstname in uppsercase
+ *      l - one letter of the lastname in lowercase
+ *      L - one letter of the lastname in uppsercase
+ *      f+ - the complete firstname in lowercase
+ *      F+ - the complete firstname
+ *      l+ - the complete lastname in lowercae
+ *      L+ - the complete lastname 
+ * 
+ * @return {String} the generated username
+ */
+EmployeeUtils.generateUserName = function (pFirstName, pLastName, pStructure)
+{
+    if (!pStructure || (!pFirstName && !pLastName))
+        return null;
+    
+    var firstNameIndex = 0;
+    var lastNameIndex = 0;
+    var userName = pStructure.replace(/(f\+|l\+|f|l)/ig, function (type)
+    {
+        switch (type)
+        {
+            case "f+":
+            return pFirstName.toLowerCase() || "";
+            case "F+":
+                return pFirstName || "";
+            case "l+":
+                return pLastName.toLowerCase()  || "";
+            case "L+":
+                return pLastName || "";
+            case "f":
+                return pFirstName.charAt(firstNameIndex++).toLowerCase() || "";
+            case "F":
+                return pFirstName.charAt(firstNameIndex++).toUpperCase() || "";
+            case "l":
+                return pLastName.charAt(lastNameIndex++).toLowerCase() || "";
+            case "L":
+                return pLastName.charAt(lastNameIndex++).toUpperCase() || "";
+        }
+    });
+    
+    return userName;
+}
+
+/**
+ * checks if an employee is used somewhere
+ * 
+ * @param {String} pContactId the contact id of the user
+ * 
+ * @return {boolean} if the employee has relations
+ */
+EmployeeUtils.hasRelations = function (pContactId)
+{
+    //sql queries with selects on tables where an employee can be used
+    var queries = [
+        SqlCondition.begin()
+            .andPrepare("ACTIVITY.CREATOR", pContactId)
+            .buildSql("select 1 from ACTIVITY"),
+        SqlCondition.begin()
+            .andPrepare("TIMETRACKING.CONTACT_ID", pContactId)
+            .buildSql("select 1 from TIMETRACKING")
+    ];
+    logging.log(queries.toSource())
+    return queries.some(function (sql)
+        {
+            return db.cell(sql) != "";
+        });
 }
\ No newline at end of file
diff --git a/role/PROJECT_Administrator/PROJECT_Administrator.aod b/role/PROJECT_Administrator/PROJECT_Administrator.aod
new file mode 100644
index 0000000000000000000000000000000000000000..49266936de0d7480ee3bcb1c58c4c1d84b0e9a05
--- /dev/null
+++ b/role/PROJECT_Administrator/PROJECT_Administrator.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_Administrator</name>
+  <title>Administrator</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_Everyone/PROJECT_Everyone.aod b/role/PROJECT_Everyone/PROJECT_Everyone.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f14d5573e8636f6ba242e101e0debbafbd7e23ef
--- /dev/null
+++ b/role/PROJECT_Everyone/PROJECT_Everyone.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_Everyone</name>
+  <title>Everyone</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_FieldStaff/PROJECT_FieldStaff.aod b/role/PROJECT_FieldStaff/PROJECT_FieldStaff.aod
new file mode 100644
index 0000000000000000000000000000000000000000..5dafdb429b00e80d5240f8919a1c2807fffc6ad8
--- /dev/null
+++ b/role/PROJECT_FieldStaff/PROJECT_FieldStaff.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_FieldStaff</name>
+  <title>Field staff</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_HumanResources/PROJECT_HumanResources.aod b/role/PROJECT_HumanResources/PROJECT_HumanResources.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3f8a7fd6594d4240ab99cefaf74299c5e7f04150
--- /dev/null
+++ b/role/PROJECT_HumanResources/PROJECT_HumanResources.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_HumanResources</name>
+  <title>Human Resources</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_Marketing/PROJECT_Marketing.aod b/role/PROJECT_Marketing/PROJECT_Marketing.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f28c9ae8f6709bd9259e4c27e44eff8960812378
--- /dev/null
+++ b/role/PROJECT_Marketing/PROJECT_Marketing.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_Marketing</name>
+  <title>Marketing</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_OfficeStaff/PROJECT_OfficeStaff.aod b/role/PROJECT_OfficeStaff/PROJECT_OfficeStaff.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9b70512446b0341a4d9faf6500f963b548f1c745
--- /dev/null
+++ b/role/PROJECT_OfficeStaff/PROJECT_OfficeStaff.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_OfficeStaff</name>
+  <title>Office staff</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_Project/PROJECT_Project.aod b/role/PROJECT_Project/PROJECT_Project.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ecc4f7aae414ccb4a5666e7e85517cbb967e2d8a
--- /dev/null
+++ b/role/PROJECT_Project/PROJECT_Project.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_Project</name>
+  <title>Project</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_ProjectManagement/PROJECT_ProjectManagement.aod b/role/PROJECT_ProjectManagement/PROJECT_ProjectManagement.aod
new file mode 100644
index 0000000000000000000000000000000000000000..8016375c8bea14a5dcbf700fef8d73a2594f49eb
--- /dev/null
+++ b/role/PROJECT_ProjectManagement/PROJECT_ProjectManagement.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_ProjectManagement</name>
+  <title>Project Management</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_Resource/PROJECT_Resource.aod b/role/PROJECT_Resource/PROJECT_Resource.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e6904e26c263922ce1ebc0fd76ffb6fd708170fd
--- /dev/null
+++ b/role/PROJECT_Resource/PROJECT_Resource.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_Resource</name>
+  <title>Resource</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_Service/PROJECT_Service.aod b/role/PROJECT_Service/PROJECT_Service.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7d586ddd20ca149d4848ed62e3ef19a747831c53
--- /dev/null
+++ b/role/PROJECT_Service/PROJECT_Service.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_Service</name>
+  <title>Service</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>
diff --git a/role/PROJECT_Support/PROJECT_Support.aod b/role/PROJECT_Support/PROJECT_Support.aod
new file mode 100644
index 0000000000000000000000000000000000000000..39c787876828fb6d9faeb1e18e1270c6a862fad1
--- /dev/null
+++ b/role/PROJECT_Support/PROJECT_Support.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0">
+  <name>PROJECT_Support</name>
+  <title>Support</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+</role>