diff --git a/src/main/java/org/opencord/aaa/AaaManager.java b/src/main/java/org/opencord/aaa/AaaManager.java
index 1df4574..b821d79 100755
--- a/src/main/java/org/opencord/aaa/AaaManager.java
+++ b/src/main/java/org/opencord/aaa/AaaManager.java
@@ -41,6 +41,8 @@
 import org.onosproject.net.config.NetworkConfigEvent;
 import org.onosproject.net.config.NetworkConfigListener;
 import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.device.DeviceEvent;
+import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficTreatment;
@@ -63,6 +65,7 @@
 
 import java.net.InetAddress;
 import java.nio.ByteBuffer;
+import java.util.Map;
 
 /**
  * AAA application for ONOS.
@@ -98,6 +101,8 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected AccessDeviceService accessDeviceService;
 
+    private final DeviceListener deviceListener = new InternalDeviceListener();
+
     // NAS IP address
     protected InetAddress nasIpAddress;
 
@@ -228,6 +233,8 @@
 
         impl.requestIntercepts();
 
+        deviceService.addListener(deviceListener);
+
         log.info("Started");
     }
 
@@ -240,6 +247,7 @@
         StateMachine.destroyMaps();
 
         impl.deactivate();
+        deviceService.removeListener(deviceListener);
 
         log.info("Stopped");
     }
@@ -586,4 +594,27 @@
             }
         }
     }
+
+    private class InternalDeviceListener implements DeviceListener {
+        @Override
+        public void event(DeviceEvent event) {
+
+            switch (event.type()) {
+                case PORT_REMOVED:
+                    DeviceId devId = event.subject().id();
+                    PortNumber portNumber = event.port().number();
+                    String sessionId = devId.toString() + portNumber.toString();
+
+                    Map<String, StateMachine> sessionIdMap = StateMachine.sessionIdMap();
+                    StateMachine removed = sessionIdMap.remove(sessionId);
+                    if (removed != null) {
+                        StateMachine.deleteStateMachineMapping(removed);
+                    }
+
+                    break;
+                default:
+                    return;
+            }
+        }
+    }
 }
diff --git a/src/main/java/org/opencord/aaa/AaaShowUsersCommand.java b/src/main/java/org/opencord/aaa/AaaShowUsersCommand.java
index e64a6fe..f05dd8a 100644
--- a/src/main/java/org/opencord/aaa/AaaShowUsersCommand.java
+++ b/src/main/java/org/opencord/aaa/AaaShowUsersCommand.java
@@ -46,13 +46,20 @@
         for (StateMachine stateMachine : StateMachine.sessionIdMap().values()) {
             String deviceId = stateMachine.supplicantConnectpoint().deviceId().toString();
             String portNum = stateMachine.supplicantConnectpoint().port().toString();
-            String username = new String(stateMachine.username());
-            String mac = stateMachine.supplicantAddress().toString();
+
+            String username = "UNKNOWN";
+            if (stateMachine.username() != null) {
+                username = new String(stateMachine.username());
+            }
+            String mac = "UNKNOWN";
+            if (stateMachine.supplicantAddress() != null) {
+                mac = stateMachine.supplicantAddress().toString();
+            }
 
             String nasPortId = devService.getPort(stateMachine.supplicantConnectpoint()).
                     annotations().value(AnnotationKeys.PORT_NAME);
 
-            String subsId = "Unknown";
+            String subsId = "UNKNOWN";
             SubscriberAndDeviceInformation subscriber = subsService.get(nasPortId);
             if (subscriber != null) {
                 subsId = subscriber.nasPortId();
diff --git a/src/main/java/org/opencord/aaa/SamplePacketCustomizer.java b/src/main/java/org/opencord/aaa/SamplePacketCustomizer.java
index 358890e..bc8a0d4 100755
--- a/src/main/java/org/opencord/aaa/SamplePacketCustomizer.java
+++ b/src/main/java/org/opencord/aaa/SamplePacketCustomizer.java
@@ -102,9 +102,8 @@
         inPkt.setAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_PORT_TYPE,
                 ByteBuffer.allocate(4).putInt(15).array());
 
-        // Check - This may not be needed but was used in PoC2
         inPkt.setAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_PORT,
-                ByteBuffer.allocate(4).putInt(46178304).array());
+                ByteBuffer.allocate(4).putInt((int) p.number().toLong()).array());
         // Check - If this is needed, worked with this value in PoC2
         inPkt.setAttribute(RADIUSAttribute.RADIUS_ATTR_ACCT_SESSION_ID,
                 "023:27:46:00000".getBytes());
