diff --git a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackExternalGateway.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackExternalGateway.java
index 8f1e741..4005f88 100644
--- a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackExternalGateway.java
+++ b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackExternalGateway.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.openstacknetworking;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import org.onlab.packet.Ip4Address;
 import java.util.Map;
@@ -60,7 +61,7 @@
      * @return External fixed IP informations
      */
     public Map<String, Ip4Address> externalFixedIps() {
-        return externalFixedIps;
+        return ImmutableMap.copyOf(externalFixedIps);
     }
 
     @Override
@@ -137,7 +138,7 @@
          * @return OpenstackExternalGateway object
          */
         public OpenstackExternalGateway build() {
-            return new OpenstackExternalGateway(networkId, enablePnat, externalFixedIps);
+            return new OpenstackExternalGateway(networkId, enablePnat, ImmutableMap.copyOf(externalFixedIps));
         }
     }
 
diff --git a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackFloatingIP.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackFloatingIP.java
index bed0289..569c885 100644
--- a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackFloatingIP.java
+++ b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackFloatingIP.java
@@ -19,12 +19,14 @@
 
 import java.util.Objects;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  *  An Openstack Neutron Floating IP Model.
  */
 public final class OpenstackFloatingIP {
 
-    public enum FloatingIPStatus {
+    public enum FloatingIpStatus {
         UP,
         DOWN,
         ACTIVE,
@@ -33,13 +35,13 @@
     private final String tenantId;
     private final String networkId;
     private final Ip4Address fixedIpAddress;
-    private final String portId;
-    private final String routerId;
+    private String portId;
+    private String routerId;
     private final String id;
     private final Ip4Address floatingIpAddress;
-    private final FloatingIPStatus status;
+    private final FloatingIpStatus status;
 
-    private OpenstackFloatingIP(FloatingIPStatus status, String id, String tenantId,
+    private OpenstackFloatingIP(FloatingIpStatus status, String id, String tenantId,
                                 String networkId, Ip4Address fixedIpAddress, String portId,
                                 String routerId, Ip4Address floatingIpAddress) {
         this.status = status;
@@ -57,7 +59,7 @@
      *
      * @return floating IP status
      */
-    public FloatingIPStatus status() {
+    public FloatingIpStatus status() {
         return status;
     }
 
@@ -107,6 +109,15 @@
     }
 
     /**
+     * Updates port ID.
+     *
+     * @param portId Updated port ID
+     */
+    public void updatePortId(String portId) {
+        this.portId = portId;
+    }
+
+    /**
      * Returns router ID.
      *
      * @return router ID
@@ -116,6 +127,15 @@
     }
 
     /**
+     * Updates router ID.
+     *
+     * @param routerId Updated router ID
+     */
+    public void updateRouterId(String routerId) {
+        this.routerId = routerId;
+    }
+
+    /**
      * Returns floating IP address.
      *
      * @return Floating IP address
@@ -162,7 +182,7 @@
         private String routerId;
         private String id;
         private Ip4Address floatingIpAddress;
-        private FloatingIPStatus status;
+        private FloatingIpStatus status;
 
         /**
          * Sets tenant ID.
@@ -181,7 +201,7 @@
          * @param status Floating IP status
          * @return Builder object
          */
-        public Builder status(FloatingIPStatus status) {
+        public Builder status(FloatingIpStatus status) {
             this.status = status;
             return this;
         }
@@ -258,8 +278,9 @@
          * @return OpenstackFloatingIP object
          */
         public OpenstackFloatingIP build() {
-            return new OpenstackFloatingIP(status, id, tenantId, networkId,
-                    fixedIpAddress, portId, routerId, floatingIpAddress);
+            return new OpenstackFloatingIP(checkNotNull(status), checkNotNull(id), checkNotNull(tenantId),
+                    checkNotNull(networkId), fixedIpAddress, portId,
+                    routerId, checkNotNull(floatingIpAddress));
 
         }
     }
diff --git a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackRouter.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackRouter.java
index 8e513f1..5230c18 100644
--- a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackRouter.java
+++ b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackRouter.java
@@ -16,6 +16,7 @@
 package org.onosproject.openstacknetworking;
 
 import java.util.Objects;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * An Openstack Neutron Router Model.
@@ -31,9 +32,9 @@
     private final String tenantId;
     private final String id;
     private final String name;
-    private final RouterStatus status;
-    private final boolean adminStateUp;
-    private final OpenstackExternalGateway gatewayExternalInfo;
+    private RouterStatus status;
+    private boolean adminStateUp;
+    private OpenstackExternalGateway gatewayExternalInfo;
 
     private OpenstackRouter(String id, String tenantId, String name, RouterStatus status,
                            boolean adminStateUp, OpenstackExternalGateway gatewayExternalInfo) {
@@ -209,8 +210,8 @@
          * @return OpenstasckRouter object
          */
         public OpenstackRouter build() {
-            return new OpenstackRouter(id, tenantId, name, status,
-                    adminStateUp, gatewayExternalInfo);
+            return new OpenstackRouter(checkNotNull(id), checkNotNull(tenantId), name, checkNotNull(status),
+                    checkNotNull(adminStateUp), gatewayExternalInfo);
         }
     }
 
diff --git a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackRouterInterface.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackRouterInterface.java
index 972e6c5..78ab815 100644
--- a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackRouterInterface.java
+++ b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackRouterInterface.java
@@ -99,12 +99,12 @@
      * An Openstack Router Interface Builder class.
      */
     public static final class Builder {
-         private String id;
-         private String tenantId;
-         private String subnetId;
-         private String portId;
+        private String id;
+        private String tenantId;
+        private String subnetId;
+        private String portId;
 
-         /**
+        /**
          * Sets Router Interface ID.
          *
          * @param id router interface ID
@@ -148,14 +148,14 @@
             return this;
         }
 
-
         /**
          * Builds an Openstack Router Interface object.
          *
          * @return OpenstackRouterInterface object
          */
         public OpenstackRouterInterface build() {
-            return new OpenstackRouterInterface(id, tenantId, subnetId, portId);
+            return new OpenstackRouterInterface(checkNotNull(id), checkNotNull(tenantId),
+                    checkNotNull(subnetId), checkNotNull(portId));
         }
 
     }
