diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
index 8969b5341cf0919a07689aa4ec87ce14bcea506e..915da6b61af56a9c4a3121dbe85d19f3c84db51e 100644
--- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
+++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
@@ -77,7 +77,6 @@
       <title>Campaign Step</title>
       <consumer>CampaignSteps</consumer>
       <state>EDITABLE</state>
-      <valueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/campaignstep_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/campaignstep_id/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/CampaignParticipant_entity/entityfields/campaignstep_id/onValueChange.js</onValueChange>
       <onValueChangeTypes>
@@ -108,6 +107,7 @@
       <consumer>AnyContacts</consumer>
       <linkedContextProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess>
       <state>READONLY</state>
+      <stateProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess>
     </entityField>
diff --git a/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js b/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js
index 07814c86a4ccb47432e0d0daff74ea1c4b1a90f6..3310f3466e93067f87181ce926d9923f3cb703c5 100644
--- a/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js
+++ b/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js
@@ -4,5 +4,5 @@ import("Campaign_lib");
 import("system.vars");
 
 var stepId = CampaignUtils.getDefaultCampaignStep(vars.get("$field.CAMPAIGN_ID"));
-
+logging.log("stepId -> " + stepId);
 neon.setFieldValue("$field.CAMPAIGNSTEP_ID", stepId);
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/campaignstep_id/valueProcess.js b/entity/CampaignParticipant_entity/entityfields/campaignstep_id/valueProcess.js
deleted file mode 100644
index 5c754b2b2bff51e7f2b5b5e26284cd5b32df620f..0000000000000000000000000000000000000000
--- a/entity/CampaignParticipant_entity/entityfields/campaignstep_id/valueProcess.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import("system.logging");
-import("system.neon");
-import("system.result");
-import("system.vars");
-
-logging.log("test -> " + vars.exists("$param.CampaignStepId_param"));
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && 
-   vars.exists("$param.CampaignStepId_param") && vars.get("$param.CampaignStepId_param"))
-{
-    logging.log("campaignParticipant.CAMPAIGNSTEP_ID valueProcess -> CampaignStepId_param " + vars.get("$param.CampaignStepId_param"));
-   result.string(vars.get("$param.CampaignStepId_param"));
-}
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js b/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b6862597686b505239e46fb2e47034e558fa50c
--- /dev/null
+++ b/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js
@@ -0,0 +1,12 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param"))
+    //A contact has been provided. Show it in readonly.
+    fieldState = neon.COMPONENTSTATE_READONLY;
+else
+    //No contact has been provided, therefore let the user select one.
+    fieldState = neon.COMPONENTSTATE_EDITABLE;
+    
+result.string(fieldState);
\ No newline at end of file