diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
index c341037..8323f98 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
@@ -173,11 +173,17 @@
     }
 
     private void initGatewayNodeSnatForRouter(KubevirtRouter router, boolean install) {
-        KubevirtNode electedGw = gatewayNodeForSpecifiedRouter(kubevirtNodeService, router);
+        if (router.electedGateway() == null) {
+            log.warn("Fail to initialize gateway node snat for router {} " +
+                    "because there's no gateway assigned to it", router.name());
+            return;
+        }
+
+        KubevirtNode electedGw = kubevirtNodeService.node(router.electedGateway());
 
         if (electedGw == null) {
             log.warn("Fail to initialize gateway node snat for router {} " +
-                    "there's no gateway assigned to it", router.name());
+                    "because there's no gateway assigned to it", router.name());
             return;
         }
 
@@ -185,7 +191,7 @@
 
         if (routerSnatIp == null) {
             log.warn("Fail to initialize gateway node snat for router {} " +
-                    "there's no gateway snat ip assigned to it", router.name());
+                    "because there's no gateway snat ip assigned to it", router.name());
             return;
         }
 
@@ -425,6 +431,7 @@
                 case KUBEVIRT_ROUTER_CREATED:
                     eventExecutor.execute(() -> processRouterCreation(event.subject()));
                     break;
+                case KUBEVIRT_SNAT_STATUS_DISABLED:
                 case KUBEVIRT_ROUTER_REMOVED:
                     eventExecutor.execute(() -> processRouterDeletion(event.subject()));
                     break;
@@ -544,6 +551,10 @@
                 return;
             }
 
+            if (!router.enableSnat()) {
+                return;
+            }
+
             router.internal()
                     .stream()
                     .filter(networkId -> kubevirtNetworkService.network(networkId) != null)
@@ -570,6 +581,10 @@
                 return;
             }
 
+            if (!router.enableSnat()) {
+                return;
+            }
+
             router.internal()
                     .stream()
                     .filter(networkId -> kubevirtNetworkService.network(networkId) != null)
@@ -598,6 +613,10 @@
                 return;
             }
 
+            if (!router.enableSnat()) {
+                return;
+            }
+
             attachedInternalNetworks.forEach(networkId -> {
                 String routerSnatIp = router.external().keySet().stream().findAny().orElse(null);
                 if (routerSnatIp == null) {
@@ -621,6 +640,10 @@
                 return;
             }
 
+            if (!router.enableSnat()) {
+                return;
+            }
+
             detachedInternalNetworks.forEach(networkId -> {
                 String routerSnatIp = router.external().keySet().stream().findAny().orElse(null);
                 if (routerSnatIp == null) {
@@ -646,7 +669,7 @@
             if (!isRelevantHelper()) {
                 return;
             }
-            if (router.enableSnat() && !router.external().isEmpty() && router.peerRouter() != null) {
+            if (!router.external().isEmpty() && router.peerRouter() != null) {
                 initGatewayNodeSnatForRouter(router, false);
             }
         }
