diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceIndex.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceIndex.java
index f7831662d4e61442e82582818762547239b52551..0d8ea75dd42466600e9abf24637903750479985c 100644
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceIndex.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceIndex.java
@@ -102,6 +102,15 @@ public abstract class DeviceIndex {
             IndexedEntity oio = new IndexedEntity(keyFields, o);
             if (oio.equals(ie)) return;
         }
-        removeEntity(entity, deviceKey);
+
+        Iterator<Long> keyiter = this.queryByEntity(entity);
+        while (keyiter.hasNext()) {
+                Long key = keyiter.next();
+                if (key.equals(deviceKey)) {
+                    removeEntity(entity, deviceKey);
+                    break;
+                }
+        }
     }
-}
\ No newline at end of file
+
+}
diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
index 32d2ebc8ad73f148ae2c8f755cd07060de7cba3f..d02742dc987b8ea3e3d633e064748a53645e19a3 100755
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
@@ -1162,7 +1162,14 @@ IFlowReconcileListener, IInfoProvider, IHAListener {
 
         if (deleteQueue != null) {
             for (Long l : deleteQueue) {
+                Device dev = deviceMap.get(l);
+                this.deleteDevice(dev);
                 deviceMap.remove(l);
+
+                // generate new device update
+                deviceUpdates =
+                        updateUpdates(deviceUpdates,
+                                      new DeviceUpdate(dev, DELETE, null));
             }
         }