diff --git a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod
index a43dd1134fefe62920ca5f7ec6941dba89da5cb8..e7f67f8f1e2cfa915f71c98dd05e7dbe3620ea36 100644
--- a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod
+++ b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod
@@ -8,10 +8,6 @@
     <entityProvider>
       <name>#PROVIDER</name>
     </entityProvider>
-    <entityField>
-      <name>UID</name>
-      <state>EDITABLE</state>
-    </entityField>
     <entityField>
       <name>recipientCountMessage</name>
       <state>EDITABLE</state>
@@ -39,10 +35,10 @@
       <expose v="true" />
     </entityParameter>
     <entityField>
-      <name>recipientContactIds</name>
+      <name>validContactIds</name>
       <description>the filtered contactIds (contactIds that are not already in the bulkmail and don't have a commrestriction)</description>
       <state>EDITABLE</state>
-      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js</valueProcess>
+      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js</valueProcess>
     </entityField>
     <entityActionField>
       <name>addRecipients</name>
@@ -52,30 +48,25 @@
       <state>DISABLED</state>
       <stateProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityField>
-      <name>recipientCount</name>
-      <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc</documentation>
-      <state>EDITABLE</state>
-      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js</valueProcess>
-    </entityField>
     <entityParameter>
       <name>ObjectType_param</name>
       <expose v="true" />
     </entityParameter>
     <entityField>
-      <name>currentRecipients</name>
-      <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/documentation.adoc</documentation>
+      <name>currentRecipientCount</name>
+      <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/documentation.adoc</documentation>
       <title>Current Recipients</title>
-      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js</valueProcess>
+      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
-      <name>notAddedRecipients</name>
+      <name>notAddedCount</name>
+      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
-      <name>futureRecipients</name>
-      <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/documentation.adoc</documentation>
+      <name>futureRecipientCount</name>
+      <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/documentation.adoc</documentation>
       <title>Recipients after adding</title>
-      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js</valueProcess>
+      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js</valueProcess>
     </entityField>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
@@ -85,6 +76,10 @@
       <name>ContactFilter_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityField>
+      <name>proposedContactIds</name>
+      <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <datalessRecordContainer>
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/onActionProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/onActionProcess.js
index cce82d39abe4867c83b6b4289e6d5dfe284ace9a..d8057fbcaec0ce5c0094c723183b6d0538d0710c 100644
--- a/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/onActionProcess.js
+++ b/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/onActionProcess.js
@@ -1,7 +1,7 @@
 import("Bulkmail_lib");
 import("system.vars");
 
-var contactIds = JSON.parse(vars.getString("$field.recipientContactIds"));
+var contactIds = JSON.parse(vars.getString("$field.validContactIds"));
 var bulkMailId = vars.get("$field.BULKMAIL_ID");
 
 BulkMailUtils.addRecipients(bulkMailId, contactIds);
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js
index 361fb440599d3efccdfbb22747deae2b585fc3b0..8d4f43e10f0c76aaf98c0e64954bb2c5599015f4 100644
--- a/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js
+++ b/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js
@@ -1,9 +1,11 @@
+import("Util_lib");
 import("system.neon");
 import("system.result");
 import("system.vars");
-var count = vars.getString("$field.recipientCount");
 
-if (count == "0" || !count || vars.get("$sys.validationerrors"))
+var validContactIds = Utils.parseJSON(vars.get("$field.validContactIds"));
+
+if (Utils.isNullOrEmpty(validContactIds) || vars.get("$sys.validationerrors"))
     result.string(neon.COMPONENTSTATE_DISABLED);
 else
     result.string(neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/documentation.adoc b/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/documentation.adoc
similarity index 100%
rename from entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/documentation.adoc
rename to entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/documentation.adoc
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8aa9feddbe80e3c8a1d0286c93cb784cb0158c52
--- /dev/null
+++ b/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+import("Sql_lib");
+
+var currentCount = new SqlBuilder()
+    .selectCount()
+    .from("BULKMAILRECIPIENT")
+    .whereIfSet("BULKMAILRECIPIENT.BULKMAIL_ID", vars.get("$field.BULKMAIL_ID"))
+    .cell(true) || "0";
+    
+result.string(currentCount);
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js
deleted file mode 100644
index ab684915b04cac155e1a7c5ef4e4f008443ab5fc..0000000000000000000000000000000000000000
--- a/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import("system.logging");
-import("system.result");
-import("system.vars");
-import("Sql_lib");
-
-var currentCount = newSelect("count(BULKMAILRECIPIENT.CONTACT_ID)")
-                            .from("BULKMAILRECIPIENT")
-                            .where("BULKMAILRECIPIENT.BULKMAIL_ID", vars.get("$field.BULKMAIL_ID"))
-                            .cell()
-if(currentCount)
-    result.string(currentCount)
-else
-    result.string("0")
-
-
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/documentation.adoc b/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/documentation.adoc
similarity index 100%
rename from entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/documentation.adoc
rename to entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/documentation.adoc
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..afd4e40de1a73cfa8b96f4c937f413308fd4cc19
--- /dev/null
+++ b/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js
@@ -0,0 +1,8 @@
+import("Util_lib");
+import("system.vars");
+import("system.result");
+
+var currentCount = Number(vars.get("$field.currentRecipientCount"));
+var validIds = Utils.parseJSON(vars.get("$field.validContactIds")) || [];
+
+result.string(currentCount + validIds.length);
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js
deleted file mode 100644
index 9c50bb1b4d3e3e9076cff47ff37abfb2b665a600..0000000000000000000000000000000000000000
--- a/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.eMath")
-
-var res = eMath.addInt(vars.get("$field.recipientCount"), vars.get("$field.currentRecipients"));
-if(res)
-    result.string(res);
-else
-    result.string(0);
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..83d9b3c1ffd564ba0b8bc6c0b1c9dc7597f0a9ca
--- /dev/null
+++ b/entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("Util_lib");
+import("system.vars");
+
+var proposedIds = Utils.parseJSON(vars.get("$field.proposedContactIds")) || [];
+var validIds = Utils.parseJSON(vars.get("$field.validContactIds")) || [];
+
+result.string(proposedIds.length - validIds.length);
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..abc1e78c4e3211d5cbb9cfbb1440a276edc8f400
--- /dev/null
+++ b/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js
@@ -0,0 +1,17 @@
+import("Util_lib");
+import("FilterViewAction_lib");
+import("system.result");
+import("system.vars");
+
+var bulkMailId = vars.get("$field.BULKMAIL_ID");
+var proposedRecipients = [];
+if (bulkMailId)
+{
+    var contactIds = Utils.parseJSON(vars.get("$param.ContactIds_param"));
+    var contactFilter = vars.get("$param.ContactFilter_param");
+    var context = vars.getString("$param.ObjectType_param");
+
+    proposedRecipients = FilterViewActionUtils.getUidsBySelectionOrFilter(context, contactIds, contactFilter);
+}
+
+result.string(JSON.stringify(proposedRecipients));
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js
deleted file mode 100644
index 02d7fa1e679412972c3aca009bf79212db5b41e1..0000000000000000000000000000000000000000
--- a/entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import("Util_lib");
-import("system.eMath");
-import("FilterViewAction_lib");
-import("system.result");
-import("Bulkmail_lib");
-import("Sql_lib");
-import("system.vars");
-import("system.neon");
-
-var bulkMailId = vars.get("$field.BULKMAIL_ID");
-if (bulkMailId)
-{
-    var contactIds = Utils.parseJSON(vars.get("$param.ContactIds_param"));
-    var contactFilter = vars.get("$param.ContactFilter_param");
-    var context = vars.getString("$param.ObjectType_param");
-
-    contactIds = FilterViewActionUtils.getUidsBySelectionOrFilter(context, contactIds, contactFilter);
-
-    var recipients = BulkMailUtils.filterNewRecipients(bulkMailId, contactIds);
-    neon.setFieldValue("$field.notAddedRecipients", eMath.subInt(parseInt(contactIds.length), parseInt(recipients.length)));
-    result.string(JSON.stringify(recipients));
-}
-else
-    result.string(null);
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc b/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc
deleted file mode 100644
index cb66eaab85eed332b2f4d5e7c5e7bce70540b357..0000000000000000000000000000000000000000
--- a/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc
+++ /dev/null
@@ -1,6 +0,0 @@
-This field contains the count of the participants that can be added as string.
-A value of null or empty string "" means that the count could not be determined (for example because no bulkmail was chosen).
-A value of "0" means that the count could be determined but none of the participants can be added (for example because all selected participants are already in the bulkmail).
-For example, a value of "12" means that 12 of the given participants can be added.
-
-This information is needed for disabling the action to proceed and to provide a message for the user.
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js
deleted file mode 100644
index d04634f708b5331a305b800553ec8c5c9bd1b2fb..0000000000000000000000000000000000000000
--- a/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.translate");
-import("system.result");
-import("system.vars");
-
-var res = "";
-if (vars.get("$field.recipientContactIds"))
-{
-    res = JSON.parse(vars.getString("$field.recipientContactIds")).length;
-}
-
-result.string(res);
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/recipientcountmessage/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/recipientcountmessage/valueProcess.js
index 80f08142f07db6851da182a44860374521000e27..67be7554841dc3d74cbef94a307675ee7e5b1c1d 100644
--- a/entity/BulkMailAddRecipients_entity/entityfields/recipientcountmessage/valueProcess.js
+++ b/entity/BulkMailAddRecipients_entity/entityfields/recipientcountmessage/valueProcess.js
@@ -1,22 +1,25 @@
+import("Util_lib");
 import("system.translate");
 import("system.result");
 import("system.vars");
 
-var count = vars.get("$field.recipientCount")
-var res = "";
-var resNotAdded = "\n\
-";
-if (count && !vars.get("$sys.validationerrors"))
+var validIdCount = (Utils.parseJSON(vars.get("$field.validContactIds")) || []).length;
+var message = "";
+if (!vars.get("$sys.validationerrors"))
 {
-    if (count == "0")
-        res = translate.text("No new recipients found that can be added to the bulk mail.");
+    if (validIdCount == 0)
+    {
+        message = translate.text("No new recipients found that can be added to the bulk mail.");
+    }
     else
     {
-        res = translate.withArguments("%0 new recipients will be added to the bulk mail.", [count]);
-        var notAdded = vars.get("$field.notAddedRecipients")
+        message = translate.withArguments("%0 new recipients will be added to the bulk mail.", [validIdCount]);
+        var notAdded = vars.get("$field.notAddedCount")
         if (notAdded > 0)
-            resNotAdded += translate.withArguments("%0 of the chosen records are already recipients or don't have an e-mail set", [notAdded]);
+        {
+            message += "\n" + translate.withArguments("%0 of the chosen records are already recipients or don't have an e-mail set", [notAdded]);
+        }
     }
 }
 
-result.string(res + resNotAdded);
\ No newline at end of file
+result.string(message);
\ No newline at end of file
diff --git a/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2df0a164747ae867eb2c6a645c4be5625ba9d21c
--- /dev/null
+++ b/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js
@@ -0,0 +1,14 @@
+import("Util_lib");
+import("system.result");
+import("Bulkmail_lib");
+import("system.vars");
+
+var bulkMailId = vars.get("$field.BULKMAIL_ID");
+var validRecipients = [];
+if (bulkMailId)
+{
+    var proposedRecipients = Utils.parseJSON(vars.get("$field.proposedContactIds"));
+    validRecipients = BulkMailUtils.filterNewRecipients(bulkMailId, proposedRecipients);
+}
+
+result.string(JSON.stringify(validRecipients));
\ No newline at end of file
diff --git a/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod b/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod
index 4ecfda58d231870c07359fe28fb481de5cd1d367..383d48350eeac31dfdf62f5bdadfc99b7cca79be 100644
--- a/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod
+++ b/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod
@@ -18,11 +18,11 @@
       <fields>
         <entityFieldLink>
           <name>1b9e38a5-e921-48f7-ba04-71b758fa9ed3</name>
-          <entityField>currentRecipients</entityField>
+          <entityField>currentRecipientCount</entityField>
         </entityFieldLink>
         <entityFieldLink>
           <name>4578042c-9210-4dc4-870f-298a390aebd8</name>
-          <entityField>futureRecipients</entityField>
+          <entityField>futureRecipientCount</entityField>
         </entityFieldLink>
       </fields>
     </scoreCardViewTemplate>