diff --git a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
index 1b5987419561f447d26a0366fec02180e328d71d..6b8422bd3d9b28b53250d035700f735bf685f85b 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
@@ -1,19 +1,19 @@
 import("system.neon");
-import("Sql_lib");
 import("system.vars");
 import("system.db");
 import("system.util");
 import("Campaign_lib");
+import("Sql_lib");
 
 var cols = [];
 
-var participantRowIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param"));
 var participantCondition = "";
+var participantRowIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param"));
 var conditionSourceTableName = vars.getString("$param.dataSourceTableName_param");
 
+var isUpdate = vars.get("$field.isUpdate");
 var campaignId = vars.getString("$field.CAMPAIGN_ID");
 var newCampaignStepId = vars.getString("$field.CAMPAIGNSTEP_ID");
-var isUpdate = vars.get("$field.isUpdate");
 
 var colNamesCampaignParticipantLog = CampaignUtils.getParticipantLogInsertColumnNames();
 
@@ -40,7 +40,7 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition)
     let contactIdsToHandle = [];
     
     let useRightJoinToGetOrgs = "false";
-    if(pTargetTableName == "Organisation")
+    if(pTargetTableName == "ORGANISATION")
     {
         useRightJoinToGetOrgs = "true";
         pCondition += "  and PERSON.PERSONID is NULL"
@@ -66,63 +66,67 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition)
 function _handleRowIds(pParticipantRowIds, pCampaignId)
 {
     var oldStepIds = {};
+    
     if(isUpdate == "true")
     {
-        cols = [ "CAMPAIGNSTEP_ID",
-        "USER_EDIT",
-        "DATE_EDIT"
+        cols = [
+            "CAMPAIGNSTEP_ID",
+            "USER_EDIT",
+            "DATE_EDIT"
         ];
+    
         let oldSteps = newSelect("CAMPAIGNPARTICIPANTID, CAMPAIGNSTEP_ID")
-        .from("CAMPAIGNPARTICIPANT")
-        .whereIfSet("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds, SqlBuilder.IN())
-        .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
-        .table(true);
+                            .from("CAMPAIGNPARTICIPANT")
+                            .whereIfSet("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds, SqlBuilder.IN())
+                            .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
+                            .table(true);
                         
-        oldSteps.forEach(function (step)
+        oldSteps.forEach(function(step)
         {
             this[step[0]] = step[1];
         }, oldStepIds);
     }
     else
     {
-        cols = [ "CAMPAIGNPARTICIPANTID"
-        ,"CONTACT_ID"
-        ,"CAMPAIGN_ID"
-        ,"CAMPAIGNSTEP_ID"
-        ,"USER_NEW"
-        ,"DATE_NEW"
+        cols = [
+            "CAMPAIGNPARTICIPANTID",
+            "CONTACT_ID",
+            "CAMPAIGN_ID",
+            "CAMPAIGNSTEP_ID",
+            "USER_NEW",
+            "DATE_NEW"
         ];
     }
 
     let statementArray = [];
     let logArray = [];
-    let participantRowIds = pParticipantRowIds;
-    if(participantRowIds[0].length == 1) //pParticipantRowIds isn't parsed yet when the data has been selected, so we parse it here
-        participantRowIds = JSON.parse(pParticipantRowIds);
 
-
-    for (let participantRowId of participantRowIds)
+    for (let participant in pParticipantRowIds)
     {
         let campaignParticipantLogId = util.getNewUUID();
 
         if(isUpdate == "true")
         {
-            let oldCampaignStepId = oldStepIds[participantRowId] || "";
-            let updatedValues = [newCampaignStepId,
-            vars.get("$sys.user"),
-            vars.get("$sys.date")];
+            let oldCampaignStepId = oldStepIds[pParticipantRowIds[participant]] || "";
+            
+            let updatedValues = [
+                newCampaignStepId,
+                vars.get("$sys.user"),
+                vars.get("$sys.date")
+            ];
 
-            let condition = newWhere("CAMPAIGNPARTICIPANT.CONTACT_ID", participantRowId)
-            .or("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", participantRowId);
+            let condition = newWhere("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds[participant])
+                                .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
+                                .or("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", pParticipantRowIds[participant]);
                                  
             let valsCampaignParticipantLog = [
-            participantRowId, 
-            campaignId, 
-            newCampaignStepId, 
-            campaignParticipantLogId,
-            vars.get("$sys.user"), 
-            vars.get("$sys.date"), 
-            oldCampaignStepId
+                campaignParticipantLogId,
+                campaignId, 
+                newCampaignStepId, 
+                pParticipantRowIds[participant], 
+                vars.get("$sys.user"), 
+                vars.get("$sys.date"), 
+                oldCampaignStepId
             ];
 
             statementArray.push(["CAMPAIGNPARTICIPANT", cols, null, updatedValues, condition.build()]);
@@ -132,26 +136,38 @@ function _handleRowIds(pParticipantRowIds, pCampaignId)
         {
             let campaignParticipantId = util.getNewUUID();
 
-            let valsCampaignParticipant = [ campaignParticipantId
-            , participantRowId
-            , campaignId
-            , newCampaignStepId
-            , vars.get("$sys.user")
-            , vars.get("$sys.date")
+            let valsCampaignParticipant = [
+                campaignParticipantId,
+                pParticipantRowIds[participant],
+                campaignId,
+                newCampaignStepId,
+                vars.get("$sys.user"),
+                vars.get("$sys.date")
             ];
 
-            let valsCampaignParticipantLog = new Array(campaignParticipantId, campaignId, newCampaignStepId, campaignParticipantLogId, vars.get("$sys.user"), vars.get("$sys.date"));
+            let valsCampaignParticipantLog = [
+                campaignParticipantLogId, 
+                campaignId, 
+                newCampaignStepId,
+                campaignParticipantId, 
+                vars.get("$sys.user"), 
+                vars.get("$sys.date")
+            ];
 
             statementArray.push(["CAMPAIGNPARTICIPANT", cols, null, valsCampaignParticipant]);
+            logArray.push(["CAMPAIGNPARTICIPANTLOG", colNamesCampaignParticipantLog, null, valsCampaignParticipantLog]);
         }
     }
+    
     if(isUpdate == "true")
     {
         db.updates(statementArray)
     }
     else
         db.inserts(statementArray);
+    
     if(logArray.length > 0)
         db.inserts(logArray);
-}
 
+    neon.refreshAll();
+}
\ No newline at end of file
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
index e831ec632cbba7601e7085e0e59fdbf772e58725..5eac9077a7357f9f99488c0d19747a83fa3fede2 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
@@ -1,29 +1,43 @@
-import("Campaign_lib");
 import("system.eMath");
-import("FilterviewMenuAction_lib");
 import("system.result");
 import("system.vars");
 import("system.neon");
+import("FilterviewMenuAction_lib");
+import("Campaign_lib");
+
 
 if(vars.get("$field.CAMPAIGN_ID"))
 {
+    var contactIds, filteredContactIds;
+    var isUpdate = vars.getString("$param.isUpdate_param");
     var comingfrom = vars.getString("$param.dataSourceTableName_param");
-    var contactIds;
-    var filteredContactIds;
-    var selection = vars.getString("$param.campaignParticipantsRowIds_param");
+    var selection = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param"));
     
-    if(vars.exists("$param.campaignParticipantsCondition_param") && vars.get("$param.campaignParticipantsCondition_param"))
+    if(vars.exists("$param.campaignParticipantsCondition_param") && vars.get("$param.campaignParticipantsCondition_param") && !isUpdate)
     {
         selection = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition;
+        
         if(comingfrom == "Organisation")
             filteredContactIds = FilterviewMenuActionUtils.organisationIdsFilter(selection);
         else if(comingfrom == "Person")
             filteredContactIds = FilterviewMenuActionUtils.contactIdsFilter(selection)
-        contactIds = CampaignUtils.GetContactIdsNotInCampaignByRowIds(vars.get("$field.CAMPAIGN_ID"), filteredContactIds);
+        
+        contactIds = CampaignUtils.GetContactIdsNotInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), selection);
+    }
+    else if(isUpdate)
+    {
+        
+        if (vars.get("$param.campaignParticipantsCondition_param"))
+        {
+            contactIds = CampaignUtils.GetContactIdsInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition, false);
+        } else{
+            contactIds = selection;
+        }
     }
-    else
+    else 
     {
         contactIds = CampaignUtils.GetContactIdsNotInCampaignByRowIds(vars.get("$field.CAMPAIGN_ID"), JSON.parse(selection));
     }
+    
     result.string(JSON.stringify(contactIds));
 }
\ No newline at end of file
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js
index b08b067a18d8abf3bfcb5b27d61390176a9141de..f9a576941ad8a5d8e00dbc4b985934e7e5a6a919 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js
@@ -1,36 +1,48 @@
 import("system.eMath");
-import("FilterviewMenuAction_lib");
 import("system.translate");
 import("system.result");
 import("system.vars");
+import("Campaign_lib");
+import("FilterviewMenuAction_lib");
 
 var res = "";
-var resNotAdded = "\n\
-";
+var resNotAdded = "\n";
+
 if(vars.get("$field.CAMPAIGN_ID") && vars.get("$field.campaignparticipantContactIds") && !vars.get("$sys.validationerrors"))
 {
-    var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length;
     var selectedIds;
+    var isUpdate = vars.get("$param.isUpdate_param");
+    var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length;
     var comingfrom = vars.get("$param.dataSourceTableName_param");
     
-    if (validCount && !vars.get("$sys.validationerrors") && vars.get("$field.CAMPAIGN_ID"))
+    if (validCount && !vars.get("$sys.validationerrors") && vars.get("$field.CAMPAIGN_ID") && !isUpdate)
     {
         if (validCount != 0)
         {
             res = translate.withArguments("%0 new participants will be added to the campaign.", [validCount]);
+            
             if(vars.exists("$param.campaignParticipantsRowIds_param") && vars.getString("$param.campaignParticipantsRowIds_param"))
                 selectedIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")).length;
             else
             {
                 var selection = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition;
+                
                 if(comingfrom == "Organisation")
                     selectedIds = FilterviewMenuActionUtils.organisationIdsFilter(selection).length;
                 else if(comingfrom == "Person")
                     selectedIds = FilterviewMenuActionUtils.contactIdsFilter(selection).length;
             }
-            var alreadyParticipant = eMath.subInt(selectedIds, validCount)
+            if (selectedIds != undefined) {
+                var alreadyParticipant = eMath.subInt(selectedIds, validCount)
             resNotAdded += translate.withArguments("%0 of the chosen records are already in the campaign", [alreadyParticipant]);
+            }
         }
     }
+    else if(isUpdate){
+        validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length;
+        var maxParticipantCounting = CampaignUtils.getParticipantCount(vars.get("$field.CAMPAIGN_ID"));
+        res = translate.withArguments("%0/%1 participant(s) will be added to the selected campaign step", [validCount, maxParticipantCounting]);
+    }
 }
+
 result.string(res + resNotAdded);
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
index d6224666455e9a5cd83cec9e3a0a03cb60ccc19c..3c8e5a5655f3c8320c4188939e9588988e7b9b44 100644
--- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
+++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
@@ -9,6 +9,7 @@
     <element>CampaignParticipantChart_entity</element>
   </siblings>
   <afterOperatingState>%aditoprj%/entity/CampaignParticipant_entity/afterOperatingState.js</afterOperatingState>
+  <useFavorites v="true" />
   <titlePlural>Participants</titlePlural>
   <recordContainer>ParticipantsDbRecordContainer</recordContainer>
   <entityFields>
diff --git a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
index 1537b3bbbc7edc2d2149dc80c799697e1d02e8ea..5f2f7a2cfa299eb520877db19056edad8bbef2f6 100644
--- a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
+++ b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
@@ -9,7 +9,7 @@ var campaignStepId = vars.get("$field.CAMPAIGNSTEP_ID")
 
 if(sysSelection.length > 0) //selektierte IDs als Array
 {
-    CampaignUtils.openSetCampaignStepViewByRowIds(vars.getString("$sys.selection"), campaignId, campaignStepId);
+    CampaignUtils.openSetCampaignStepViewByRowIds(JSON.stringify(vars.get("$sys.selection")), campaignId, campaignStepId);
 }
 else
 {
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 3ca1a4994f769baab13afe8bf6219d01fbee245c..0facedfc4b8899e92b476d55e95e5f85973441e0 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -8978,6 +8978,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Add Participants</key>
+      <value>Teilnehmer hinzufügen</value>
     </entry>
     <entry>
       <key>and open Report</key>
diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js
index 7a2b2ead829e1d007bec8d5d6e47382c0d228b5b..99d839acf1d6102614d26f662889471973cc58d3 100644
--- a/process/Campaign_lib/process.js
+++ b/process/Campaign_lib/process.js
@@ -203,13 +203,14 @@ CampaignUtils.getParticipantLogInsertColumnNames = function()
  */
 CampaignUtils.openSetCampaignStepViewByRowIds = function(pParticipantIds, pCampaignId, pCampaignStepId)
 {
-    var params = {};
-    params["campaignParticipantsRowIds_param"] = pParticipantIds;
-    params["currentCampaignId_param"] = pCampaignId;
-    params["currentCampaignStepId_param"] = pCampaignStepId;
-    params["isUpdate_param"] = true;
+    var params = {
+        "campaignParticipantsRowIds_param":pParticipantIds,
+        "currentCampaignId_param":pCampaignId,
+        "currentCampaignStepId_param":pCampaignStepId,
+        "isUpdate_param":true
+    };
     
-    neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_NEW, params);
+    neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_VIEW, params);
 }
 
 /**
@@ -231,7 +232,7 @@ CampaignUtils.openSetCampaignStepViewByCondition = function(pCondition, pCampaig
     params["currentCampaignStepId_param"] = pCampaignStepId;
     params["isUpdate_param"] = true;
     
-    neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_NEW, params);
+    neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_VIEW, params);
 }
 
 /**
@@ -502,24 +503,14 @@ CampaignUtils.GetParticipantsAlreadyAddedCountByCondition = function(pWhereCondi
  */
 CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pParticipantRowIds)
 {   
-
-    var isNotOrg = newSelect("CONTACT.PERSON_ID").from("CONTACT").where("CONTACT.CONTACTID", pParticipantRowIds[0]).cell()
-    
-    var contactIds = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID")
-                                                .from("CAMPAIGNPARTICIPANT")
-                                                .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
-                                                .arrayColumn();
-    if(contactIds.length <= 0)
-        contactIds = [""];
-    var contactidsNotInCampaign = newSelect("CONTACT.CONTACTID")
-                                            .from("CONTACT")
-                                            .where("CONTACT.CONTACTID", pParticipantRowIds, SqlBuilder.IN())
-                                            .and("CONTACT.CONTACTID", contactIds, SqlBuilder.NOT_IN())
-
-    if(!isNotOrg)
-        contactidsNotInCampaign = contactidsNotInCampaign.and("CONTACT.PERSON_ID is null")
-
-    return contactidsNotInCampaign.arrayColumn();
+    return newSelect("CONTACT.CONTACTID")
+                .from("CONTACT")
+                .where("CONTACT.CONTACTID", pParticipantRowIds, SqlBuilder.IN())
+                .and("CONTACT.CONTACTID", 
+                    newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID")
+                        .from("CAMPAIGNPARTICIPANT")
+                        .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId), SqlBuilder.NOT_IN())
+                .arrayColumn();
 }
 
 /**
@@ -540,23 +531,26 @@ CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pPartic
 CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCondition, pRightJoinContacts)
 {
     let query = newSelect("CONTACT.CONTACTID").from("PERSON");
+    var subselect = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID")
+                        .from("CAMPAIGNPARTICIPANT")
+                        .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId);
     
     if (pRightJoinContacts == "true")
         query.rightJoin("CONTACT", "CONTACT.PERSON_ID = PERSON.PERSONID");
     else
         query.join("CONTACT", "CONTACT.PERSON_ID = PERSON.PERSONID");
     
+    if(pCondition != "")
+        subselect = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID")
+                        .from("CAMPAIGNPARTICIPANT")
+                        .where(pCondition);
+    
     query.join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
         .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID")
-        .where("CONTACT.CONTACTID", 
-            newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID")
-            .from("CAMPAIGNPARTICIPANT")
-            .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId)
+        .where("CONTACT.CONTACTID",  
+            subselect
             , SqlBuilder.NOT_IN()
         );
-    
-    if(pCondition != "")
-        query.and(pCondition);
 
     return query.arrayColumn();
 }