diff --git a/osaf/services/saf/amf/amfd/sg_2n_fsm.cc b/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
--- a/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
+++ b/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
@@ -3535,142 +3535,88 @@ done:
 }
 
 void SG_2N::adjust_delayed_failover(AVD_CL_CB *cb) {
-	AVD_SU_SI_REL *curr_susi;
 	TRACE_ENTER();
-
-	// Check AdminState of node/sg/su whether is LOCKED or SHUTTING_DOWN
-	// which states will cause removal of assignment
+	AVD_SU *act= NULL, *std = NULL, *su_in_transition = NULL, su_node;
+
 	for (const auto& su : list_of_su) {
 		SaAmfHAStateT su_ha_state;
-		TRACE("Check AdminState of SU/SG/Node, SU:'%s', saAmfSUAdminState:%u, "
-				"saAmfSGAdminState:%u, saAmfNodeAdminState:%u, "
-				"saAmfSUNumCurrActiveSIs:%u, saAmfSUNumCurrStandbySIs:%u",
-				su->name.value,
-				su->saAmfSUAdminState,
-				su->sg_of_su->saAmfSGAdminState,
-				su->su_on_node->saAmfNodeAdminState,
-				su->saAmfSUNumCurrActiveSIs,
-				su->saAmfSUNumCurrStandbySIs);
-
-		if (su->saAmfSUAdminState == SA_AMF_ADMIN_LOCKED ||
-			su->sg_of_su->saAmfSGAdminState == SA_AMF_ADMIN_LOCKED ||
-			su->su_on_node->saAmfNodeAdminState == SA_AMF_ADMIN_LOCKED ||
-			su->saAmfSUAdminState == SA_AMF_ADMIN_SHUTTING_DOWN ||
-			su->sg_of_su->saAmfSGAdminState == SA_AMF_ADMIN_SHUTTING_DOWN ||
-			su->su_on_node->saAmfNodeAdminState == SA_AMF_ADMIN_SHUTTING_DOWN) {
-
-			if (su->list_of_susi) {
-				su_ha_state = avd_su_state_determine(su);
-				if (su_ha_state == SA_AMF_HA_QUIESCED ||
-					su_ha_state == SA_AMF_HA_STANDBY ||
+
+		if (su->list_of_susi) {
+			su_ha_state = avd_su_state_determine(su);
+			if (su_ha_state == SA_AMF_HA_QUIESCED ||
 					su_ha_state == SA_AMF_HA_QUIESCING) {
-					// remove all susi belong to this su
-					avd_sg_su_si_del_snd(cb, su);
-				} else if (su_ha_state == SA_AMF_HA_ACTIVE) {
-					// quiesced this su
-					avd_sg_su_si_mod_snd(cb, su, SA_AMF_HA_QUIESCED);
-				}
-				avd_sg_su_oper_list_add(cb, su, false);
-				set_fsm_state(AVD_SG_FSM_SG_REALIGN);
-			}
-			// directly move from SHUTTING_DOWN to LOCKED
-			if (su->saAmfSUAdminState == SA_AMF_ADMIN_SHUTTING_DOWN)
-				su->set_admin_state(SA_AMF_ADMIN_LOCKED);
-			if (su->sg_of_su->saAmfSGAdminState == SA_AMF_ADMIN_SHUTTING_DOWN)
-				avd_sg_admin_state_set(su->sg_of_su, SA_AMF_ADMIN_LOCKED);
-			if (su->su_on_node->saAmfNodeAdminState == SA_AMF_ADMIN_SHUTTING_DOWN)
-				node_admin_state_set(su->su_on_node, SA_AMF_ADMIN_LOCKED);
-		}
-	}
-
-	// Check AdminState of si whether is LOCKED or SHUTTING_DOWN
-	for (const auto& si : list_of_si) {
-
-		AVD_SU_SI_REL *curr_active_susi = nullptr;
-		AVD_SU_SI_REL *curr_quiesce_susi = nullptr;
-		AVD_SU_SI_REL *curr_standby_susi = nullptr;
-
-		TRACE("Check SI:'%s', saAmfSIAdminState:%u, saAmfSINumCurrActiveAssignments:%u, "
-				"saAmfSINumCurrStandbyAssignments:%u",
-				si->name.value,
-				si->saAmfSIAdminState,
-				si->saAmfSINumCurrActiveAssignments,
-				si->saAmfSINumCurrStandbyAssignments);
-
-		for (curr_susi = si->list_of_sisu; curr_susi;
-				curr_susi = curr_susi->si_next) {
-
-			TRACE("Check SUSI:'%s,%s', HaState:%u", curr_susi->su->name.value,
-					curr_susi->si->name.value,
-					curr_susi->state);
-
-			if (si->saAmfSIAdminState == SA_AMF_ADMIN_SHUTTING_DOWN ||
-				si->saAmfSIAdminState == SA_AMF_ADMIN_LOCKED) {
-				// only process assigned susi, ignore the others due to
-				// being modified or unassigned, ...
-				if (curr_susi->fsm == AVD_SU_SI_STATE_ASGND) {
-					if (curr_susi->state == SA_AMF_HA_STANDBY ||
-						curr_susi->state == SA_AMF_HA_QUIESCED ||
-						curr_susi->state == SA_AMF_HA_QUIESCING) {
-						// remove one susi
-						avd_susi_del_send(curr_susi);
-					} else if (curr_susi->state == SA_AMF_HA_ACTIVE) {
-						// quiesced one susi
-						avd_susi_mod_send(curr_susi, SA_AMF_HA_QUIESCED);
-					}
-					set_fsm_state(AVD_SG_FSM_SG_REALIGN);
-					avd_sg_su_oper_list_add(cb, curr_susi->su, false);
-				}
-				// directly move from SHUTTING_DOWN to LOCKED
-				if (si->saAmfSIAdminState == SA_AMF_ADMIN_SHUTTING_DOWN)
-					si->set_admin_state(SA_AMF_ADMIN_LOCKED);
-			}
-			if (curr_susi->fsm != AVD_SU_SI_STATE_ASGND)
-				continue;
-
-			if (curr_susi->state == SA_AMF_HA_ACTIVE)
-				curr_active_susi = curr_susi;
-			else if (curr_susi->state == SA_AMF_HA_STANDBY)
-				curr_standby_susi = curr_susi;
-			else
-				curr_quiesce_susi = curr_susi;
-		}
-
-		if (!curr_active_susi && !curr_quiesce_susi && !curr_standby_susi)
-			continue;
-
-		// at this point in time, there could be inappropriate susi in term of
-		// HA state due to uncompleted failover/si-swap around the time cluster
-		// was going into headless.
-		// Adjust the HA state if neccessary.
-		if (curr_active_susi) {
-			if (!curr_standby_susi && curr_quiesce_susi) {
-				avd_sg_su_si_mod_snd(cb, curr_quiesce_susi->su, SA_AMF_HA_STANDBY);
-				avd_sg_su_oper_list_add(cb, curr_quiesce_susi->su, false);
-				set_fsm_state(AVD_SG_FSM_SG_REALIGN);
-			}
-		} else {
-			if (curr_standby_susi && curr_quiesce_susi) {
-				avd_sg_su_si_mod_snd(cb, curr_quiesce_susi->su, SA_AMF_HA_STANDBY);
-				avd_sg_su_oper_list_add(cb, curr_quiesce_susi->su, false);
-
-				avd_sg_su_si_mod_snd(cb, curr_standby_susi->su, SA_AMF_HA_ACTIVE);
-				avd_sg_su_oper_list_add(cb, curr_standby_susi->su, false);
-
-				set_fsm_state(AVD_SG_FSM_SG_REALIGN);
-			} else if (!curr_standby_susi && curr_quiesce_susi) {
-				avd_sg_su_si_mod_snd(cb, curr_quiesce_susi->su, SA_AMF_HA_ACTIVE);
-				avd_sg_su_oper_list_add(cb, curr_quiesce_susi->su, false);
-
-				set_fsm_state(AVD_SG_FSM_SG_REALIGN);
-			} else if (curr_standby_susi && !curr_quiesce_susi) {
-				avd_sg_su_si_mod_snd(cb, curr_standby_susi->su, SA_AMF_HA_ACTIVE);
-				avd_sg_su_oper_list_add(cb, curr_standby_susi->su, false);
-
-				set_fsm_state(AVD_SG_FSM_SG_REALIGN);
+				su_in_transition = su;
+			} else if (su_ha_state == SA_AMF_HA_ACTIVE) {
+				act = su;
+			} else if (su_ha_state == SA_AMF_HA_STANDBY) {
+				std = su;
 			}
 		}
 	}
+	/*If SU is in quiesced/quiecing state, reboot the node. In node reboot case, node failover
+	  will take care of admin operation (if pending) or faults etc.*/	
+	if (su_in_transition != NULL) {	
+		//Reset node flag for helpig all sgs.
+		su_in_transition->su_on_node->recvr_fail_sw = true;
+		avd_d2n_reboot_snd(su_in_transition->su_on_node);
+		goto done;
+	}
+
+	//Here because of faults standby may exist without active. 
+	//This cannot be the case of admin operation as standby is there because all admin ops works gracefully.
+	//In the first approximation, reboot standby SU node and go for fresh assignments.
+	//Later version of patch may try to give it active by creating a fresh SUSIs (actually dummy) in
+	//some SU and re using node/su-failover code.
+	if ((act == NULL) && (std != NULL)) {
+		//Reset node flag for helping all sgs.
+		std->su_on_node->recvr_fail_sw = true;	
+		avd_d2n_reboot_snd(std->su_on_node);
+	}
+
+	//It means SU is not in transition. Both active and standby exists.But admin operation may be on.
+	if ((act != NULL) && (std != NULL)) {
+		//It means admin operation did not reach amfnd. So revert back admin operation and 
+		//log a Notice in syslog for the operator to reissue admin.
+		//op.
+		for (const auto& su : list_of_su) {
+			SaAmfHAStateT su_ha_state;
+			if (su->list_of_susi) {
+				su_ha_state = avd_su_state_determine(su);
+				if ((su_ha_state == SA_AMF_HA_ACTIVE) || 
+					(su_ha_state == SA_AMF_HA_STANDBY)) {
+					if (su->saAmfSUAdminState != SA_AMF_ADMIN_UNLOCKED) {
+						su->saAmfSUAdminState = SA_AMF_ADMIN_UNLOCKED;
+						LOG_NO("Reissue admin op on :%s",su->name.value);
+					}
+					if (su->sg_of_su->saAmfSGAdminState != SA_AMF_ADMIN_UNLOCKED) {
+						su->sg_of_su->saAmfSGAdminState  = SA_AMF_ADMIN_UNLOCKED;
+						LOG_NO("Reissue admin op on :%s",su->sg_of_su->name.value);
+					}
+					if (su->su_on_node->saAmfNodeAdminState != SA_AMF_ADMIN_UNLOCKED) {
+						su->su_on_node->saAmfNodeAdminState = SA_AMF_ADMIN_UNLOCKED;
+						LOG_NO("Reissue admin op on :%s",su->su_on_node->name.value);
+					}
+				}
+			}
+		}
+		
+		for (const auto& si : list_of_si) {	
+			bool standby = false, active = false;
+			if (si->list_of_sisu) {
+				for (AVD_SU_SI_REL *curr_susi = si->list_of_sisu; curr_susi;
+						curr_susi = curr_susi->si_next) {
+					if (curr_susi->su == std)
+						standby = true;
+					if (curr_susi->su == act)
+						active = true;
+					if (active && standby &&
+							(si->saAmfSIAdminState != SA_AMF_ADMIN_UNLOCKED))
+						LOG_NO("Reissue admin op on :%s",si->name.value);
+				}
+			}
+		}
+	}
+done:
 	TRACE_LEAVE();
 }
 
