diff --git a/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java b/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java
index 777bfaf44d87997e9a4020f7beec87977e698620..43ff2e3cb16731520e8eabd93c4b342a52537468 100644
--- a/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java
+++ b/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java
@@ -77,9 +77,9 @@ public class OFMessageFilterManager
     protected ConcurrentHashMap<String, Long> filterTimeoutMap = null;
     protected Timer timer = null;
 
-    protected final int MAX_FILTERS=5;
-    protected final long MAX_FILTER_TIME= 300000;  // maximum filter time is 5 minutes.
-    protected final int TIMER_INTERVAL = 1000;  // 1 second time interval.
+    protected int MAX_FILTERS=5;
+    protected long MAX_FILTER_TIME= 300000;  // maximum filter time is 5 minutes.
+    protected int TIMER_INTERVAL = 1000;  // 1 second time interval.
 
     public static final String SUCCESS                     = "0";
     public static final String FILTER_SETUP_FAILED         = "-1001"; 
@@ -131,16 +131,16 @@ public class OFMessageFilterManager
         return s;  // the return string is the session ID.
     }
 
-    public String setupFilter(String sid, ConcurrentHashMap<String,String> f, int deltaInSecond) {
+    public String setupFilter(String sid, ConcurrentHashMap<String,String> f, int deltaInMilliSeconds) {
 
         if (sid == null) {
             // Delta in filter needs to be milliseconds
-            log.debug("Adding new filter: {} for {} seconds", f, deltaInSecond);
-            return addFilter(f, deltaInSecond * 1000);
+            log.debug("Adding new filter: {} for {} ms", f, deltaInMilliSeconds);
+            return addFilter(f, deltaInMilliSeconds);
         } else {// this is the session id.
             // we will ignore the hash map features.
-            if (deltaInSecond > 0)  
-                return refreshFilter(sid, deltaInSecond * 1000);
+            if (deltaInMilliSeconds > 0)  
+                return refreshFilter(sid, deltaInMilliSeconds);
             else 
                 return deleteFilter(sid);
         }
diff --git a/src/main/java/net/floodlightcontroller/core/web/PacketTraceResource.java b/src/main/java/net/floodlightcontroller/core/web/PacketTraceResource.java
index 1a41ffc301c6702b78a8b8f484f224d1f7ba2a03..7ec59a5d6d9017f5b949be70a7fc76c1c85fe95f 100644
--- a/src/main/java/net/floodlightcontroller/core/web/PacketTraceResource.java
+++ b/src/main/java/net/floodlightcontroller/core/web/PacketTraceResource.java
@@ -104,8 +104,10 @@ public class PacketTraceResource extends ServerResource {
             setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
         } else {
             log.debug ("Call setupFilter: sid:{} filter:{}, period:{}", 
-                        new Object[] {fp.getSessionId(), filter, fp.getPeriod()});
-            sid = manager.setupFilter(fp.getSessionId(), filter, fp.getPeriod());
+                        new Object[] {fp.getSessionId(), filter, 
+                                      fp.getPeriod()*1000});
+            sid = manager.setupFilter(fp.getSessionId(), filter, 
+                                      fp.getPeriod()*1000);
             output.setSessionId(sid);
             setStatus(Status.SUCCESS_OK);
         }
diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java
index 9caaa9779737ce7bc856ae41929a5746cc27edb1..79022c20e24063554112993ee08ae8e1c5d1b10d 100755
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java
@@ -490,7 +490,9 @@ public class Device implements IDevice {
     @Override
     public String toString() {
         StringBuilder builder = new StringBuilder();
-        builder.append("Device [entityClass=");
+        builder.append("Device [deviceKey=");
+        builder.append(deviceKey);
+        builder.append(", entityClass=");
         builder.append(entityClass.getName());
         builder.append(", MAC=");
         builder.append(macAddressString);
diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
index 7c628f8ea19a2bda33eb3ad136f343949b16651e..341a0940f59775b8dfc35a5fd47395ba99f4709b 100755
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
@@ -1403,7 +1403,9 @@ IFlowReconcileListener, IInfoProvider, IHAListener {
     	Iterator<Device> diter = deviceMap.values().iterator();
     	while (diter.hasNext()) {
             Device d = diter.next();
-            reclassifyDevice(d);
+            if (d.getEntityClass() != null && 
+            		entityClassNames.contains(d.getEntityClass().getName()))
+            	reclassifyDevice(d);
     	}
     }
 
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java
index 289f3d0e2528ca13aa4972119c7a50782e177d74..9bd5570e71240de0f4dac460aec075f06f2df323 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java
@@ -87,31 +87,31 @@ public interface ILinkDiscovery {
             if (operation == UpdateOperation.LINK_REMOVED) {
                 operationString = "Link Removed";
                 return "LDUpdate [operation=" + operationString +
-                        "src=" + src + ", srcPort=" + srcPort
+                        ", src=" + src + ", srcPort=" + srcPort
                         + ", dst=" + dst + ", dstPort=" + dstPort
                         + ", type=" + type + "]";
             } else if (operation == UpdateOperation.LINK_UPDATED) {
                 operationString = "Link Updated";
                 return "LDUpdate [operation=" + operationString +
-                        "src=" + src + ", srcPort=" + srcPort
+                        ", src=" + src + ", srcPort=" + srcPort
                         + ", dst=" + dst + ", dstPort=" + dstPort
                         + ", type=" + type + "]";
             } else if (operation == UpdateOperation.PORT_DOWN) {
                 operationString = "Port Down";
                 return "LDUpdate [operation=" + operationString +
-                        "src=" + src + ", srcPort=" + srcPort + "]";
+                        ", src=" + src + ", srcPort=" + srcPort + "]";
             } else if (operation == UpdateOperation.PORT_UP) {
                 operationString = "Port Up";
                 return "LDUpdate [operation=" + operationString +
-                        "src=" + src + ", srcPort=" + srcPort + "]";
+                        ", src=" + src + ", srcPort=" + srcPort + "]";
             } else if (operation == UpdateOperation.SWITCH_REMOVED) {
                 operationString = "Switch Removed";
                 return "LDUpdate [operation=" + operationString +
-                        "src=" + src + "]";
+                        ", src=" + src + "]";
             } else if (operation == UpdateOperation.SWITCH_UPDATED) {
                 operationString = "Switch Updated";
                 return "LDUpdate [operation=" + operationString +
-                        "src=" + src + "]";
+                        ", src=" + src + "]";
             } else {
                 return "LDUpdate: Unknown update.";
             }
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index d425a96ec99fe482037ff6acbfbef60e276064c5..50de0444fe1ff78c4417c251fc41cfcb4d00d45f 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -792,7 +792,7 @@ IFloodlightModule, IInfoProvider, IHAListener {
                 if (newInfo.getUnicastValidTime() == null)
                     addLinkToBroadcastDomain(lt);
 
-                writeLink(lt, newInfo);
+                writeLinkToStorage(lt, newInfo);
                 updateOperation = UpdateOperation.LINK_UPDATED;
                 linkChanged = true;
 
@@ -847,7 +847,7 @@ IFloodlightModule, IInfoProvider, IHAListener {
                 // Write changes to storage. This will always write the updated
                 // valid time, plus the port states if they've changed (i.e. if
                 // they weren't set to null in the previous block of code.
-                writeLink(lt, newInfo);
+                writeLinkToStorage(lt, newInfo);
 
                 if (linkChanged) {
                     updateOperation = getUpdateOperation(newInfo.getSrcPortState(),
@@ -1021,7 +1021,7 @@ IFloodlightModule, IInfoProvider, IHAListener {
                                                      lt.getDst(), lt.getDstPort(),
                                                      getLinkType(lt, linkInfo),
                                                      operation));
-                            writeLink(lt, linkInfo);
+                            writeLinkToStorage(lt, linkInfo);
                             linkInfoChanged = true;
                         }
                     }
@@ -1281,7 +1281,7 @@ IFloodlightModule, IInfoProvider, IHAListener {
      * @param lt The LinkTuple to write
      * @param linkInfo The LinkInfo to write
      */
-    void writeLink(Link lt, LinkInfo linkInfo) {
+    protected void writeLinkToStorage(Link lt, LinkInfo linkInfo) {
         LinkType type = getLinkType(lt, linkInfo);
 
         // Write only direct links.  Do not write links to external
@@ -1368,7 +1368,7 @@ IFloodlightModule, IInfoProvider, IHAListener {
      * Removes a link from storage using an asynchronous call.
      * @param lt The LinkTuple to delete.
      */
-    void removeLinkFromStorage(Link lt) {
+    protected void removeLinkFromStorage(Link lt) {
         String id = getLinkId(lt);
         storageSource.deleteRowAsync(LINK_TABLE_NAME, id);
     }
diff --git a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
index 6b2c4a864ca6215e33f0998ab550c33f08504b75..3e6794d552e4de6b80d6f0821d426e47e24af840 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
@@ -343,7 +343,7 @@ public class ControllerTest extends FloodlightTestCase {
         // Test self timeout
         reset(sw);
         sw.cancelStatisticsReply(1);
-        sf = new OFStatisticsFuture(tp, sw, 1, 1, TimeUnit.SECONDS);
+        sf = new OFStatisticsFuture(tp, sw, 1, 75, TimeUnit.MILLISECONDS);
 
         replay(sw);
         ff = new FutureFetcher<List<OFStatistics>>(sf);
@@ -358,15 +358,20 @@ public class ControllerTest extends FloodlightTestCase {
 
     @Test
     public void testMessageFilterManager() throws Exception {
+        class MyOFMessageFilterManager extends OFMessageFilterManager {
+            public MyOFMessageFilterManager(int timer_interval) {
+                super();
+                TIMER_INTERVAL = timer_interval;
+            }
+        }
         FloodlightModuleContext fmCntx = new FloodlightModuleContext();
         MockFloodlightProvider mfp = new MockFloodlightProvider();
-        OFMessageFilterManager mfm = new OFMessageFilterManager();
+        OFMessageFilterManager mfm = new MyOFMessageFilterManager(100);
         MockThreadPoolService mtp = new MockThreadPoolService();
         fmCntx.addService(IOFMessageFilterManagerService.class, mfm);
         fmCntx.addService(IFloodlightProviderService.class, mfp);
         fmCntx.addService(IThreadPoolService.class, mtp);
         String sid = null;
-
         
         mfm.init(fmCntx);
         mfm.startUp(fmCntx);
@@ -378,14 +383,14 @@ public class ControllerTest extends FloodlightTestCase {
         for(i=mfm.getMaxFilterSize(); i > 0; --i) {
             filter = new ConcurrentHashMap<String,String>();
             filter.put("mac", String.format("00:11:22:33:44:%d%d", i,i));
-            sid = mfm.setupFilter(null, filter, 6);
+            sid = mfm.setupFilter(null, filter, 60);
             assertTrue(mfm.getNumberOfFilters() == mfm.getMaxFilterSize() - i +1);
         }
 
         // Add one more to see if you can't
         filter = new ConcurrentHashMap<String,String>();
         filter.put("mac", "mac2");
-        mfm.setupFilter(null, filter, 10);
+        mfm.setupFilter(null, filter, 10*1000);
 
         assertTrue(mfm.getNumberOfFilters() == mfm.getMaxFilterSize());
 
@@ -465,9 +470,9 @@ public class ControllerTest extends FloodlightTestCase {
         matchedFilters = mfm.getMatchedFilters(packetOut, cntx);
         assertTrue(matchedFilters.size() == 1);
 
-        // Wait for 8 seconds for all filters to be timed out.
-        Thread.sleep(8000);
-        assertTrue(mfm.getNumberOfFilters() == 0);
+        // Wait for all filters to be timed out.
+        Thread.sleep(150);
+        assertEquals(0, mfm.getNumberOfFilters());
     }
 
     @Test
@@ -486,7 +491,7 @@ public class ControllerTest extends FloodlightTestCase {
         //expect(oldsw.getFeaturesReply()).andReturn(new OFFeaturesReply()).anyTimes();
         //expect(oldsw.getStringId()).andReturn("00:00:00:00:00:00:00").anyTimes();
 
-        Channel channel = createMock(Channel.class);
+        Channel channel = createNiceMock(Channel.class);
         //expect(oldsw.getChannel()).andReturn(channel);
         oldsw.setChannel(channel);
         expect(channel.close()).andReturn(null);