diff --git a/.gitignore b/.gitignore
index ad6e64ae7652599743f9625971681d5529b7b232..638f2ea666d0127a1cd5c45673558ed9074cc950 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,5 @@
 .DS_Store
 target
 thrift
-logback.xml
 *.swp
 *.pyc
diff --git a/logback.xml b/logback.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b85b463f507fd1b4037f809bc1ed566394a67195
--- /dev/null
+++ b/logback.xml
@@ -0,0 +1,14 @@
+<configuration scan="true">
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%level [%logger:%thread] %msg%n</pattern>
+    </encoder>
+  </appender>
+  <root level="INFO">
+    <appender-ref ref="STDOUT" />
+  </root>
+  <logger name="org" level="WARN"/>
+  <logger name="LogService" level="WARN"/> <!-- Restlet access logging -->
+  <logger name="net.floodlightcontroller" level="INFO"/>
+  <logger name="net.floodlightcontroller.logging" level="WARN"/>
+</configuration>
diff --git a/src/main/java/net/floodlightcontroller/virtualnetwork/VirtualNetwork.java b/src/main/java/net/floodlightcontroller/virtualnetwork/VirtualNetwork.java
index 51cd4dd1e1da9b38d161dd93a27da809681393cf..f5dfb21d4287054ddb649f038012ea9b4e78f893 100644
--- a/src/main/java/net/floodlightcontroller/virtualnetwork/VirtualNetwork.java
+++ b/src/main/java/net/floodlightcontroller/virtualnetwork/VirtualNetwork.java
@@ -2,11 +2,7 @@ package net.floodlightcontroller.virtualnetwork;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Comparator;
 import java.util.Iterator;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 import net.floodlightcontroller.util.MACAddress;
@@ -37,6 +33,15 @@ public class VirtualNetwork{
         this.hosts = new ArrayList<MACAddress>();
         return;        
     }
+
+    /**
+     * Sets network name
+     * @param gateway: IP address as String
+     */
+    public void setName(String name){
+        this.name = name;
+        return;                
+    }
     
     /**
      * Sets network gateway IP address
diff --git a/src/main/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilter.java b/src/main/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilter.java
index 121108ff0c8c96f91f1fe29ce59f1c1d32f0da56..012dfb6bc1790ae61f91b7268d03913dcfaa2666 100644
--- a/src/main/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilter.java
+++ b/src/main/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilter.java
@@ -140,7 +140,10 @@ public class VirtualNetworkFilter
             }
         }
         nameToGuid.put(network, guid);
-        vNetsByGuid.put(guid, new VirtualNetwork(network, guid));
+        if (vNetsByGuid.containsKey(guid))
+            vNetsByGuid.get(guid).setName(network); //network already exists, just updating name
+        else
+            vNetsByGuid.put(guid, new VirtualNetwork(network, guid)); //new network
         
         // If they don't specify a new gateway the old one will be preserved
         if ((gateway != null) && (gateway != 0)) {
diff --git a/src/test/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilterTest.java b/src/test/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilterTest.java
index 8a66f2af27bf619f07c27c0248244c9d1324af1b..32afe4e160d9b365846523790a35c0128a22d42f 100644
--- a/src/test/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilterTest.java
+++ b/src/test/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilterTest.java
@@ -214,12 +214,20 @@ public class VirtualNetworkFilterTest extends FloodlightTestCase {
         assertTrue(vns.gatewayToGuid.get(IPv4.toIPv4Address(gw1)).contains(guid1));
         assertTrue(vns.nameToGuid.get(net1).equals(guid1));
         assertTrue(vns.guidToGateway.get(guid1).equals(IPv4.toIPv4Address(gw1)));
-        
+        assertTrue(vns.vNetsByGuid.get(guid1).name.equals(net1));
+        assertTrue(vns.vNetsByGuid.get(guid1).guid.equals(guid1));
+        assertTrue(vns.vNetsByGuid.get(guid1).gateway.equals(gw1));
+        assertTrue(vns.vNetsByGuid.get(guid1).hosts.size()==0);
+
         // Test creating network without a gateway
         vns.createNetwork(guid2, net2, null);
         assertTrue(vns.nameToGuid.get(net2).equals(guid2));
         assertTrue(vns.guidToGateway.get(guid2) == null);
         assertTrue(vns.gatewayToGuid.get(IPv4.toIPv4Address(gw1)).size() == 1);
+        assertTrue(vns.vNetsByGuid.get(guid2).name.equals(net2));
+        assertTrue(vns.vNetsByGuid.get(guid2).guid.equals(guid2));
+        assertTrue(vns.vNetsByGuid.get(guid2).gateway == null);
+        assertTrue(vns.vNetsByGuid.get(guid2).hosts.size()==0);
         
         // Test creating a network that shares the gateway with net1
         vns.createNetwork(guid3, net3, IPv4.toIPv4Address(gw1));
@@ -228,11 +236,17 @@ public class VirtualNetworkFilterTest extends FloodlightTestCase {
         assertTrue(vns.gatewayToGuid.get(IPv4.toIPv4Address(gw1)).size() == 2);
         assertTrue(vns.nameToGuid.get(net3).equals(guid3));
         assertTrue(vns.guidToGateway.get(guid3).equals(IPv4.toIPv4Address(gw1)));
+        assertTrue(vns.vNetsByGuid.get(guid3).name.equals(net3));
+        assertTrue(vns.vNetsByGuid.get(guid3).guid.equals(guid3));
+        assertTrue(vns.vNetsByGuid.get(guid3).gateway.equals(gw1));
+        assertTrue(vns.vNetsByGuid.get(guid3).hosts.size()==0);
+
     }
     
     @Test
     public void testModifyNetwork() {
         // Create some networks
+        
         testCreateNetwork();
         // Modify net2 to add a gateway
         vns.createNetwork(guid2, net2, IPv4.toIPv4Address(gw1));
@@ -246,8 +260,10 @@ public class VirtualNetworkFilterTest extends FloodlightTestCase {
         vns.createNetwork(guid2, "newnet2", null);
         // Make sure the gateway is still there
         assertTrue(vns.gatewayToGuid.get(IPv4.toIPv4Address(gw1)).contains(guid2));
+        assertTrue(vns.vNetsByGuid.get(guid2).gateway.equals(gw1));
         // make sure the new name mapping was learned
         assertTrue(vns.nameToGuid.get("newnet2").equals(guid2));
+        assertTrue(vns.vNetsByGuid.get(guid2).name.equals("newnet2"));
         // and the old one was deleted
         assertFalse(vns.nameToGuid.containsKey(net2));
     }
@@ -262,6 +278,7 @@ public class VirtualNetworkFilterTest extends FloodlightTestCase {
         assertTrue(vns.gatewayToGuid.get(IPv4.toIPv4Address(gw1)).size() == 2);
         assertFalse(vns.nameToGuid.containsKey(net2));
         assertFalse(vns.guidToGateway.containsKey(net2));
+        assertTrue(vns.vNetsByGuid.get(guid2)==null);
     }
     
     @Test
@@ -270,25 +287,38 @@ public class VirtualNetworkFilterTest extends FloodlightTestCase {
         vns.addHost(mac1, guid1, hostPort1);
         assertTrue(vns.macToGuid.get(mac1).equals(guid1));
         assertTrue(vns.portToMac.get(hostPort1).equals(mac1));
+        assertTrue(vns.vNetsByGuid.get(guid1).hosts.contains(mac1));
         vns.addHost(mac2, guid1, hostPort2);
         assertTrue(vns.macToGuid.get(mac2).equals(guid1));
         assertTrue(vns.portToMac.get(hostPort2).equals(mac2));
+        assertTrue(vns.vNetsByGuid.get(guid1).hosts.contains(mac2));
         vns.addHost(mac3, guid3, hostPort3);
         vns.addHost(mac4, guid3, hostPort4);
+        assertTrue(vns.vNetsByGuid.get(guid3).hosts.contains(mac4));
     }
     
     @Test
     public void testDeleteHost() {
         testAddHost();
+
+        String host1Guid = vns.macToGuid.get(mac1);
         vns.deleteHost(mac1, null);
         assertFalse(vns.macToGuid.containsKey(mac1));
         assertFalse(vns.portToMac.containsKey(hostPort1));
+        assertFalse(vns.vNetsByGuid.get(host1Guid).hosts.contains(mac1));
+        
+        String host2Guid = vns.macToGuid.get(vns.portToMac.get(hostPort2));
         vns.deleteHost(null, hostPort2);
         assertFalse(vns.macToGuid.containsKey(mac2));
         assertFalse(vns.portToMac.containsKey(hostPort2));
+        assertFalse(vns.vNetsByGuid.get(host2Guid).hosts.contains(mac2));
+
+        String host3Guid = vns.macToGuid.get(mac3);        
         vns.deleteHost(mac3, hostPort3);
         assertFalse(vns.macToGuid.containsKey(mac3));
         assertFalse(vns.portToMac.containsKey(hostPort3));
+        assertFalse(vns.vNetsByGuid.get(host3Guid).hosts.contains(mac3));
+        
     }
     
     @Test