diff --git a/app/src/main/java/org/opencord/aaa/impl/AaaManager.java b/app/src/main/java/org/opencord/aaa/impl/AaaManager.java
index f14cf66..1a246f4 100644
--- a/app/src/main/java/org/opencord/aaa/impl/AaaManager.java
+++ b/app/src/main/java/org/opencord/aaa/impl/AaaManager.java
@@ -18,6 +18,7 @@
 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
 import static org.slf4j.LoggerFactory.getLogger;
 
+import com.google.common.collect.Sets;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
@@ -26,6 +27,8 @@
 import java.util.HashSet;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
+import java.util.Map.Entry;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.felix.scr.annotations.Component;
@@ -960,28 +963,56 @@
                     PortNumber portNumber = event.port().number();
                     String sessionId = devId.toString() + portNumber.toString();
 
-                    StateMachine stateMachine = StateMachine.lookupStateMachineBySessionId(sessionId);
-                    if (stateMachine != null) {
-                        stateMachine.setSessionTerminateReason(
-                                StateMachine.SessionTerminationReasons.PORT_REMOVED.getReason());
-                    }
-                    //pushing captured machine stats to kafka
-                    AaaSupplicantMachineStats obj = aaaSupplicantStatsManager.getSupplicantStats(stateMachine);
-                    aaaSupplicantStatsManager.getMachineStatsDelegate()
-                            .notify(new AaaMachineStatisticsEvent(AaaMachineStatisticsEvent.Type.STATS_UPDATE, obj));
+                    log.info("Received PORT_REMOVED event. Clearing AAA Session with Id {}", sessionId);
+                    flushStateMachineSession(sessionId,
+                            StateMachine.SessionTerminationReasons.PORT_REMOVED.getReason());
 
-                    Map<String, StateMachine> sessionIdMap = StateMachine.sessionIdMap();
-                    StateMachine removed = sessionIdMap.remove(sessionId);
-                    if (removed != null) {
-                        StateMachine.deleteStateMachineMapping(removed);
+                    break;
+
+                case DEVICE_REMOVED:
+                    DeviceId deviceId = event.subject().id();
+                    log.info("Received DEVICE_REMOVED event for {}", deviceId);
+
+                    Set<String> associatedSessions = Sets.newHashSet();
+                    for (Entry<String, StateMachine> stateMachineEntry : StateMachine.sessionIdMap().entrySet()) {
+                        ConnectPoint cp = stateMachineEntry.getValue().supplicantConnectpoint();
+                        if (cp != null && cp.deviceId().toString().equals(deviceId.toString())) {
+                            associatedSessions.add(stateMachineEntry.getKey());
+                        }
+                    }
+
+                    for (String session : associatedSessions) {
+                        log.info("Clearing AAA Session {} associated with Removed Device", session);
+                        flushStateMachineSession(session,
+                               StateMachine.SessionTerminationReasons.DEVICE_REMOVED.getReason());
                     }
 
                     break;
+
                 default:
                     return;
             }
         }
+
+        private void flushStateMachineSession(String sessionId, String terminationReason) {
+            StateMachine stateMachine = StateMachine.lookupStateMachineBySessionId(sessionId);
+            if (stateMachine != null) {
+                stateMachine.setSessionTerminateReason(terminationReason);
+            }
+
+            //pushing captured machine stats to kafka
+            AaaSupplicantMachineStats obj = aaaSupplicantStatsManager.getSupplicantStats(stateMachine);
+            aaaSupplicantStatsManager.getMachineStatsDelegate()
+                   .notify(new AaaMachineStatisticsEvent(AaaMachineStatisticsEvent.Type.STATS_UPDATE, obj));
+
+            Map<String, StateMachine> sessionIdMap = StateMachine.sessionIdMap();
+            StateMachine removed = sessionIdMap.remove(sessionId);
+            if (removed != null) {
+                StateMachine.deleteStateMachineMapping(removed);
+            }
+        }
     }
+
     private class AuthenticationStatisticsEventPublisher implements Runnable {
         private final Logger log = getLogger(getClass());
         public void run() {
@@ -1041,4 +1072,4 @@
         }
 
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/opencord/aaa/impl/StateMachine.java b/app/src/main/java/org/opencord/aaa/impl/StateMachine.java
index 16543df..2c0d29f 100644
--- a/app/src/main/java/org/opencord/aaa/impl/StateMachine.java
+++ b/app/src/main/java/org/opencord/aaa/impl/StateMachine.java
@@ -89,7 +89,8 @@
     public enum SessionTerminationReasons {
         SUPPLICANT_LOGOFF("SUPPLICANT_LOGOFF"),
         TIME_OUT("TIME_OUT"),
-        PORT_REMOVED("PORT_REMOVED");
+        PORT_REMOVED("PORT_REMOVED"),
+        DEVICE_REMOVED("DEVICE_REMOVED");
 
         private final String reason;
 
