diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
index 6dc98e2..213fa4e 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
@@ -32,6 +32,7 @@
     private final String id;
     private final String routerName;
     private final String podName;
+    private final String networkName;
     private final IpAddress floatingIp;
     private final IpAddress fixedIp;
 
@@ -41,14 +42,16 @@
      * @param id            floating IP identifier
      * @param routerName    router name
      * @param podName       POD name
+     * @param networkName   network name
      * @param floatingIp    floating IP address
      * @param fixedIp       fixed IP address
      */
     public DefaultKubevirtFloatingIp(String id, String routerName, String podName,
-                                     IpAddress floatingIp, IpAddress fixedIp) {
+                                     String networkName, IpAddress floatingIp, IpAddress fixedIp) {
         this.id = id;
         this.routerName = routerName;
         this.podName = podName;
+        this.networkName = networkName;
         this.floatingIp = floatingIp;
         this.fixedIp = fixedIp;
     }
@@ -64,6 +67,11 @@
     }
 
     @Override
+    public String networkName() {
+        return networkName;
+    }
+
+    @Override
     public IpAddress floatingIp() {
         return floatingIp;
     }
@@ -82,6 +90,7 @@
     public KubevirtFloatingIp updateFixedIp(IpAddress ip) {
         return DefaultKubevirtFloatingIp.builder()
                 .id(id)
+                .networkName(networkName)
                 .routerName(routerName)
                 .floatingIp(floatingIp)
                 .fixedIp(ip)
@@ -93,6 +102,7 @@
     public KubevirtFloatingIp updatePodName(String name) {
         return DefaultKubevirtFloatingIp.builder()
                 .id(id)
+                .networkName(networkName)
                 .routerName(routerName)
                 .floatingIp(floatingIp)
                 .fixedIp(fixedIp)
@@ -111,6 +121,7 @@
         DefaultKubevirtFloatingIp that = (DefaultKubevirtFloatingIp) o;
         return id.equals(that.id) && routerName.equals(that.routerName) &&
                 Objects.equals(podName, that.podName) &&
+                networkName.equals(that.networkName) &&
                 floatingIp.equals(that.floatingIp) &&
                 Objects.equals(fixedIp, that.fixedIp);
     }
@@ -126,6 +137,7 @@
                 .add("id", id)
                 .add("routerName", routerName)
                 .add("podName", podName)
+                .add("networkName", networkName)
                 .add("floatingIp", floatingIp)
                 .add("fixedIp", fixedIp)
                 .toString();
@@ -145,16 +157,18 @@
         private String id;
         private String routerName;
         private String podName;
+        private String networkName;
         private IpAddress floatingIp;
         private IpAddress fixedIp;
 
         @Override
         public KubevirtFloatingIp build() {
             checkArgument(id != null, NOT_NULL_MSG, "id");
+            checkArgument(networkName != null, NOT_NULL_MSG, "networkName");
             checkArgument(routerName != null, NOT_NULL_MSG, "routerName");
             checkArgument(floatingIp != null, NOT_NULL_MSG, "floatingIp");
 
-            return new DefaultKubevirtFloatingIp(id, routerName, podName, floatingIp, fixedIp);
+            return new DefaultKubevirtFloatingIp(id, routerName, podName, networkName, floatingIp, fixedIp);
         }
 
         @Override
@@ -170,6 +184,12 @@
         }
 
         @Override
+        public Builder networkName(String name) {
+            this.networkName = name;
+            return this;
+        }
+
+        @Override
         public Builder floatingIp(IpAddress ip) {
             this.floatingIp = ip;
             return this;
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
index 4bf04a2..98653d9 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
@@ -80,12 +80,20 @@
 
     @Override
     public Set<String> internal() {
-        return ImmutableSet.copyOf(internal);
+        if (internal == null) {
+            return ImmutableSet.of();
+        } else {
+            return ImmutableSet.copyOf(internal);
+        }
     }
 
     @Override
     public Map<String, String> external() {
-        return ImmutableMap.copyOf(external);
+        if (external == null) {
+            return ImmutableMap.of();
+        } else {
+            return ImmutableMap.copyOf(external);
+        }
     }
 
     @Override
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
index f879d2b..27019b8 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
@@ -37,6 +37,13 @@
     String routerName();
 
     /**
+     * Returns the name of network where the floating IPs are belong to.
+     *
+     * @return name of network
+     */
+    String networkName();
+
+    /**
      * Returns the floating IP address.
      *
      * @return floating IP address
@@ -98,6 +105,14 @@
         Builder routerName(String name);
 
         /**
+         * Returns kubevirt floating IP builder with supplied network name.
+         *
+         * @param name network name
+         * @return floating IP builder
+         */
+        Builder networkName(String name);
+
+        /**
          * Returns kubevirt floating IP builder with supplied floating IP address.
          *
          * @param ip floating IP address
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 c9e1f16..7fd8958 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
@@ -17,6 +17,8 @@
 
 import org.onosproject.event.AbstractEvent;
 
+import java.util.Set;
+
 import static com.google.common.base.MoreObjects.toStringHelper;
 
 /**
@@ -26,6 +28,10 @@
 
     private final KubevirtFloatingIp floatingIp;
     private final String podName;
+    private final Set<String> internal;
+    private final String externalIp;
+    private final String externalNet;
+    private final String peerRouterIp;
 
     /**
      * Creates an event of a given type for the specified kubevirt router.
@@ -37,6 +43,10 @@
         super(type, subject);
         this.floatingIp = null;
         this.podName = null;
+        this.internal = null;
+        this.externalIp = null;
+        this.externalNet = null;
+        this.peerRouterIp = null;
     }
 
     /**
@@ -50,6 +60,10 @@
         super(type, subject);
         this.floatingIp = floatingIp;
         this.podName = null;
+        this.internal = null;
+        this.externalIp = null;
+        this.externalNet = null;
+        this.peerRouterIp = null;
     }
 
     /**
@@ -64,6 +78,48 @@
         super(type, subject);
         this.floatingIp = floatingIp;
         this.podName = podName;
+        this.internal = null;
+        this.externalIp = null;
+        this.externalNet = null;
+        this.peerRouterIp = null;
+    }
+
+    /**
+     * Creates an event of a given type for the specified kubevirt router.
+     *
+     * @param type        kubevirt router event type
+     * @param subject     kubevirt router
+     * @param internal    internal networks attached to the router
+     */
+    public KubevirtRouterEvent(Type type, KubevirtRouter subject, Set<String> internal) {
+        super(type, subject);
+        this.internal = internal;
+        this.podName = null;
+        this.floatingIp = null;
+        this.externalIp = null;
+        this.externalNet = null;
+        this.peerRouterIp = null;
+    }
+
+    /**
+     * Creates an event of a given type for the specified kubevirt router.
+     *
+     * @param type          kubevirt router event type
+     * @param subject       kubevirt router
+     * @param externalIp    virtual router's IP address included in external network
+     * @param externalNet   external network name
+     * @param peerRouterIp  external peer router IP address
+     */
+    public KubevirtRouterEvent(Type type, KubevirtRouter subject,
+                               String externalIp, String externalNet,
+                               String peerRouterIp) {
+        super(type, subject);
+        this.internal = null;
+        this.podName = null;
+        this.floatingIp = null;
+        this.externalIp = externalIp;
+        this.externalNet = externalNet;
+        this.peerRouterIp = peerRouterIp;
     }
 
     public enum Type {
@@ -83,6 +139,26 @@
         KUBEVIRT_ROUTER_REMOVED,
 
         /**
+         * Signifies that a new external network is added to the router.
+         */
+        KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED,
+
+        /**
+         * Signifies that the existing external network is removed from the router.
+         */
+        KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED,
+
+        /**
+         * Signifies that a new internal network is added to the router.
+         */
+        KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED,
+
+        /**
+         * Signifies that the existing internal network is removed from the router.
+         */
+        KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED,
+
+        /**
          * Signifies that a new kubevirt floating IP is created.
          */
         KUBEVIRT_FLOATING_IP_CREATED,
@@ -136,6 +212,10 @@
                 .add("router", subject())
                 .add("floatingIp", floatingIp)
                 .add("podName", podName)
+                .add("internal", internal)
+                .add("externalIp", externalIp)
+                .add("externalNet", externalNet)
+                .add("peerRouterIp", peerRouterIp)
                 .toString();
     }
 }
