diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
index 574bba5..20ab17e 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
@@ -47,7 +47,7 @@
     protected void doExecute() throws Exception {
         KubevirtRouterService service = get(KubevirtRouterService.class);
         List<KubevirtFloatingIp> fips = Lists.newArrayList(service.floatingIps());
-        fips.sort(Comparator.comparing(KubevirtFloatingIp::routerName));
+        fips.sort(Comparator.comparing(KubevirtFloatingIp::networkName));
 
         String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
                 CLI_IP_ADDRESS_LENGTH, CLI_NAME_LENGTH, CLI_IP_ADDRESS_LENGTH));
@@ -55,13 +55,13 @@
         if (outputJson()) {
             print("%s", json(fips));
         } else {
-            print(format, "Router Name", "Floating IP", "POD Name", "Fixed IP");
+            print(format, "Network Name", "Floating IP", "POD Name", "Fixed IP");
             for (KubevirtFloatingIp fip : fips) {
 
                 String fixedIp = fip.fixedIp() == null ? "N/A" : fip.fixedIp().toString();
                 String podName = fip.podName() == null ? "N/A" : fip.podName();
 
-                print(format, StringUtils.substring(fip.routerName(), 0,
+                print(format, StringUtils.substring(fip.networkName(), 0,
                         CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
                         StringUtils.substring(fip.floatingIp().toString(), 0,
                                 CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
index 16fd082..f2a3505 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
@@ -38,6 +38,7 @@
     private static final String ID = "id";
     private static final String ROUTER_NAME = "routerName";
     private static final String POD_NAME = "podName";
+    private static final String NETWORK_NAME = "networkName";
     private static final String FLOATING_IP = "floatingIp";
     private static final String FIXED_IP = "fixedIp";
 
@@ -50,6 +51,7 @@
         ObjectNode result = context.mapper().createObjectNode()
                 .put(ID, fip.id())
                 .put(ROUTER_NAME, fip.routerName())
+                .put(NETWORK_NAME, fip.networkName())
                 .put(FLOATING_IP, fip.floatingIp().toString());
 
         if (fip.podName() != null) {
@@ -74,10 +76,13 @@
                 ROUTER_NAME + MISSING_MESSAGE);
         String floatingIp = nullIsIllegal(json.get(FLOATING_IP).asText(),
                 FLOATING_IP + MISSING_MESSAGE);
+        String networkName = nullIsIllegal(json.get(NETWORK_NAME).asText(),
+                NETWORK_NAME + MISSING_MESSAGE);
 
         KubevirtFloatingIp.Builder builder = DefaultKubevirtFloatingIp.builder()
                 .id(id)
                 .routerName(routerName)
+                .networkName(networkName)
                 .floatingIp(IpAddress.valueOf(floatingIp));
 
         JsonNode podName = json.get(POD_NAME);
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
index 2d566fc..c11fb2d 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
@@ -44,6 +44,7 @@
 import org.slf4j.Logger;
 
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
 
@@ -56,6 +57,10 @@
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_FLOATING_IP_REMOVED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_FLOATING_IP_UPDATED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_CREATED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_REMOVED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_UPDATED;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -72,6 +77,10 @@
 
     private static final String ERR_NOT_FOUND = " does not exist";
     private static final String ERR_DUPLICATE = " already exists";
+    private static final String MSG_FLOATING_IP = "Kubevirt floating IP %s %s with %s";
+    private static final String MSG_ASSOCIATED = "associated";
+    private static final String MSG_DISASSOCIATED = "disassociated";
+
     private static final String APP_ID = "org.onosproject.kubevirtnetwork";
 
     private static final KryoNamespace
@@ -223,10 +232,7 @@
                                     KUBEVIRT_ROUTER_CREATED, event.newValue().value())));
                     break;
                 case UPDATE:
-                    log.debug("Kubevirt router updated");
-                    eventExecutor.execute(() ->
-                            notifyDelegate(new KubevirtRouterEvent(
-                                    KUBEVIRT_ROUTER_UPDATED, event.newValue().value())));
+                    eventExecutor.execute(() -> processRouterMapUpdate(event));
                     break;
                 case REMOVE:
                     log.debug("Kubevirt router removed");
@@ -239,6 +245,59 @@
                     break;
             }
         }
+
+        private void processRouterMapUpdate(MapEvent<String, KubevirtRouter> event) {
+            log.debug("Kubevirt router updated");
+            eventExecutor.execute(() ->
+                    notifyDelegate(new KubevirtRouterEvent(
+                            KUBEVIRT_ROUTER_UPDATED, event.newValue().value())));
+
+            KubevirtRouter router = Strings.isNullOrEmpty(
+                    event.newValue().value().name()) ?
+                    null :
+                    router(event.newValue().value().name());
+
+            KubevirtRouter oldValue = event.oldValue().value();
+            KubevirtRouter newValue = event.newValue().value();
+
+            if (oldValue.external().size() == 0 && newValue.external().size() > 0) {
+                newValue.external().entrySet().stream().findAny()
+                        .ifPresent(entry ->
+                            notifyDelegate(new KubevirtRouterEvent(
+                            KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED,
+                            router, entry.getKey(), entry.getValue(),
+                            newValue.peerRouter().ipAddress().toString())));
+            }
+
+            if (oldValue.external().size() > 0 && newValue.external().size() == 0) {
+                oldValue.external().entrySet().stream().findAny()
+                        .ifPresent(entry ->
+                            notifyDelegate(new KubevirtRouterEvent(
+                            KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED,
+                            router, entry.getKey(), entry.getValue(),
+                            oldValue.peerRouter().ipAddress().toString())));
+            }
+
+            Set<String> added = new HashSet<>(newValue.internal());
+            Set<String> oldset = oldValue.internal();
+            added.removeAll(oldset);
+
+            Set<String> removed = new HashSet<>(oldValue.internal());
+            Set<String> newset = newValue.internal();
+            removed.removeAll(newset);
+
+            if (added.size() > 0) {
+                notifyDelegate(new KubevirtRouterEvent(
+                        KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED,
+                        router, added));
+            }
+
+            if (removed.size() > 0) {
+                notifyDelegate(new KubevirtRouterEvent(
+                        KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED,
+                        router, removed));
+            }
+        }
     }
 
     private class KubevirtFloatingIpMapListener implements MapEventListener<String, KubevirtFloatingIp> {
@@ -307,6 +366,8 @@
                         KUBEVIRT_FLOATING_IP_ASSOCIATED,
                         router,
                         event.newValue().value(), newPodName));
+                log.info(String.format(MSG_FLOATING_IP,
+                        event.newValue().value().floatingIp(), MSG_ASSOCIATED, newPodName));
             }
 
             if (!Strings.isNullOrEmpty(oldPodName) && Strings.isNullOrEmpty(newPodName)) {
@@ -314,6 +375,8 @@
                         KUBEVIRT_FLOATING_IP_DISASSOCIATED,
                         router,
                         event.newValue().value(), oldPodName));
+                log.info(String.format(MSG_FLOATING_IP,
+                        event.newValue().value().floatingIp(), MSG_DISASSOCIATED, oldPodName));
             }
         }
     }
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
index 18caff1..7f539de 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
@@ -394,6 +394,7 @@
         KubevirtNode electedGateway = gatewayNodeForSpecifiedNetwork(network);
         if (electedGateway == null) {
             log.warn("There's no elected gateway for the network {}", network.name());
+            return;
         }
 
         setGatewayArpRule(network, PRE_FLAT_TABLE, electedGateway.intgBridge(), install);
