diff --git a/app/src/main/java/org/opencord/aaa/cli/AaaResetAllCommand.java b/app/src/main/java/org/opencord/aaa/cli/AaaResetAllCommand.java
new file mode 100644
index 0000000..fd57f83
--- /dev/null
+++ b/app/src/main/java/org/opencord/aaa/cli/AaaResetAllCommand.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.opencord.aaa.cli;
+
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.onosproject.cli.AbstractShellCommand;
+import org.opencord.aaa.AuthenticationRecord;
+import org.opencord.aaa.AuthenticationService;
+
+import java.util.List;
+
+import static com.google.common.collect.Lists.newArrayList;
+
+/**
+ * Removes a AAA state machine.
+ */
+@Service
+@Command(scope = "onos", name = "aaa-reset-all-devices",
+         description = "Resets the authentication state machine for a all known entries")
+public class AaaResetAllCommand extends AbstractShellCommand {
+
+    @Override
+    protected void doExecute() {
+
+        AuthenticationService authService = get(AuthenticationService.class);
+        List<AuthenticationRecord> authentications = newArrayList(authService.getAuthenticationRecords());
+
+        for (AuthenticationRecord auth : authentications) {
+            authService.removeAuthenticationStateByMac(auth.supplicantAddress());
+        }
+    }
+}
diff --git a/app/src/main/java/org/opencord/aaa/cli/AaaShowUsersCommand.java b/app/src/main/java/org/opencord/aaa/cli/AaaShowUsersCommand.java
index c562261..0f066d3 100644
--- a/app/src/main/java/org/opencord/aaa/cli/AaaShowUsersCommand.java
+++ b/app/src/main/java/org/opencord/aaa/cli/AaaShowUsersCommand.java
@@ -20,6 +20,7 @@
 import org.onlab.util.Tools;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.AnnotationKeys;
+import org.onosproject.net.Port;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.utils.Comparators;
 import org.opencord.aaa.AuthenticationRecord;
@@ -39,6 +40,9 @@
 @Command(scope = "onos", name = "aaa-users",
         description = "Shows the aaa users")
 public class AaaShowUsersCommand extends AbstractShellCommand {
+
+    static final String UNKNOWN = "UNKNOWN";
+
     @Override
     protected void doExecute() {
 
@@ -55,19 +59,26 @@
         authentications.sort(authenticationRecordComparator);
 
         for (AuthenticationRecord auth : authentications) {
-            String username = "UNKNOWN";
+            String username = UNKNOWN;
             if (auth.username() != null) {
                 username = new String(auth.username());
             }
-            String mac = "UNKNOWN";
+            String mac = UNKNOWN;
             if (auth.supplicantAddress() != null) {
                 mac = auth.supplicantAddress().toString();
             }
 
-            String nasPortId = devService.getPort(auth.supplicantConnectPoint()).
-                    annotations().value(AnnotationKeys.PORT_NAME);
+            Port port = devService.getPort(auth.supplicantConnectPoint());
 
-            String subsId = "UNKNOWN";
+            String nasPortId = UNKNOWN;
+
+            if (port != null) {
+                nasPortId = devService.getPort(auth.supplicantConnectPoint()).
+                        annotations().value(AnnotationKeys.PORT_NAME);
+            }
+
+
+            String subsId = UNKNOWN;
             SubscriberAndDeviceInformation subscriber = sadisService.getSubscriberInfoService().get(nasPortId);
             if (subscriber != null) {
                 subsId = subscriber.nasPortId();
