diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index a29f16a4a9339ae78cb72fa2448af8f1e2323660..0773eba2736029168aa4296cfa26451f73736cd1 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -45,11 +45,13 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
 import net.floodlightcontroller.core.FloodlightContext;
 import net.floodlightcontroller.core.IFloodlightProviderService;
+import net.floodlightcontroller.core.util.SingletonTask;
 import net.floodlightcontroller.core.IHAListener;
 import net.floodlightcontroller.core.IInfoProvider;
 import net.floodlightcontroller.core.IOFMessageListener;
@@ -183,6 +185,14 @@ public class Controller implements IFloodlightProviderService,
     // Start time of the controller
     protected long systemStartTime;
     
+     /* Periodic task to clean up staleSwitches
+     */
+    public SingletonTask switchCleanupTask;
+    /**
+     * Time in milliseconds before entities will expire
+     */
+    protected static final int SWITCH_CLEANUP_INTERVAL = 60*60*1000;
+
     // Storage table names
     protected static final String CONTROLLER_TABLE_NAME = "controller_controller";
     protected static final String CONTROLLER_ID = "id";
@@ -1898,6 +1908,19 @@ public class Controller implements IFloodlightProviderService,
                                              CONTROLLER_INTERFACE_ID);
         storageSource.addListener(CONTROLLER_INTERFACE_TABLE_NAME, this);
         
+        Runnable scr = new Runnable() {
+            @Override
+            public void run() {
+                //cleanupSwitches(null, false);
+                switchCleanupTask.reschedule(SWITCH_CLEANUP_INTERVAL,
+                                             TimeUnit.SECONDS);
+            }
+        };
+        ScheduledExecutorService ses = threadPool.getScheduledExecutor();
+        switchCleanupTask = new SingletonTask(ses, scr);
+        switchCleanupTask.reschedule(SWITCH_CLEANUP_INTERVAL,
+                                     TimeUnit.SECONDS);
+        
         while (true) {
             try {
                 updateControllerInfo();