diff --git a/osaf/services/saf/avsv/avd/avd_csi.c b/osaf/services/saf/avsv/avd/avd_csi.c
--- a/osaf/services/saf/avsv/avd/avd_csi.c
+++ b/osaf/services/saf/avsv/avd/avd_csi.c
@@ -1234,3 +1234,21 @@ void avd_csi_constructor(void)
 	avd_class_impl_set("SaAmfCSI", NULL, NULL, csi_ccb_completed_cb, csi_ccb_apply_cb);
 }
 
+/**
+ * @brief	Check whether the Single csi assignment is undergoing on the SG.
+ *
+ * @param[in]	sg - Pointer to the Service Group.
+ *
+ * @return	true if operation is undergoing else false.
+ */
+bool csi_assignment_validate(AVD_SG *sg)
+{
+	AVD_SI *temp_si;
+	AVD_SU_SI_REL *temp_sisu;
+
+	for (temp_si = sg->list_of_si; temp_si; temp_si = temp_si->sg_list_of_si_next)
+		for (temp_sisu = temp_si->list_of_sisu; temp_sisu; temp_sisu = temp_sisu->si_next)
+			if (temp_sisu->csi_add_rem == true)
+				return true;
+	return false;
+}
diff --git a/osaf/services/saf/avsv/avd/avd_sg.c b/osaf/services/saf/avsv/avd/avd_sg.c
--- a/osaf/services/saf/avsv/avd/avd_sg.c
+++ b/osaf/services/saf/avsv/avd/avd_sg.c
@@ -28,6 +28,7 @@
 #include <avd_sg.h>
 #include <avd_proc.h>
 #include <avd_si_dep.h>
+#include <avd_csi.h>
 
 static NCS_PATRICIA_TREE sg_db;
 static void avd_verify_equal_ranked_su(AVD_SG *avd_sg);
@@ -1021,6 +1022,12 @@ static void sg_admin_op_cb(SaImmOiHandle
 		}
 	}
 
+        /* Avoid if any single Csi assignment is undergoing on SG. */
+        if (csi_assignment_validate(sg) == true) {
+                rc = SA_AIS_ERR_TRY_AGAIN;
+                LOG_WA("Single Csi assignment undergoing on (sg'%s')", sg->name.value);
+                goto done;
+        }
 
 	/* if Tolerance timer is running for any SI's withing this SG, then return SA_AIS_ERR_TRY_AGAIN */
 	if (sg_is_tolerance_timer_running_for_any_si(sg)) {
diff --git a/osaf/services/saf/avsv/avd/avd_si.c b/osaf/services/saf/avsv/avd/avd_si.c
--- a/osaf/services/saf/avsv/avd/avd_si.c
+++ b/osaf/services/saf/avsv/avd/avd_si.c
@@ -793,6 +793,13 @@ static void si_admin_op_cb(SaImmOiHandle
                 goto done;
         }
 
+        /* Avoid if any single Csi assignment is undergoing on SG. */
+        if (csi_assignment_validate(si->sg_of_si) == true) {
+                rc = SA_AIS_ERR_TRY_AGAIN;
+                LOG_WA("Single Csi assignment undergoing on (sg'%s')", si->sg_of_si->name.value);
+                goto done;
+        }
+
 	switch (operationId) {
 	case SA_AMF_ADMIN_UNLOCK:
 		if (SA_AMF_ADMIN_UNLOCKED == si->saAmfSIAdminState) {
diff --git a/osaf/services/saf/avsv/avd/avd_su.c b/osaf/services/saf/avsv/avd/avd_su.c
--- a/osaf/services/saf/avsv/avd/avd_su.c
+++ b/osaf/services/saf/avsv/avd/avd_su.c
@@ -27,6 +27,7 @@
 #include <avd_imm.h>
 #include <avd_ntf.h>
 #include <avd_proc.h>
+#include <avd_csi.h>
 
 static NCS_PATRICIA_TREE su_db;
 
@@ -898,6 +899,13 @@ static void su_admin_op_cb(SaImmOiHandle
 		}
 	}
 
+	/* Avoid if any single Csi assignment is undergoing on SG. */
+	if (csi_assignment_validate(su->sg_of_su) == true) {
+		rc = SA_AIS_ERR_TRY_AGAIN;
+		LOG_WA("Single Csi assignment undergoing on (sg'%s')", su->sg_of_su->name.value);
+		goto done;
+	}
+
 	if (su->sg_of_su->sg_fsm_state != AVD_SG_FSM_STABLE) {
 		rc = SA_AIS_ERR_TRY_AGAIN;
 		LOG_WA("SG state is not stable"); /* whatever that means... */
diff --git a/osaf/services/saf/avsv/avd/include/avd_csi.h b/osaf/services/saf/avsv/avd/include/avd_csi.h
--- a/osaf/services/saf/avsv/avd/include/avd_csi.h
+++ b/osaf/services/saf/avsv/avd/include/avd_csi.h
@@ -159,5 +159,6 @@ extern void avd_compcsi_from_csi_and_sus
 extern void avd_csi_delete(struct avd_csi_tag *csi);
 extern void csi_cmplt_delete(struct avd_csi_tag *csi, SaBoolT ckpt);
 extern AVD_CSI *csi_create(const SaNameT *csi_name);
+extern bool csi_assignment_validate(struct avd_sg_tag *sg);
 
 #endif
