diff --git a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/create_DSGVO.xml b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/create_DSGVO.xml
index 935d30e757939d4fae6af0ef7a4e918a64827c58..403ebc547c1cc6be0d2369a64cb7d73100921719 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/create_DSGVO.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/create_DSGVO.xml
@@ -2,21 +2,11 @@
 <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
     <changeSet author="m.hofmann" id="e6b32d7d-298c-44a3-901f-88baa77cb6c3">
         <createTable tableName="DSGVO">
-            
             <column name="DSGVOID" type="CHAR(36)">
                 <constraints primaryKey="true" primaryKeyName="PK_DSGVO_DSGVOID"/>
             </column>
-            <column name="USER_NEW" type="NVARCHAR(50)">
-                <constraints nullable="false"/>
-            </column>
-            <column name="DATE_NEW" type="TIMESTAMP">
-                <constraints nullable="false"/>
-            </column>
-            <column name="USER_EDIT" type="NVARCHAR(50)" />
-            <column name="DATE_EDIT" type="TIMESTAMP" />
             
-            <column name="TABLENAME" type="CHAR(36)" />
-            <column name="TYPE" type="NVARCHAR(36)"/>
+            <column name="TYPE" type="CHAR(36)"/>
             <column name="ROW_ID" type="CHAR(36)" />
             
             <column name="STATUORITYSOURCE" type="CHAR(36)" />
@@ -27,7 +17,15 @@
             <column name="CONTACT_ID" type="CHAR(36)">
                 <constraints nullable="false"/>
             </column>
-
+            
+            <column name="USER_NEW" type="NVARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="DATE_NEW" type="TIMESTAMP">
+                <constraints nullable="false"/>
+            </column>
+            <column name="USER_EDIT" type="NVARCHAR(50)" />
+            <column name="DATE_EDIT" type="TIMESTAMP" />
         </createTable>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvoType_keyword.xml b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvoType_keyword.xml
index 64e53e6ded5909fa50f79c8445a94dac43f9b244..cd1052e3d95397b440f8a5fe73f62e542864f51d 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvoType_keyword.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvoType_keyword.xml
@@ -3,7 +3,7 @@
     <changeSet author="m.hofmann" id="e6b32d7d-298c-44a3-901f-88baa77cb6c3">
         <insert tableName="AB_KEYWORD_ENTRY">
             <column name="AB_KEYWORD_ENTRYID" value="e72a7d5b-7608-4c87-a977-d4a8994e45b4"/>
-            <column name="KEYID" value="DSGVONAMES"/>
+            <column name="KEYID" value="TYPE_NAME"/>
             <column name="TITLE" value="Names"/>
             <column name="CONTAINER" value="DSGVOType"/>
             <column name="SORTING" valueNumeric="0"/>
@@ -12,8 +12,8 @@
         </insert>
         <insert tableName="AB_KEYWORD_ENTRY">
             <column name="AB_KEYWORD_ENTRYID" value="c38a3169-63f8-41f7-88a7-3358b2519a4a"/>
-            <column name="KEYID" value="DSGVOPERSONAL"/>
-            <column name="TITLE" value="other personal data"/>
+            <column name="KEYID" value="TYPE_BIRTH"/>
+            <column name="TITLE" value="Birthday"/>
             <column name="CONTAINER" value="DSGVOType"/>
             <column name="SORTING" valueNumeric="1"/>
             <column name="ISACTIVE" valueNumeric="1"/>
@@ -21,12 +21,30 @@
         </insert>
         <insert tableName="AB_KEYWORD_ENTRY">
             <column name="AB_KEYWORD_ENTRYID" value="ffb1a706-348c-42cd-8b13-6f5e74181ba3"/>
-            <column name="KEYID" value="DSGVOATTR"/>
-            <column name="TITLE" value="Attributes"/>
+            <column name="KEYID" value="TYPE_ADDRESS"/>
+            <column name="TITLE" value="Address"/>
             <column name="CONTAINER" value="DSGVOType"/>
             <column name="SORTING" valueNumeric="2"/>
             <column name="ISACTIVE" valueNumeric="1"/>
             <column name="ISESSENTIAL" valueNumeric="1"/>
         </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="a64796f6-e2b7-4c36-b9da-13df09d9ffed"/>
+            <column name="KEYID" value="TYPE_COMM"/>
+            <column name="TITLE" value="Communication"/>
+            <column name="CONTAINER" value="DSGVOType"/>
+            <column name="SORTING" valueNumeric="3"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="3d0af900-1ab6-4725-bf39-b80581d3907f"/>
+            <column name="KEYID" value="TYPE_ATTR"/>
+            <column name="TITLE" value="Attribute"/>
+            <column name="CONTAINER" value="DSGVOType"/>
+            <column name="SORTING" valueNumeric="4"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvotablename_keyword.xml b/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvotablename_keyword.xml
deleted file mode 100644
index 3ed74f369bb2181e7a3376cc210d284e55c271e2..0000000000000000000000000000000000000000
--- a/.liquibase/Data_alias/basic/2019.1.4/DSGVO/init_dsgvotablename_keyword.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.1" encoding="UTF-8" standalone="no"?>
-<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
-    <changeSet author="m.hofmann" id="e6b32d7d-298c-44a3-901f-88baa77cb6c3">
-        <insert tableName="AB_KEYWORD_ENTRY">
-            <column name="AB_KEYWORD_ENTRYID" value="3ae54e09-7ad1-462e-a908-a7ccfbdebd91"/>
-            <column name="KEYID" value="DSGVOADDRDATA"/>
-            <column name="TITLE" value="Address data"/>
-            <column name="CONTAINER" value="DSGVOTablename"/>
-            <column name="SORTING" valueNumeric="0"/>
-            <column name="ISACTIVE" valueNumeric="1"/>
-            <column name="ISESSENTIAL" valueNumeric="1"/>
-        </insert>
-        <insert tableName="AB_KEYWORD_ENTRY">
-            <column name="AB_KEYWORD_ENTRYID" value="d4583f1b-787e-4890-ab65-df53ca3e1153"/>
-            <column name="KEYID" value="DSGVOCOMM"/>
-            <column name="TITLE" value="Communication data"/>
-            <column name="CONTAINER" value="DSGVOTablename"/>
-            <column name="SORTING" valueNumeric="1"/>
-            <column name="ISACTIVE" valueNumeric="1"/>
-            <column name="ISESSENTIAL" valueNumeric="1"/>
-        </insert>
-        <insert tableName="AB_KEYWORD_ENTRY">
-            <column name="AB_KEYWORD_ENTRYID" value="012270f0-b975-489d-883b-b38317390228"/>
-            <column name="KEYID" value="DSGVOATTR"/>
-            <column name="TITLE" value="Attribute"/>
-            <column name="CONTAINER" value="DSGVOTablename"/>
-            <column name="SORTING" valueNumeric="2"/>
-            <column name="ISACTIVE" valueNumeric="1"/>
-            <column name="ISESSENTIAL" valueNumeric="1"/>
-        </insert>
-        <insert tableName="AB_KEYWORD_ENTRY">
-            <column name="AB_KEYWORD_ENTRYID" value="16fc2669-8052-4d3b-8ed2-a670a1e9f5b0"/>
-            <column name="KEYID" value="DSGVOPERSONAL"/>
-            <column name="TITLE" value="Personal data"/>
-            <column name="CONTAINER" value="DSGVOTablename"/>
-            <column name="SORTING" valueNumeric="3"/>
-            <column name="ISACTIVE" valueNumeric="1"/>
-            <column name="ISESSENTIAL" valueNumeric="1"/>
-        </insert>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2019.1.4/changelog.xml b/.liquibase/Data_alias/basic/2019.1.4/changelog.xml
index aea96881336c2d7f8725d176a202c50ef9d446d8..c4533ded9096b14e80c1fc7dabdb8a54530db0dc 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/changelog.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/changelog.xml
@@ -156,7 +156,6 @@
     <include relativeToChangelogFile="true" file="DSGVO/create_DSGVO.xml"/>
     <include relativeToChangelogFile="true" file="DSGVO/init_statuoritysource_keyword.xml"/>
     <include relativeToChangelogFile="true" file="DSGVO/init_purpose_keyword.xml"/>
-    <include relativeToChangelogFile="true" file="DSGVO/init_dsgvotablename_keyword.xml"/>
     <include relativeToChangelogFile="true" file="DSGVO/init_dsgvoType_keyword.xml"/>
     
     <include relativeToChangelogFile="true" file="AditoBasic/init_UnlinkedMail.xml"/>
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 3fdcab6a247ac61a7b15b94cba3b782b5df395a7..7327ad84d59c7b9bf01450541489cda665dacfcf 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -10003,20 +10003,6 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
-              <entityFieldDb>
-                <name>TABLENAME</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
               <entityFieldDb>
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
@@ -10147,7 +10133,7 @@
                 <name>TYPE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
+                <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
diff --git a/entity/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod
index 0b86d527f5fb94a44414e72131835339eb7e538c..a94ab78bbb731fd5a70cb3e29a758c8862c6309c 100644
--- a/entity/DSGVO_entity/DSGVO_entity.aod
+++ b/entity/DSGVO_entity/DSGVO_entity.aod
@@ -4,6 +4,10 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <icon>VAADIN:LOCK</icon>
   <title>Data Privacy</title>
+  <siblings>
+    <element>Address_entity</element>
+    <element>Communication_entity</element>
+  </siblings>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
@@ -48,7 +52,6 @@
       <description>The statutory source of the private data. Keyword Statuoritysource</description>
       <consumer>KeywordStatuoritysource</consumer>
       <groupable v="true" />
-      <linkedContext>KeywordEntry</linkedContext>
       <mandatory v="true" />
       <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/statuoritysource/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -58,20 +61,9 @@
       <description>The purpose of the private data. Keyword purpose</description>
       <consumer>KeywordPurpose</consumer>
       <groupable v="true" />
-      <linkedContext>KeywordEntry</linkedContext>
       <mandatory v="true" />
       <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/purpose/displayValueProcess.js</displayValueProcess>
     </entityField>
-    <entityField>
-      <name>TABLENAME</name>
-      <title>Source</title>
-      <consumer>KeywordTablename</consumer>
-      <groupable v="true" />
-      <linkedContext>KeywordEntry</linkedContext>
-      <mandatory v="true" />
-      <dropDownProcess>%aditoprj%/entity/DSGVO_entity/entityfields/tablename/dropDownProcess.js</dropDownProcess>
-      <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/tablename/displayValueProcess.js</displayValueProcess>
-    </entityField>
     <entityField>
       <name>VALID_TO</name>
       <title>Valid to</title>
@@ -140,8 +132,8 @@
       <name>TYPE</name>
       <title>Type</title>
       <description>What kind of data is being saved, e.g. Mail, Home address</description>
-      <mandatory v="true" />
-      <dropDownProcess>%aditoprj%/entity/DSGVO_entity/entityfields/type/dropDownProcess.js</dropDownProcess>
+      <consumer>KeywordDSGVOType</consumer>
+      <state>READONLY</state>
       <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/type/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityParameter>
@@ -184,6 +176,7 @@
           <isObjectAction v="false" />
           <isSelectionAction v="true" />
           <iconId>VAADIN:ASTERISK</iconId>
+          <state>INVISIBLE</state>
           <stateProcess>%aditoprj%/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/stateProcess.js</stateProcess>
         </entityActionField>
       </children>
@@ -191,11 +184,12 @@
     <entityField>
       <name>VALUE</name>
       <title>Value</title>
+      <contentType>LONG_TEXT</contentType>
       <dropDownProcess>%aditoprj%/entity/DSGVO_entity/entityfields/value/dropDownProcess.js</dropDownProcess>
       <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/value/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityConsumer>
-      <name>KeywordTablename</name>
+      <name>KeywordDSGVOType</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
@@ -204,7 +198,7 @@
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
-          <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/keywordtablename/children/containername_param/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
@@ -224,13 +218,13 @@
           <name>UID.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>ROW_ID.value</name>
+          <name>CONTACT_ID.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>TABLENAME.value</name>
+          <name>TYPE.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>TYPE.value</name>
+          <name>ROW_ID.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>VALUE.value</name>
@@ -244,9 +238,6 @@
         <jDitoRecordFieldMapping>
           <name>VALID_TO.value</name>
         </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>CONTACT_ID.value</name>
-        </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>DATE_NEW.value</name>
         </jDitoRecordFieldMapping>
diff --git a/entity/DSGVO_entity/entityfields/keywordtablename/children/containername_param/valueProcess.js b/entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js
similarity index 54%
rename from entity/DSGVO_entity/entityfields/keywordtablename/children/containername_param/valueProcess.js
rename to entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js
index f34054e29b748492f399d701a371f1be574250d8..55a2d94f1039eff44d908d07fb958802af38838b 100644
--- a/entity/DSGVO_entity/entityfields/keywordtablename/children/containername_param/valueProcess.js
+++ b/entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.result");
 import("KeywordRegistry_basic");
 
-result.string($KeywordRegistry.DSGVOTablename());
\ No newline at end of file
+result.string($KeywordRegistry.DSGVOType());
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/row_id/valueProcess.js b/entity/DSGVO_entity/entityfields/row_id/valueProcess.js
index 4064de80b9b8d06a2d7fa7e0e1dde44646541f5e..589f1bc5e352c796db82511dbdf5a6d61cb91bb7 100644
--- a/entity/DSGVO_entity/entityfields/row_id/valueProcess.js
+++ b/entity/DSGVO_entity/entityfields/row_id/valueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("system.result");
 import("DataPrivacy_lib");
 
-result.object(DataPrivacyUtils.getSpecificRowId(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME")));
\ No newline at end of file
+//result.object(DataPrivacyUtils.getSpecificRowId(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME")));
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/tablename/displayValueProcess.js b/entity/DSGVO_entity/entityfields/tablename/displayValueProcess.js
deleted file mode 100644
index 63d3863e5bec976852de864fc1aa68d0ee2086dc..0000000000000000000000000000000000000000
--- a/entity/DSGVO_entity/entityfields/tablename/displayValueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.vars");
-import("KeywordRegistry_basic");
-import("Keyword_lib");
-import("system.result");
-
-if(vars.get("$field.TABLENAME"))
-result.string(KeywordUtils.getViewValue($KeywordRegistry.DSGVOTablename(), vars.get("$field.TABLENAME")));
diff --git a/entity/DSGVO_entity/entityfields/tablename/dropDownProcess.js b/entity/DSGVO_entity/entityfields/tablename/dropDownProcess.js
deleted file mode 100644
index fd68131404ceabed5586d46673c1b4d533ab24d7..0000000000000000000000000000000000000000
--- a/entity/DSGVO_entity/entityfields/tablename/dropDownProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.object(KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.DSGVOTablename()));
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/type/displayValueProcess.js b/entity/DSGVO_entity/entityfields/type/displayValueProcess.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..952ed787e8168e45e8e294a26865f5ef569b78b7 100644
--- a/entity/DSGVO_entity/entityfields/type/displayValueProcess.js
+++ b/entity/DSGVO_entity/entityfields/type/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+import("Keyword_lib");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.DSGVOType(), vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/type/dropDownProcess.js b/entity/DSGVO_entity/entityfields/type/dropDownProcess.js
deleted file mode 100644
index d61af3f4c85bed9d2a8887dbbb93c38d69c46697..0000000000000000000000000000000000000000
--- a/entity/DSGVO_entity/entityfields/type/dropDownProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.result");
-import("system.vars");
-import("DataPrivacy_lib");
-
-result.object(DataPrivacyUtils.getTypes(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME")));
\ No newline at end of file
diff --git a/entity/DSGVO_entity/entityfields/value/dropDownProcess.js b/entity/DSGVO_entity/entityfields/value/dropDownProcess.js
index 280575568f44739bc06bac2c7c9a3154fa609cc5..af7324e525b8bdf43ae8a788401bf4ca9d26c1b6 100644
--- a/entity/DSGVO_entity/entityfields/value/dropDownProcess.js
+++ b/entity/DSGVO_entity/entityfields/value/dropDownProcess.js
@@ -2,6 +2,6 @@ import("system.result");
 import("system.vars");
 import("DataPrivacy_lib");
 
-var res = DataPrivacyUtils.getValues(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME"), vars.get("$field.TYPE"));
+//var res = DataPrivacyUtils.getValues(vars.get("$param.ContactId_param"), vars.get("$field.TABLENAME"), vars.get("$field.TYPE"));
 
-result.object(res);
\ No newline at end of file
+//result.object(res);
\ No newline at end of file
diff --git a/entity/DSGVO_entity/recordcontainers/db/onDBInsert.js b/entity/DSGVO_entity/recordcontainers/db/onDBInsert.js
index 09754cf5860927f9a6380fa0a8dad7fa1c185b87..91a2439d76a87078fe11b740c5972d3f8e5c395b 100644
--- a/entity/DSGVO_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/DSGVO_entity/recordcontainers/db/onDBInsert.js
@@ -5,7 +5,7 @@ import("system.neon");
 import("system.vars");
 import("system.util");
 
-
+/*
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
     var cols = ["USER_NEW" , "USER_EDIT" , "DSGVOID" , "ROW_ID" , "DATE_NEW" , 
@@ -18,6 +18,10 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
     // KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.DSGVOUse(), "DSGVO.USE");
     db.insertData("DSGVO", cols, null, vals);
 }
+
+
+/*
+
     // TODO Eintrag in DSGVO Tabelle
     
     /*
diff --git a/entity/DSGVO_entity/recordcontainers/jdito/contentProcess.js b/entity/DSGVO_entity/recordcontainers/jdito/contentProcess.js
index 88b46eabc2ff1992fc9404be5ce4a7423d8eaf1f..40d2bd73c0fa0e3eec4bc1c2fe34a20bcd121229 100644
--- a/entity/DSGVO_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/DSGVO_entity/recordcontainers/jdito/contentProcess.js
@@ -11,9 +11,19 @@ import("Attribute_lib");
 import("DataPrivacy_lib");
 
 var contactId = vars.get("$param.ContactId_param");
+var filterCond;
 
-DataPrivacyUtils.fillMissing(contactId)
+// TODO: maybe load data directly without collect for "$local.idvalues" -> use other function?? (performance)
+if (vars.exists("$local.idvalues") && vars.get("$local.idvalues") && vars.get("$local.idvalues").length > 0)
+{
+    filterCond = SqlCondition.begin().andIn("DSGVO.DSGVOID", vars.get("$local.idvalues"));
+}
+logging.log(JSON.stringify(filterCond, null, "\t"))
+var data = DataPrivacyUtils.collectAll(contactId, filterCond)
+logging.log(JSON.stringify(data, null, "\t"))
+result.object(data);
 
+/*
 var recordCond = SqlCondition.begin();
 
 recordCond.andPrepare("DSGVO.CONTACT_ID", contactId);
@@ -89,4 +99,4 @@ function _groupData(pData, pContactId)
         
         return pRow;
     });
-}
\ No newline at end of file
+}*/
\ No newline at end of file
diff --git a/entity/DSGVO_entity/recordcontainers/jdito/onInsert.js b/entity/DSGVO_entity/recordcontainers/jdito/onInsert.js
index fc04b1b040917cb7b263ee06e4b90640904c897f..956568f269147c11b26322e6139a9bb22f2034d5 100644
--- a/entity/DSGVO_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/DSGVO_entity/recordcontainers/jdito/onInsert.js
@@ -7,7 +7,6 @@ var columns = [
     "PURPOSE",
     "ROW_ID",
     "STATUORITYSOURCE",
-    "TABLENAME",
     "TYPE",
     "DSGVOID",
     "USER_NEW",
@@ -19,11 +18,10 @@ var values = [
     vars.get("$field.PURPOSE"),
     vars.get("$field.ROW_ID"),
     vars.get("$field.STATUORITYSOURCE"),
-    vars.get("$field.TABLENAME"),
     vars.get("$field.TYPE"),
     vars.get("$field.UID"),
     vars.get("$field.USER_NEW"),
     vars.get("$field.VALID_TO")
 ];
 
-db.insertData("DSGVO", columns, null, values);
\ No newline at end of file
+//db.insertData("DSGVO", columns, null, values);
\ No newline at end of file
diff --git a/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js b/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js
index 87ad3e808da6293f20cad1e66f01ad88c4ce70a1..17d5c99dfbec026e7a487a2624d3df61c8119b72 100644
--- a/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js
@@ -9,7 +9,6 @@ var columns = [
     "PURPOSE",
     "ROW_ID",
     "STATUORITYSOURCE",
-    "TABLENAME",
     "TYPE",
     "USER_NEW",
     "USER_EDIT",
@@ -22,7 +21,6 @@ var values = [
     vars.get("$field.PURPOSE"),
     vars.get("$field.ROW_ID"),
     vars.get("$field.STATUORITYSOURCE"),
-    vars.get("$field.TABLENAME"),
     vars.get("$field.TYPE"),
     vars.get("$field.USER_NEW"),
     vars.get("$field.USER_EDIT"),
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index c37ae448db37e0a576a32c13d46021f175bc425c..235d3961f0c005f1d9466ac52175ad204682e28e 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -417,7 +417,7 @@
         <entityDependency>
           <name>ae2c4712-5513-4c0d-911a-532f50483c76</name>
           <entityName>DSGVO_entity</entityName>
-          <fieldName>KeywordTablename</fieldName>
+          <fieldName>KeywordDSGVOType</fieldName>
           <isConsumer v="false" />
         </entityDependency>
         <entityDependency>
diff --git a/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_progress.displayvalue/expression.js b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_progress.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..4666f5143991d0e7ade783064a6094470f7f397e
--- /dev/null
+++ b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_progress.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.taskProgress(), "TASK.PROGRESS");
+result.string(sql);
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_status.displayvalue/expression.js b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_status.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ff962697835ef0243dc987da40063bfc1dee5b6
--- /dev/null
+++ b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_status.displayvalue/expression.js
@@ -0,0 +1,2 @@
+// do not use this, because TaskUtils.getTypeStatusKeyword(vars.get("$field.TYPE")) has to be called, which is not possible in a subselect.
+// --> only use display value process
\ No newline at end of file
diff --git a/neonContext/DSGVO/DSGVO.aod b/neonContext/DSGVO/DSGVO.aod
index 4e73d37625c7440122420f24b6a5f0f9caea4d4e..3b01fff52f6de6d910e943d3aace9fd3dcf4a139 100644
--- a/neonContext/DSGVO/DSGVO.aod
+++ b/neonContext/DSGVO/DSGVO.aod
@@ -4,6 +4,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterview>DSGVOFilter_view</filterview>
   <editview>DSGVOEdit_view</editview>
+  <preview>DSGVOPreview_view</preview>
   <entity>DSGVO_entity</entity>
   <references>
     <neonViewReference>
@@ -18,5 +19,9 @@
       <name>ed1cb100-0801-4280-a1a2-57ad858de187</name>
       <view>DSGVOPreviewAnonym_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>4cf0e8c3-900a-43f1-a2c0-3f8990644b64</name>
+      <view>DSGVOPreview_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
index d5645e7b9eadcbf3e05ac4b3c26b1865fd2296af..0c4ab8073cd4a1fc31dc75713a8c23ac4f0a7b92 100644
--- a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
+++ b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
@@ -14,10 +14,6 @@
       <editMode v="true" />
       <entityField>#ENTITY</entityField>
       <fields>
-        <entityFieldLink>
-          <name>05722873-d882-41fa-9030-aa64df9dc98a</name>
-          <entityField>TABLENAME</entityField>
-        </entityFieldLink>
         <entityFieldLink>
           <name>167afc20-3e2c-452d-9300-f5e105bc85e4</name>
           <entityField>TYPE</entityField>
diff --git a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..70425ab3bc1ce07b97c36c28dc1aacb843357cb4
--- /dev/null
+++ b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod
@@ -0,0 +1,40 @@
+<?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>DSGVOPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Info</name>
+      <showDrawer v="true" />
+      <drawerCaption>Details</drawerCaption>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>bad933a4-c407-410d-989b-8970e95a035a</name>
+          <entityField>TYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>526df892-47c5-4f43-8df2-9dde86193c50</name>
+          <entityField>STATUORITYSOURCE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>52e76727-9257-4a43-8b2a-7fa60a7ada8f</name>
+          <entityField>PURPOSE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>db62ba6a-91e9-42e3-a95c-7259c237c290</name>
+          <entityField>VALID_TO</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>a66196f5-c136-493c-8b82-13cf629f4450</name>
+          <entityField>VALUE</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js
index 36b69c7ea52e0544c18732c86b7b81f20019cdfd..df68da9cf9e454801c6d1efa4d46db7532ad3128 100644
--- a/process/Attribute_lib/process.js
+++ b/process/Attribute_lib/process.js
@@ -225,10 +225,11 @@ function AttributeRelationUtils () {}
  * @param {String} pObjectRowId row-id of the dataset
  * @param {String} [pObjectType=null] object-type
  * @param {String} [pGetViewValue=false] if true the values are resolved and formatted
+ * @param {String} [pGetAttrname=false] if true the attributename is also returned
  * 
- * @return {String|null} the value of the attribute
+ * @return {String|String[]|null} the value of the attribute or an array of attrname and value [attrname, value] (if pGetAttrname is true)
  */
-AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObjectType, pGetViewValue)
+AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObjectType, pGetViewValue, pGetAttrname)
 {
     var attrCond = SqlCondition.begin()
         .andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId)
@@ -241,6 +242,10 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj
         "AB_ATTRIBUTE.DROPDOWNDEFINITION", 
         "COMBOVAL.ATTRIBUTE_NAME"
     ];
+    
+    if (pGetAttrname)
+        defaultFields.push("AB_ATTRIBUTE.ATTRIBUTE_NAME");    
+    
     var valueFields = AttributeTypeUtil.getAllDatabaseFields();
     var attributeSql = attrCond.buildSql("select " + defaultFields.join(", ") + ", " + valueFields.join(", ")
         + " from AB_ATTRIBUTERELATION join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID"
@@ -256,6 +261,9 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj
     else if (pGetViewValue)
         value = AttributeTypeUtil.getAttributeViewValue(attributeValues[0].trim(), value, attributeValues[1]);
     
+    if (pGetAttrname)
+        value = [attributeValues[3], value];
+    
     return value;
 }
 
@@ -264,10 +272,12 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj
  * 
  * @param {String} pObjectRowId object rowid
  * @param {String} [pObjectType=null] object-type
- * @param {String} [pUseAttributeIds=false] if true the ids are used instead of the full attribute names
- * @param {String} [pUseIdValues=false] if true the values are not resolved or formatted
+ * @param {String} [pUseAttributeIds=0] if 0 the full attribute names are returned
+ *                                      if 1 the ids are used instead of the full attribute names
+ *                                      if 2 the ids AND the full attribute name is returned
+ * @param {String} [pUseIdValues=false] if true the values are not resolved or formatted [attributeId, attributeName, value]
  * 
- * @return {String[][]} two-dimensional array a row is [attributeId|attributeName, value]
+ * @return {String[][]} two-dimensional array a row is [attributeId|attributeName, value] (or [attributeId, attributeName, value])
  */
 AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, pUseAttributeIds, pUseIdValues)
 {
@@ -291,11 +301,21 @@ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, p
     var attributeValues = db.table(attributeSql).map(function (row) 
     {
         let attribute = row[0];
-        if (!pUseAttributeIds)
+        let attrname;
+        if (pUseAttributeIds == 0 || pUseAttributeIds == 2)
         {
+            var tmpAttrname = "";
             if (!(attribute in attributeNameMap))
                 attributeNameMap[attribute] = AttributeUtil.getFullAttributeName(attribute);
-            attribute = attributeNameMap[attribute];
+            tmpAttrname = attributeNameMap[attribute];
+            
+            // if mode 0, return only the name
+            if (pUseAttributeIds == 0)
+                attribute = tmpAttrname
+            
+            // if mode 2 return both
+            if (pUseAttributeIds == 2)
+                attrname = tmpAttrname
         }
         let value = row[AttributeTypeUtil.getTypeColumnIndex(row[1]) + defaultFields.length];
         if (!pUseIdValues && row[1].trim() == $AttributeTypes.COMBO)
@@ -303,7 +323,16 @@ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, p
         else if (!pUseIdValues)
             value = AttributeTypeUtil.getAttributeViewValue(row[1].trim(), value, row[2]);
         
-        return [attribute, value];
+        // add attrname only if id AND attrname is needed
+        var data = [];
+        
+        data.push(attribute);
+
+        if (attrname)
+            data.push(attrname);
+        
+        data.push(value);
+        return data;
     });
     
     return attributeValues;
diff --git a/process/DataPrivacy_lib/process.js b/process/DataPrivacy_lib/process.js
index f180182469741bc7b000df8f4791bb6e15ce538c..938e4846a10a7fafcabd964e63dff4c3b0a9d7a8 100644
--- a/process/DataPrivacy_lib/process.js
+++ b/process/DataPrivacy_lib/process.js
@@ -23,10 +23,13 @@ function DataPrivacyType(pKeyId, pGetValuesCallback)
 }
 
 /**
- * get all possible validation types or one specific
- * @param {String} [pKey=undefined] if provided, this function returns only the validation type with this key
+ * NOTE: The Key in the cache has to be the same as the first argument (pKeyId)
+ * NOTE2: These Types have to exist also as Keyord!
  * 
- * @return {Object|DataPrivacyType} object containing all WsValidationTypes or one specific WsValidationType
+ * get all possible DataPrivacyTypes or one specific
+ * @param {String} [pKey=undefined] if provided, this function returns only the DataPrivacyTypes with this key
+ * 
+ * @return {Object|DataPrivacyType} object containing all DataPrivacyType or one specific DataPrivacyType
  */
 DataPrivacyType.get = function(pKey)
 {
@@ -37,7 +40,7 @@ DataPrivacyType.get = function(pKey)
             TYPE_BIRTH: new DataPrivacyType("TYPE_BIRTH", _getBirthday),
             TYPE_ADDRESS: new DataPrivacyType("TYPE_ADDRESS", _getAddress),
             TYPE_COMM: new DataPrivacyType("TYPE_COMM", _getCommunication),
-            TYPE_ATTR: new DataPrivacyType("TYPE_ATTR")//, _getAttribute)
+            TYPE_ATTR: new DataPrivacyType("TYPE_ATTR", _getAttribute)
             // Picture also?
             // Gender also?
             // Orgs of the person also?
@@ -50,9 +53,7 @@ DataPrivacyType.get = function(pKey)
     
     function _getName(pContactId, pPersonId) {
         // Use PersonId as ID, since the data comes from the person
-        logging.log(JSON.stringify(SqlCondition.begin()
-                    .andPrepareIfSet("CONTACT.CONTACTID", pContactId)
-                    .andPrepareIfSet("PERSON.PERSONID", pPersonId), null, "\t"))
+       
         // TODO: with loadEntity
         var persData = db.array(db.ROW, SqlCondition.begin()
                     .andPrepareIfSet("CONTACT.CONTACTID", pContactId)
@@ -100,7 +101,7 @@ DataPrivacyType.get = function(pKey)
         {
             // TODO Addresse formatieren
             var addrVal = "";
-            pAddr.forEach(function(entry)
+            pAddr.slice(1).forEach(function(entry)
             {
                 addrVal += entry + " ";
             });
@@ -127,6 +128,28 @@ DataPrivacyType.get = function(pKey)
             }
         });
     }
+    
+    function _getAttribute(pContactId, pAttributeId) {
+        var attributeData = [];
+        if (pContactId)
+        {
+            attributeData = AttributeRelationUtils.getAllAttributes(pContactId, "Person", 2);
+        }
+        else if(pAttributeId)
+        {
+            attributeData = AttributeRelationUtils.getAttribute(pAttributeId, pContactId, "Person", true, true);
+            if (attributeData)
+                attributeData = [[pAttributeId].concat(attributeData)]
+        }
+                
+        return attributeData.map(function(pAttr)
+        {
+            return {
+                value: pAttr[1] + ": " + pAttr[2],
+                id: pAttr[0]
+            }
+        });
+    }
 }
 
 
@@ -138,11 +161,12 @@ DataPrivacyType.get = function(pKey)
  */
 function DataPrivacyUtils() {}
 
-DataPrivacyUtils.getDSGVO = function(pContactId, pAlternateSelectString)
+DataPrivacyUtils.getDSGVO = function(pContactId, pFilterCond)
 {
     var cond = SqlCondition.begin().andPrepare("DSGVO.CONTACT_ID", pContactId);
-    var select = (pAlternateSelectString ? pAlternateSelectString : 
-                    "DSGVOID," +               // 0
+    cond.andSqlCondition(pFilterCond);
+    
+    var select =    "DSGVOID," +               // 0
                     "CONTACT_ID," +            // 1
                     "TYPE," +                  // 2
                     "ROW_ID," +                // 3
@@ -153,21 +177,30 @@ DataPrivacyUtils.getDSGVO = function(pContactId, pAlternateSelectString)
                     "DATE_NEW," +              // 8
                     "DATE_EDIT," +             // 9
                     "USER_NEW," +              // 10
-                    "USER_EDIT ")              // 11
+                    "USER_EDIT "               // 11
 
     
     var data = db.table(cond.buildSql("select " + select + " from DSGVO", "1 = 2"));
     return data;
 }
-
-
-DataPrivacyUtils.fillMissing = function(pContactId) 
+/**
+ * If filter conditin is provided, NO inserts are done
+ */
+DataPrivacyUtils.collectAll = function(pContactId, pFilterCond) 
 {
-    var contactDSGVO = DataPrivacyUtils.getDSGVO(pContactId, "TYPE, ROW_ID");
+    var contactDSGVO = DataPrivacyUtils.getDSGVO(pContactId, pFilterCond);
+    
+    // copy data (with .slice()) as we iterate through it and we should not add values while doing this
+    // NOTE that the arrays inside of contactDSGVO still point to the same arrays as in returnDSGVOData
+    // 
+    // --> contactDSGVO[dat][4] = pRow.value; WILL CHANGE returnDSGVOData[dat][4] ALSO!
+    // (Yes I could also slice each array in contactDSGVO to returnDSGVOData but this would add overhead which is not needed :-)
+    var returnDSGVOData = contactDSGVO.slice();
+    
     var inserts = [];
     var currentUser = vars.getString("$sys.user");
     var now = vars.getString("$sys.date");
-
+    
     for (type in DataPrivacyType.get())
     {
         // get type object for current type
@@ -176,34 +209,55 @@ DataPrivacyUtils.fillMissing = function(pContactId)
             break;
         
         // load all data of the current type
-
         var data = type.getValues(pContactId);
+        
         data.forEach(function(pRow) 
         {
             // search if it is already in DSGVO table
             var found = false;
             for (dat in contactDSGVO)
             {
-                if (contactDSGVO[dat][0] == type.key && contactDSGVO[dat][1] == pRow.id)
+                if (contactDSGVO[dat][2].trim() == type.key && contactDSGVO[dat][3] == pRow.id)
                 {
                     found = true;
+                    // add the loaded view value
+                    contactDSGVO[dat][4] = pRow.value;
                     break;
                 }
             }
             
-            // if not insert it
-            if (!found)
+            // if not insert it (if not using pFilterCond as in that case wrong inserts would happen)
+            if (!found && !pFilterCond)
             {
+                var newId = util.getNewUUID();
                 // insert
                 inserts.push(["DSGVO",
                              ["DSGVOID", "USER_NEW", "DATE_NEW", "TYPE", "ROW_ID", "CONTACT_ID"],
                              null,
-                             [util.getNewUUID(), currentUser, now, type.key, pRow.id, pContactId]]);
+                             [newId, currentUser, now, type.key, pRow.id, pContactId]]);
+                         
+                // and also insert it in the return data to avoid selecting from DSGVO again
+                returnDSGVOData.push([
+                    newId,          // DSGVOID," +               // 0
+                    pContactId,     // "CONTACT_ID," +            // 1
+                    type.key,       // "TYPE," +                  // 2
+                    pRow.id,        // "ROW_ID," +                // 3
+                    pRow.value,     // "''," +                    // 4 - value
+                    "",             // "STATUORITYSOURCE," +      // 5
+                    "",             // "PURPOSE," +               // 6
+                    "",             // "VALID_TO," +              // 7
+                    now,            // "DATE_NEW," +              // 8
+                    "",             // "DATE_EDIT," +             // 9
+                    currentUser,    // "USER_NEW," +              // 10
+                    "",             // "USER_EDIT "               // 11
+                ])
             }
         });
     }
     
     db.inserts(inserts);
+    
+    return returnDSGVOData
 }
 
 DataPrivacyUtils.getTypes = function(pPerson, pTablename)
@@ -289,7 +343,6 @@ DataPrivacyUtils.getValues = function(pPerson, pTablename, pType)
     }else if(pTablename == $KeywordRegistry.DSGVOTablename$attribute())
     {
         var attr = AttributeRelationUtils.getAllAttributes(pPerson, "Person");
-        logging.log(attr);
         /*attr.forEach(function (entry)
         {
             // TODO muss erst attr was liefern, --> leer
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index aae2082502e46a9f6020d8c25b7bf2e49c2c99aa..0658003f60d5e89f96b1c37bc0a43b115e0f1cc7 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -131,11 +131,6 @@ $KeywordRegistry.permissionCondType = function(){return "PermissionCondType";};
 $KeywordRegistry.permissionAccessType = function(){return "PermissionAccessType";};
 $KeywordRegistry.purpose = function(){return "Purpose";};
 $KeywordRegistry.statuoritysource = function(){return "Statuoritysource";};
-$KeywordRegistry.DSGVOTablename = function() {return "DSGVOTablename";};
-$KeywordRegistry.DSGVOTablename$address = function() {return "DSGVOADDRDATA                       ";};
-$KeywordRegistry.DSGVOTablename$communication = function() {return "DSGVOCOMM                           ";};
-$KeywordRegistry.DSGVOTablename$attribute = function() {return "DSGVOATTR                           ";};
-$KeywordRegistry.DSGVOTablename$personal = function() {return "DSGVOPERSONAL                       ";};
 $KeywordRegistry.DSGVOType = function() {return "DSGVOType";};
 $KeywordRegistry.DSGVOType$names = function() {return "DSGVONAMES                          ";};
 $KeywordRegistry.DSGVOType$personal = function() {return "DSGVOPERSONAL                       ";};
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index cfb5a109638a20414127ffd5e066d2356ccd774e..c77ee066f09443fc807bbd71a5a18ec0fb93b88b 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -147,6 +147,9 @@ SqlCondition.prototype.orAttachPrepared = function(preparedObj) {
  * @return {SqlCondition} current SqlCondition-object
  */
 SqlCondition.prototype.andSqlCondition = function(cond, alternativeCond) {
+    if (!cond)
+        return this
+        
     var otherCondition = cond.toString(alternativeCond);
     if (otherCondition.trim() != "")
     {