diff --git a/entity/KeywordEntry_entity/onValidation.js b/entity/KeywordEntry_entity/onValidation.js
index ae813d018848dcb847a752c1eedb985090518c16..f1f568a35c02d5f14032daa227f765538d92b5a1 100644
--- a/entity/KeywordEntry_entity/onValidation.js
+++ b/entity/KeywordEntry_entity/onValidation.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("system.db");
 import("system.vars");
 import("system.text");
@@ -15,7 +16,7 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
         var newCodeNumber = db.cell(cond.buildSql("select " + maskingHelper.max("AB_KEYWORD_ENTRY.SORTING") + " from AB_KEYWORD_ENTRY", "1 = 2"));
         newCodeNumber = Number(newCodeNumber);//if no number exists till no, start value will be 1 (due to: ++0)
         if (isNaN(newCodeNumber))
-            throw new TypeError();//TODO:add Message
+            throw new TypeError(translate.text("The code number is not a valid number."));
         neon.setFieldValue("$field.SORTING", ++newCodeNumber);
     }
 }
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/recordcontainers/db/onDBUpdate.js b/entity/KeywordEntry_entity/recordcontainers/db/onDBUpdate.js
index 0f9d6cbdbc13c88271967f572ce1709fd1ad6519..d9f8978acd6592e20a2851d1e46b490b2ff398d7 100644
--- a/entity/KeywordEntry_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/KeywordEntry_entity/recordcontainers/db/onDBUpdate.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("system.db");
 import("system.vars");
 import("system.text");
@@ -7,7 +8,7 @@ import("Sql_lib");
 var changedFields = vars.get("$local.changed");
 //whenever the container is changed data that depends on the keyword-container has be "fixed" to keep consistency
 //this could be information like Keyword-attributes or the sorting-position
-//maybe it'd be better to lock KeywordContainer as read-only after creation
+// TODO: maybe it'd be better to lock KeywordContainer as read-only after creation
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && changedFields.indexOf("AB_KEYWORD_ENTRY.CONTAINER") > -1)
 {
     var keyContainer = vars.get("$field.CONTAINER");
@@ -18,7 +19,7 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && changedFields.in
         var newCodeNumber = db.cell(cond.buildSql("select " + maskingHelper.max("AB_KEYWORD_ENTRY.SORTING") + " from AB_KEYWORD_ENTRY", "1 = 2"));
         newCodeNumber = Number(newCodeNumber);//if no number exists till no, start value will be 1 (due to: ++0)
         if (isNaN(newCodeNumber))
-            throw new TypeError();//TODO:add Message
+            throw new TypeError(translate.text("The code number is not a valid number."));
 
         var cols = ["SORTING"];
         var vals = [++newCodeNumber];
diff --git a/entity/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod
index 691c6b9950b17f8186cbbb24c59b8c26ac9e6e92..916eea0cb49d768d7545700d27ce26f29307fff7 100644
--- a/entity/Offeritem_entity/Offeritem_entity.aod
+++ b/entity/Offeritem_entity/Offeritem_entity.aod
@@ -62,7 +62,8 @@
       <name>PRODUCT_ID</name>
       <documentation>%aditoprj%/entity/Offeritem_entity/entityfields/product_id/documentation.adoc</documentation>
       <title>Article</title>
-      <possibleItemsProcess>%aditoprj%/entity/Offeritem_entity/entityfields/product_id/possibleItemsProcess.js</possibleItemsProcess>
+      <consumer>Products</consumer>
+      <linkedContext>Product_context</linkedContext>
       <onValueChange>%aditoprj%/entity/Offeritem_entity/entityfields/product_id/onValueChange.js</onValueChange>
       <onValueChangeTypes>
         <element>MASK</element>
@@ -178,6 +179,15 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityConsumer>
+      <name>Products</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Product_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -267,6 +277,10 @@
           <name>UNIT.displayValue</name>
           <expression>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/unit.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PRODUCT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/Offeritem_entity/entityfields/info/valueProcess.js b/entity/Offeritem_entity/entityfields/info/valueProcess.js
index 522166c5f78fbd4dc448006857286c7860a55635..199fc1e677e27d82f50e7728d4e6d9b66cb22c69 100644
--- a/entity/Offeritem_entity/entityfields/info/valueProcess.js
+++ b/entity/Offeritem_entity/entityfields/info/valueProcess.js
@@ -6,7 +6,7 @@ import("Sql_lib");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
-    // TODO: loading from db until loading from dfo is possible.
+    // TODO: loading from db until loading from Consumer is possible.
     var productId = vars.get("$field.PRODUCT_ID");
     result.string(db.cell(SqlCondition.begin().andPrepareVars("PRODUCT.PRODUCTID", "$field.PRODUCT_ID").buildSql("select INFO from PRODUCT", "1=2")));
 }
\ No newline at end of file
diff --git a/entity/Offeritem_entity/entityfields/product_id/possibleItemsProcess.js b/entity/Offeritem_entity/entityfields/product_id/possibleItemsProcess.js
deleted file mode 100644
index e19938f82d7f21dbf4c8d427e08312291222547b..0000000000000000000000000000000000000000
--- a/entity/Offeritem_entity/entityfields/product_id/possibleItemsProcess.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import("system.result");
-import("system.db");
-import("Sql_lib");
-
-//TODO: change field to lookup field
-var sqlUtils = new SqlMaskingUtils();
-var prodsSql = "select PRODUCTID, " + sqlUtils.concat(["PRODUCTCODE", "PRODUCTNAME"], "/") 
-                    + " from PRODUCT";
-
-var prods = db.table(prodsSql);
-
-var retArray = [];
-for(var i = 0; i < prods.length; i++)
-    retArray.push(prods[i]);
-
-result.object(retArray);
\ No newline at end of file
diff --git a/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..505fda0b8e840a2c32054647dcc52469f8fc199d
--- /dev/null
+++ b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+
+// TODO: remove when #title is used as display value for lookups
+result.string("(select PRODUCT.PRODUCTNAME from PRODUCT where OFFERITEM.PRODUCT_ID = PRODUCT.PRODUCTID)");
\ No newline at end of file
diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod
index da0c900b6fbce3e532cffec790482f4c9e257fed..678e3886fa78d3bb92ebad1c307a21831b8ce061 100644
--- a/entity/Product_entity/Product_entity.aod
+++ b/entity/Product_entity/Product_entity.aod
@@ -146,6 +146,14 @@
     <entityProvider>
       <name>#PROVIDER</name>
       <recordContainer>db</recordContainer>
+      <dependencies>
+        <entityDependency>
+          <name>edd8a3af-d168-4a3b-871d-39db964c700b</name>
+          <entityName>Offeritem_entity</entityName>
+          <fieldName>Products</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>ProductLinks</name>
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 5491aec2874ba100e1e0827a9e2e115abe132f45..af924d86ccf8cdfd6c7dee0dc3f92207b356013a 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -2334,6 +2334,9 @@
     <entry>
       <key>String value</key>
     </entry>
+    <entry>
+      <key>The code number is not a valid number.</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 d3719f8ce7d16f4dfef96e8ca1d1cc0547152679..8eced752d694c90f7f88f1a23dde8c5053173119 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -2687,6 +2687,10 @@
     <entry>
       <key>String value</key>
     </entry>
+    <entry>
+      <key>The code number is not a valid number.</key>
+      <value>The code number is not a valid number.</value>
+    </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 503b12c83b4add02c4a3ba24503112bba563a24f..fb7789f7c7a2d53df2e9f52fc150030acd9ebbe3 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -2356,6 +2356,9 @@
     <entry>
       <key>String value</key>
     </entry>
+    <entry>
+      <key>The code number is not a valid number.</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>