diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
index 7944017..fd2c479 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
@@ -269,42 +269,39 @@
         TenantNetwork network = null;
         ConcurrentMap<TenantNetworkId, TenantNetwork> networksMap = Maps
                 .newConcurrentMap();
-        if (node != null) {
-            checkArgument(node.get("admin_state_up").isBoolean(), "admin_state_up should be boolean");
-            checkArgument(node.get("shared").isBoolean(), "shared should be boolean");
-            checkArgument(node.get("router:external").isBoolean(), "router:external should be boolean");
-            String name = node.get("name").asText();
-            boolean adminStateUp = node.get("admin_state_up").asBoolean();
-            String state = node.get("status").asText();
-            boolean shared = node.get("shared").asBoolean();
-            String tenantId = node.get("tenant_id").asText();
-            boolean routerExternal = node.get("router:external").asBoolean();
-            String type = node.get("provider:network_type").asText();
-            String physicalNetwork = node.get("provider:physical_network")
-                    .asText();
-            String segmentationId = node.get("provider:segmentation_id")
-                    .asText();
-            TenantNetworkId id = null;
-            if (flag == CREATE_NETWORK) {
-                id = TenantNetworkId.networkId(node.get("id").asText());
-            } else if (flag == UPDATE_NETWORK) {
-                id = networkId;
-            }
-            network = new DefaultTenantNetwork(
-                                               id,
-                                               name,
-                                               adminStateUp,
-                                               isState(state),
-                                               shared,
-                                               TenantId.tenantId(tenantId),
-                                               routerExternal,
-                                               isType(type),
-                                               PhysicalNetwork
-                                                       .physicalNetwork(physicalNetwork),
-                                               SegmentationId
-                                                       .segmentationId(segmentationId));
-            networksMap.putIfAbsent(id, network);
+        checkArgument(node.get("admin_state_up").isBoolean(), "admin_state_up should be boolean");
+        checkArgument(node.get("shared").isBoolean(), "shared should be boolean");
+        checkArgument(node.get("router:external").isBoolean(), "router:external should be boolean");
+        String name = node.get("name").asText();
+        boolean adminStateUp = node.get("admin_state_up").asBoolean();
+        String state = node.get("status").asText();
+        boolean shared = node.get("shared").asBoolean();
+        String tenantId = node.get("tenant_id").asText();
+        boolean routerExternal = node.get("router:external").asBoolean();
+        String type = node.get("provider:network_type").asText();
+        String physicalNetwork = node.get("provider:physical_network").asText();
+        String segmentationId = node.get("provider:segmentation_id").asText();
+        TenantNetworkId id = null;
+        if (flag.equals(CREATE_NETWORK)) {
+            id = TenantNetworkId.networkId(node.get("id").asText());
+        } else if (flag.equals(UPDATE_NETWORK)) {
+            id = networkId;
         }
+        network = new DefaultTenantNetwork(
+                                           id,
+                                           name,
+                                           adminStateUp,
+                                           isState(state),
+                                           shared,
+                                           TenantId.tenantId(tenantId),
+                                           routerExternal,
+                                           isType(type),
+                                           PhysicalNetwork
+                                                   .physicalNetwork(physicalNetwork),
+                                           SegmentationId
+                                                   .segmentationId(segmentationId));
+        networksMap.putIfAbsent(id, network);
+
         return Collections.unmodifiableCollection(networksMap.values());
     }
 
@@ -319,38 +316,32 @@
         TenantNetwork network = null;
         ConcurrentMap<TenantNetworkId, TenantNetwork> networksMap = Maps
                 .newConcurrentMap();
-        if (nodes != null) {
-            for (JsonNode node : nodes) {
-                String id = node.get("id").asText();
-                String name = node.get("name").asText();
-                boolean adminStateUp = node.get("admin_state_up").asBoolean();
-                String state = node.get("status").asText();
-                boolean shared = node.get("shared").asBoolean();
-                String tenantId = node.get("tenant_id").asText();
-                boolean routerExternal = node.get("router:external")
-                        .asBoolean();
-                String type = node.get("provider:network_type").asText();
-                String physicalNetwork = node.get("provider:physical_network")
-                        .asText();
-                String segmentationId = node.get("provider:segmentation_id")
-                        .asText();
-                network = new DefaultTenantNetwork(
-                                                   TenantNetworkId
-                                                           .networkId(id),
-                                                   name,
-                                                   adminStateUp,
-                                                   isState(state),
-                                                   shared,
-                                                   TenantId.tenantId(tenantId),
-                                                   routerExternal,
-                                                   isType(type),
-                                                   PhysicalNetwork
-                                                           .physicalNetwork(physicalNetwork),
-                                                   SegmentationId
-                                                           .segmentationId(segmentationId));
-                networksMap.putIfAbsent(TenantNetworkId.networkId(id), network);
-            }
+        for (JsonNode node : nodes) {
+            String id = node.get("id").asText();
+            String name = node.get("name").asText();
+            boolean adminStateUp = node.get("admin_state_up").asBoolean();
+            String state = node.get("status").asText();
+            boolean shared = node.get("shared").asBoolean();
+            String tenantId = node.get("tenant_id").asText();
+            boolean routerExternal = node.get("router:external")
+                    .asBoolean();
+            String type = node.get("provider:network_type").asText();
+            String physicalNetwork = node.get("provider:physical_network").asText();
+            String segmentationId = node.get("provider:segmentation_id").asText();
+            network = new DefaultTenantNetwork(
+                                               TenantNetworkId.networkId(id),
+                                               name,
+                                               adminStateUp,
+                                               isState(state),
+                                               shared,
+                                               TenantId.tenantId(tenantId),
+                                               routerExternal,
+                                               isType(type),
+                                               PhysicalNetwork.physicalNetwork(physicalNetwork),
+                                               SegmentationId.segmentationId(segmentationId));
+            networksMap.putIfAbsent(TenantNetworkId.networkId(id), network);
         }
+
         return Collections.unmodifiableCollection(networksMap.values());
     }
 
