diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
index 7fd8958..d4d6b23 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
@@ -202,6 +202,33 @@
         return podName;
     }
 
+    /**
+     * Returns the internal of the router event.
+     *
+     * @return kubevirt internal network set, null if the event is not relevant to the internal
+     */
+    public Set<String> internal() {
+        return internal;
+    }
+
+    /**
+     * Returns the external IP address of the router event.
+     *
+     * @return external IP address, null if the event is not relevant to the external
+     */
+    public String externalIp() {
+        return externalIp;
+    }
+
+    /**
+     * Returns the external network of the router event.
+     *
+     * @return external network, null if the event is not relevant ot the external
+     */
+    public String externalNet() {
+        return externalNet;
+    }
+
     @Override
     public String toString() {
         if (floatingIp == null) {
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
index 2b90712..94b3161 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
@@ -38,7 +38,9 @@
 import org.onosproject.kubevirtnetworking.api.KubevirtRouterListener;
 import org.onosproject.store.service.TestStorageService;
 
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -96,6 +98,14 @@
             .enableSnat(true)
             .build();
 
+    private static final KubevirtRouter ROUTER_WITH_SINGLE_INTERNAL = DefaultKubevirtRouter.builder()
+            .name(ROUTER_NAME)
+            .description(ROUTER_NAME)
+            .internal(ImmutableSet.of("vxlan-1"))
+            .external(ImmutableMap.of())
+            .enableSnat(true)
+            .build();
+
     private static final KubevirtRouter ROUTER_WITH_EXTERNAL = DefaultKubevirtRouter.builder()
             .name(ROUTER_NAME)
             .description(ROUTER_NAME)
@@ -236,6 +246,22 @@
                 KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED);
     }
 
+    @Test
+    public void testRouterInternalShrink() {
+        target.createRouter(ROUTER_WITH_INTERNAL);
+        assertEquals("Number of router did not match", 1, target.routers().size());
+        assertEquals("Router internal did not match", 2, target.router(ROUTER_NAME).internal().size());
+
+        target.updateRouter(ROUTER_WITH_SINGLE_INTERNAL);
+        assertEquals("Number of router did not match", 1, target.routers().size());
+        assertEquals("Router internal did not match", 1, target.router(ROUTER_NAME).internal().size());
+
+        validateEvents(KUBEVIRT_ROUTER_CREATED, KUBEVIRT_ROUTER_UPDATED,
+                KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED);
+
+        validateInternalRemoval(ImmutableSet.of("vxlan-2"));
+    }
+
     /**
      * Tests router's external networks attached and detached.
      */
@@ -439,10 +465,18 @@
     private static class TestKubevirtRouterListener implements KubevirtRouterListener {
 
         private List<KubevirtRouterEvent> events = Lists.newArrayList();
+        private Set<String> internalAdded = new HashSet<>();
+        private Set<String> internalRemoved = new HashSet<>();
 
         @Override
         public void event(KubevirtRouterEvent event) {
             events.add(event);
+            if (event.type() == KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED) {
+                internalAdded = event.internal();
+            }
+            if (event.type() == KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED) {
+                internalRemoved = event.internal();
+            }
         }
     }
 
@@ -455,4 +489,14 @@
         }
         testListener.events.clear();
     }
+
+    private void validateInternalAddition(Set<String> internal) {
+        assertEquals("internal addition entries", internal, testListener.internalAdded);
+        testListener.internalAdded.clear();
+    }
+
+    private void validateInternalRemoval(Set<String> internal) {
+        assertEquals("internal addition entries", internal, testListener.internalRemoved);
+        testListener.internalRemoved.clear();
+    }
 }
