diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
index 6f7b018b1a11c9a753f9c5e612680cc982362289..9bf84980074e9a8586b39e9cf2cd4bd63be6482b 100644
--- a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
+++ b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
@@ -4,6 +4,9 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/CampaignAddParticipants_entity/documentation.adoc</documentation>
   <title>Add participants to Campaign</title>
+  <siblings>
+    <element>CampaignParticipant_entity</element>
+  </siblings>
   <onValidation>%aditoprj%/entity/CampaignAddParticipants_entity/onValidation.js</onValidation>
   <recordContainer>jdito</recordContainer>
   <entityFields>
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignstepcurrentparticipantcount/displayValueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignstepcurrentparticipantcount/displayValueProcess.js
index 3fe2184695f63723eb59b82ebf21486592a049c6..3fdaf507cf55084df2bac19d675667e0bcdb14e5 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/campaignstepcurrentparticipantcount/displayValueProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaignstepcurrentparticipantcount/displayValueProcess.js
@@ -1,5 +1,6 @@
+import("system.logging");
 import("system.result");
 import("system.vars");
 import("Campaign_lib");
 
-result.string(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID")));
\ No newline at end of file
+result.string(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID"), vars.get("$field.CAMPAIGN_ID")));
\ No newline at end of file
diff --git a/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js
index f4d6e6e52bfa78e1ec984b28790a65a37d221d6e..47fb5627a5b21a786a83cdb783128ca40cdfcdfc 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js
@@ -117,8 +117,8 @@ if(selectedCampaignId != '')
 
 function getParticipantExcess (pCountToAdd)
 {
-    let currentParticipants = CampaignUtils.getParticipantCountForStep(selectedCampaignStepId)
-    let maxParticipants = CampaignUtils.getMaxParticipantCountForStep(selectedCampaignStepId)
+    let currentParticipants = CampaignUtils.getParticipantCountForStep(selectedCampaignStepId, vars.get("$field.CAMPAIGN_ID"));
+    let maxParticipants = CampaignUtils.getMaxParticipantCountForStep(selectedCampaignStepId, vars.get("$field.CAMPAIGN_ID"));
 
     return (parseInt(currentParticipants) + parseInt(pCountToAdd)) - maxParticipants;
 }
\ No newline at end of file
diff --git a/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js b/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js
index 95c8bcbdf767eaca6e770385ae73574c27857a48..44bfa0e717f9ed3d3ad50b2e759b2a558a61fef6 100644
--- a/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js
@@ -24,7 +24,7 @@ if(participantRowIds != null && participantRowIds.length > 0)
     if(isUpdate == "false")
         contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByRowIds(campaignId, participantRowIds);
     
-    _handleRowIds(contactIdsToHandle);
+    _handleRowIds(contactIdsToHandle, campaignId);
 }
 else
 {
@@ -60,10 +60,10 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition)
     else
         contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByCondition(pCampaignId, pCondition, useRightJoinToGetOrgs);
     
-    _handleRowIds(contactIdsToHandle);
+    _handleRowIds(contactIdsToHandle, pCampaignId);
 }
 
-function _handleRowIds(pParticipantRowIds)
+function _handleRowIds(pParticipantRowIds, pCampaignId)
 {
     var oldStepIds = {};
     if(isUpdate == "true")
@@ -72,10 +72,10 @@ function _handleRowIds(pParticipantRowIds)
                  "USER_EDIT",
                  "DATE_EDIT"
                 ];
-        
         let oldSteps = newSelect("CAMPAIGNPARTICIPANTID, CAMPAIGNSTEP_ID")
                         .from("CAMPAIGNPARTICIPANT")
-                        .whereIfSet("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", pParticipantRowIds, SqlBuilder.IN())
+                        .whereIfSet("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds, SqlBuilder.IN())
+                        .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
                         .table(true);
                         
         oldSteps.forEach(function (step)
diff --git a/entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js b/entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js
index 6952bc19fb1c4532ee3588b899bb4be228e0dc60..b717a893620192e69f060ce1102325e2262b85e2 100644
--- a/entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js
+++ b/entity/CampaignCost_entity/entityfields/countparticipants/valueProcess.js
@@ -4,7 +4,7 @@ import("Campaign_lib");
 
 if (vars.get("$field.CAMPAIGNSTEP_ID"))
 {
-    result.string(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID")));
+    result.string(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID"), vars.get("$field.CAMPAIGN_ID")));
 }
 else
 {
diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
index e1d7172fd02b457c93267ea15b9440c97b53de25..0572cb1c00110d8d5f3a7295660a2a8d9888abe0 100644
--- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
+++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
@@ -96,6 +96,7 @@
     </entityField>
     <entityConsumer>
       <name>CampaignsConsumer</name>
+      <refreshParent v="true" />
       <dependency>
         <name>dependency</name>
         <entityName>Campaign_entity</entityName>
@@ -142,6 +143,7 @@
     </entityConsumer>
     <entityConsumer>
       <name>CampaignSteps</name>
+      <refreshParent v="true" />
       <dependency>
         <name>dependency</name>
         <entityName>CampaignStep_entity</entityName>
@@ -229,6 +231,7 @@
     <dbRecordContainer>
       <name>ParticipantsDbRecordContainer</name>
       <alias>Data_alias</alias>
+      <hasDependentRecords v="true" />
       <conditionProcess>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/conditionProcess.js</conditionProcess>
       <onDBInsert>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/onDBInsert.js</onDBInsert>
       <linkInformation>
diff --git a/entity/CampaignParticipant_entity/entityfields/campaignstepcurrentparticipantcount/displayValueProcess.js b/entity/CampaignParticipant_entity/entityfields/campaignstepcurrentparticipantcount/displayValueProcess.js
index 3fe2184695f63723eb59b82ebf21486592a049c6..d4be69539f8e4f617d2784a1ae0eb49da47d9e05 100644
--- a/entity/CampaignParticipant_entity/entityfields/campaignstepcurrentparticipantcount/displayValueProcess.js
+++ b/entity/CampaignParticipant_entity/entityfields/campaignstepcurrentparticipantcount/displayValueProcess.js
@@ -2,4 +2,4 @@ import("system.result");
 import("system.vars");
 import("Campaign_lib");
 
-result.string(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID")));
\ No newline at end of file
+result.string(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID"), vars.get("$field.CAMPAIGN_ID")));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
index f7f984d9379349ed724a0c49822963fb55ba52ed..1537b3bbbc7edc2d2149dc80c799697e1d02e8ea 100644
--- a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
+++ b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
@@ -14,6 +14,5 @@ if(sysSelection.length > 0) //selektierte IDs als Array
 else
 {
     let sysFilter = vars.get("$sys.filter");//todo change name
-
     CampaignUtils.openSetCampaignStepViewByCondition(JSON.stringify(sysFilter), campaignId, campaignStepId);
 }
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod
index 99019821d99d4e534c1a2365444d3c26ae8fcb50..d9cd9d2ef963ff6ca410bcbd52268899899a3178 100644
--- a/entity/CampaignStep_entity/CampaignStep_entity.aod
+++ b/entity/CampaignStep_entity/CampaignStep_entity.aod
@@ -36,6 +36,7 @@
     <entityField>
       <name>CAMPAIGNSTEPID</name>
       <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/campaignstepid/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>CAMPAIGN_ID</name>
diff --git a/entity/CampaignStep_entity/entityfields/campaignstepid/valueProcess.js b/entity/CampaignStep_entity/entityfields/campaignstepid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4faa129377b11ba84a25dbfb11fb6fa18201c011
--- /dev/null
+++ b/entity/CampaignStep_entity/entityfields/campaignstepid/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(util.getNewUUID());
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/currentmaxparticipantsinfo/valueProcess.js b/entity/CampaignStep_entity/entityfields/currentmaxparticipantsinfo/valueProcess.js
index 4f1a6b3964063772f54fc7832e02d53ba052624f..86c117c70ddf7fe6b5a8c94a811313929cec7a00 100644
--- a/entity/CampaignStep_entity/entityfields/currentmaxparticipantsinfo/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/currentmaxparticipantsinfo/valueProcess.js
@@ -2,6 +2,6 @@ import("system.result");
 import("system.vars");
 import("Campaign_lib");
 
-let currentParticipantsCount = CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEPID"));
+let currentParticipantsCount = CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEPID"), vars.get("$field.CAMPAIGN_ID"));
 let maxParticipantsStepCount = vars.get("$field.MAXPARTICIPANTS");
 result.string(currentParticipantsCount + "/" + maxParticipantsStepCount);
\ No newline at end of file
diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod
index 3165e68b887b0a6ac7490756e403d4e447fdd1c5..60605812492cef59f96cacbd1be0b1f5deef1ae9 100644
--- a/entity/Campaign_entity/Campaign_entity.aod
+++ b/entity/Campaign_entity/Campaign_entity.aod
@@ -174,6 +174,7 @@
     </entityProvider>
     <entityConsumer>
       <name>CampaignParticipants</name>
+      <refreshParent v="false" />
       <selectionMode>MULTI</selectionMode>
       <dependency>
         <name>dependency</name>
diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js
index 2e1cc2f66a3cecd8ac41b568d6f579ec382dcd19..9d80baee3dfcb1d6279109b72e9ac4c9651223d0 100644
--- a/process/Campaign_lib/process.js
+++ b/process/Campaign_lib/process.js
@@ -67,11 +67,12 @@ CampaignUtils.getCampaignStepNameById = function(pCampaignStepId)
  * The current count of participants in the given campaignstep
  * @return count of participants, 0 if no campaignstep could be found for the id
  */
-CampaignUtils.getParticipantCountForStep = function(pCampaignStepId)
+CampaignUtils.getParticipantCountForStep = function(pCampaignStepId, pCampaignId)
 {
     return newSelect("count(*)")
         .from("CAMPAIGNPARTICIPANT")
         .whereIfSet("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", pCampaignStepId)
+        .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
         .cell(true, 0);
 }
 
@@ -373,7 +374,7 @@ CampaignUtils.GetContactIdsInCampaignByCondition = function(pCampaignId, pCondit
     
 //    if(pRightJoinContacts == "true")
 //        query += " right"
-    
+
     query.leftJoin("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID")
         .leftJoin("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
         .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID")