diff --git a/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod b/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod
index a280adae7f0d34b12abf8c984b684e3b4e43e81a..3896ae9bcc651e8116b2d587e3b379e1ba273212 100644
--- a/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod
+++ b/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod
@@ -147,6 +147,10 @@
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
+        <entityParameter>
+          <name>ExcludedKeyIdsSubquery_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
     </entityConsumer>
     <entityActionGroup>
diff --git a/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9fdcc7295ca3443a1ba782155d529cc5f8103a6
--- /dev/null
+++ b/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
@@ -0,0 +1,18 @@
+import("system.neon");
+import("system.vars");
+import("system.db");
+import("Sql_lib");
+import("system.result");
+
+var cond = SqlCondition.begin()
+                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGN_ID", "$field.CAMPAIGN_ID");
+
+if (vars.get("$field.CAMPAIGNSTEP_ID"))
+    cond.andPrepareVars("CAMPAIGNCOST.CAMPAIGNSTEP_ID", "$field.CAMPAIGNSTEP_ID");
+else
+    cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null")
+    
+if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
+    cond.andPrepareVars("CAMPAIGNCOST.CAMPAIGNCOSTID", "$field.CAMPAIGNCOSTID", "# <> ?");
+
+result.string(db.translateStatement(cond.buildSql("select CATEGORY from CAMPAIGNCOST", "1=2", "group by CATEGORY")));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js
index 21c35016923a3ff94141e6d0d2e652764b35a41e..f3dedbcae4b8b310a011af1104b8706b3421998b 100644
--- a/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js
+++ b/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js
@@ -5,7 +5,7 @@ import("system.eMath");
 var netto = parseFloat(vars.get("$field.NET"));
 var countParticipants = parseFloat(vars.get("$field.countParticipants"));
 
-if (countParticipants > 0)
+if (netto && countParticipants &&countParticipants > 0)
     result.string(eMath.roundDec(netto / countParticipants, 2, eMath.ROUND_HALF_UP));
 else
     result.string(0);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod
index 96cb0aedca3baae8c49f540b87dd5a93294d2344..19cea84b44382052e07acf06cc8d93a57f082801 100644
--- a/entity/CampaignStep_entity/CampaignStep_entity.aod
+++ b/entity/CampaignStep_entity/CampaignStep_entity.aod
@@ -218,6 +218,12 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityField>
+      <name>COST</name>
+      <title>Cost</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>#,##0.00</outputFormat>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -295,6 +301,10 @@
           <name>DESCRIPTION.value</name>
           <recordfield>CAMPAIGNSTEP.DESCRIPTION</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>COST.value</name>
+          <expression>%aditoprj%/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..90244a5bfed8a35a3de7ea631a8414c3d9916c97
--- /dev/null
+++ b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/cost.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("(select sum(NET) from CAMPAIGNCOST where CAMPAIGNCOST.CAMPAIGN_ID = CAMPAIGNSTEP.CAMPAIGN_ID and CAMPAIGNCOST.CAMPAIGNSTEP_ID = CAMPAIGNSTEP.CAMPAIGNSTEPID)")
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 61a86af519a4843e588949be61697ff7c54e6bd1..6f3c591388a32dd3d3c1236061bd0ed30f21a18c 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -445,6 +445,12 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityParameter>
+      <name>ExcludedKeyIdsSubquery_param</name>
+      <expose v="true" />
+      <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc</documentation>
+      <description>PARAMETER</description>
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc b/entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..5eb6c62c6b9086cf2b3f9818d2ea97612d585d6f
--- /dev/null
+++ b/entity/KeywordEntry_entity/entityfields/excludedkeyidssubquery_param/documentation.adoc
@@ -0,0 +1,2 @@
+Can be filled with a subquery-string, which delivers KeyIds to exclude.
+The subquery is used insade a "KEYID not in(...)" 
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
index 4fb1ef2f327547a69afb2fe8d5e65cfa2dc1de00..e027aee8210372b3f4626d5286fc48df714de49c 100644
--- a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("system.vars");
 import("system.db");
 import("system.result");
@@ -10,5 +11,8 @@ if (vars.get("$param.OnlyActives_param") == "true")
     cond.andPrepare("AB_KEYWORD_ENTRY.ISACTIVE", "1");
 }
 
+if (vars.exists("$param.ExcludedKeyIdsSubquery_param") && vars.get("$param.ExcludedKeyIdsSubquery_param"))
+    cond.and("AB_KEYWORD_ENTRY.KEYID not in (" + vars.get("$param.ExcludedKeyIdsSubquery_param") + ")");
+
 var condStr = db.translateCondition(cond.build("1 = 1"));
 result.string(condStr);
\ No newline at end of file
diff --git a/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod b/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
index cbf63b52c35d2be87472f64fd3c3eb6c48593caa..d9ab350b2ee6df71af1690c6db3775aeac3a2f17 100644
--- a/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
+++ b/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
@@ -35,6 +35,10 @@
           <name>88fbd366-0107-44b7-8d9c-f4fee89c0637</name>
           <entityField>CampaignStatus</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>27558e2a-a377-4126-a29d-422d2d5a44b4</name>
+          <entityField>COST</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
   </children>