diff --git a/pkg/daemon/writer.go b/pkg/daemon/writer.go
index 96ea2558e..61096b86e 100644
--- a/pkg/daemon/writer.go
+++ b/pkg/daemon/writer.go
@@ -142,15 +142,21 @@ func (w *NodeStateStatusWriter) pollNicStatus(platformType utils.PlatformType) e
 
 func (w *NodeStateStatusWriter) updateNodeStateStatusRetry(f func(*sriovnetworkv1.SriovNetworkNodeState)) (*sriovnetworkv1.SriovNetworkNodeState, error) {
 	var nodeState *sriovnetworkv1.SriovNetworkNodeState
+	var oldStatus, newStatus, lastError string
+
 	err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
 		n, getErr := w.getNodeState()
 		if getErr != nil {
 			return getErr
 		}
+		oldStatus = n.Status.SyncStatus
 
 		// Call the status modifier.
 		f(n)
 
+		newStatus = n.Status.SyncStatus
+		lastError = n.Status.LastSyncError
+
 		var err error
 		nodeState, err = w.client.SriovnetworkV1().SriovNetworkNodeStates(namespace).UpdateStatus(context.Background(), n, metav1.UpdateOptions{})
 		if err != nil {
@@ -163,6 +169,8 @@ func (w *NodeStateStatusWriter) updateNodeStateStatusRetry(f func(*sriovnetworkv
 		return nil, fmt.Errorf("unable to update node %v: %v", nodeState, err)
 	}
 
+	w.recordStatusChangeEvent(oldStatus, newStatus, lastError)
+
 	return nodeState, nil
 }
 
@@ -173,24 +181,9 @@ func (w *NodeStateStatusWriter) setNodeStateStatus(msg Message) (*sriovnetworkv1
 			// clear lastSyncError when sync Succeeded
 			nodeState.Status.LastSyncError = msg.lastSyncError
 		}
-		oldStatus := nodeState.Status.SyncStatus
-		newStatus := msg.syncStatus
-		nodeState.Status.SyncStatus = newStatus
-		glog.V(0).Infof("setNodeStateStatus(): syncStatus: %s, lastSyncError: %s", nodeState.Status.SyncStatus, nodeState.Status.LastSyncError)
+		nodeState.Status.SyncStatus = msg.syncStatus
 
-		if oldStatus != newStatus {
-			if oldStatus == "" {
-				oldStatus = Unknown
-			}
-			if newStatus == "" {
-				newStatus = Unknown
-			}
-			eventMsg := fmt.Sprintf("Status changed from: %s to: %s", oldStatus, newStatus)
-			if nodeState.Status.LastSyncError != "" {
-				eventMsg = fmt.Sprintf("%s. Last Error: %s", eventMsg, nodeState.Status.LastSyncError)
-			}
-			w.eventRecorder.SendEvent("SyncStatusChanged", eventMsg)
-		}
+		glog.V(0).Infof("setNodeStateStatus(): syncStatus: %s, lastSyncError: %s", nodeState.Status.SyncStatus, nodeState.Status.LastSyncError)
 	})
 	if err != nil {
 		return nil, err
@@ -198,6 +191,23 @@ func (w *NodeStateStatusWriter) setNodeStateStatus(msg Message) (*sriovnetworkv1
 	return nodeState, nil
 }
 
+// recordStatusChangeEvent sends event in case oldStatus differs from newStatus
+func (w *NodeStateStatusWriter) recordStatusChangeEvent(oldStatus, newStatus, lastError string) {
+	if oldStatus != newStatus {
+		if oldStatus == "" {
+			oldStatus = Unknown
+		}
+		if newStatus == "" {
+			newStatus = Unknown
+		}
+		eventMsg := fmt.Sprintf("Status changed from: %s to: %s", oldStatus, newStatus)
+		if lastError != "" {
+			eventMsg = fmt.Sprintf("%s. Last Error: %s", eventMsg, lastError)
+		}
+		w.eventRecorder.SendEvent("SyncStatusChanged", eventMsg)
+	}
+}
+
 // getNodeState queries the kube apiserver to get the SriovNetworkNodeState CR
 func (w *NodeStateStatusWriter) getNodeState() (*sriovnetworkv1.SriovNetworkNodeState, error) {
 	var lastErr error