diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
index 44395ef..202046e 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
@@ -189,6 +189,18 @@
     }
 
     /**
+     * Tests removal of a virtual network twice.
+     */
+    @Test(expected = IllegalStateException.class)
+    public void testRemoveVnetTwice() {
+        manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        manager.removeVirtualNetwork(virtualNetwork.id());
+        manager.removeVirtualNetwork(virtualNetwork.id());
+    }
+
+    /**
      * Tests add and remove of virtual networks.
      */
     @Test
@@ -205,10 +217,6 @@
             manager.removeVirtualNetwork(virtualNetwork.id());
             assertEquals("The expected virtual network size does not match",
                          --remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
-            // attempt to remove the same virtual network again.
-            manager.removeVirtualNetwork(virtualNetwork.id());
-            assertEquals("The expected virtual network size does not match",
-                         remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
         }
         virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
         assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
index 81a9a3c..529a0cd 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
@@ -353,35 +353,35 @@
     @Override
     public void removeNetwork(NetworkId networkId) {
         // Make sure that the virtual network exists before attempting to remove it.
-        if (networkExists(networkId)) {
-            //Remove all the devices of this network
-            Set<VirtualDevice> deviceSet = getDevices(networkId);
-            if (deviceSet != null) {
-                deviceSet.forEach(virtualDevice -> removeDevice(networkId, virtualDevice.id()));
-            }
-            //TODO update both maps in one transaction.
+        checkState(networkExists(networkId), "The network does not exist.");
 
-            VirtualNetwork virtualNetwork = networkIdVirtualNetworkMap.remove(networkId);
-            if (virtualNetwork == null) {
-                return;
-            }
-            TenantId tenantId = virtualNetwork.tenantId();
-
-            Set<NetworkId> networkIdSet = new HashSet<>();
-            tenantIdNetworkIdSetMap.get(tenantId).forEach(networkId1 -> {
-                if (networkId1.id().equals(networkId.id())) {
-                    networkIdSet.add(networkId1);
-                }
-            });
-
-            tenantIdNetworkIdSetMap.compute(virtualNetwork.tenantId(), (id, existingNetworkIds) -> {
-                if (existingNetworkIds == null || existingNetworkIds.isEmpty()) {
-                    return new HashSet<>();
-                } else {
-                    return new HashSet<>(Sets.difference(existingNetworkIds, networkIdSet));
-                }
-            });
+        //Remove all the devices of this network
+        Set<VirtualDevice> deviceSet = getDevices(networkId);
+        if (deviceSet != null) {
+            deviceSet.forEach(virtualDevice -> removeDevice(networkId, virtualDevice.id()));
         }
+        //TODO update both maps in one transaction.
+
+        VirtualNetwork virtualNetwork = networkIdVirtualNetworkMap.remove(networkId);
+        if (virtualNetwork == null) {
+            return;
+        }
+        TenantId tenantId = virtualNetwork.tenantId();
+
+        Set<NetworkId> networkIdSet = new HashSet<>();
+        tenantIdNetworkIdSetMap.get(tenantId).forEach(networkId1 -> {
+            if (networkId1.id().equals(networkId.id())) {
+                networkIdSet.add(networkId1);
+            }
+        });
+
+        tenantIdNetworkIdSetMap.compute(virtualNetwork.tenantId(), (id, existingNetworkIds) -> {
+            if (existingNetworkIds == null || existingNetworkIds.isEmpty()) {
+                return new HashSet<>();
+            } else {
+                return new HashSet<>(Sets.difference(existingNetworkIds, networkIdSet));
+            }
+        });
     }
 
     /**
@@ -395,6 +395,7 @@
         return (networkIdVirtualNetworkMap.containsKey(networkId));
     }
 
+
     @Override
     public VirtualDevice addDevice(NetworkId networkId, DeviceId deviceId) {
         checkState(networkExists(networkId), "The network has not been added.");
