diff --git a/app/src/main/java/org/onosproject/olt/cli/ShowOltCommand.java b/app/src/main/java/org/onosproject/olt/cli/ShowOltCommand.java
index 63b3af1..21996aa 100644
--- a/app/src/main/java/org/onosproject/olt/cli/ShowOltCommand.java
+++ b/app/src/main/java/org/onosproject/olt/cli/ShowOltCommand.java
@@ -26,9 +26,9 @@
 import java.util.Map;
 
 /**
- * Adds a subscriber to an access device.
+ * Shows configured OLTs.
  */
-@Command(scope = "onos", name = "show-olts",
+@Command(scope = "onos", name = "olts",
         description = "Shows configured OLTs")
 public class ShowOltCommand extends AbstractShellCommand {
 
diff --git a/app/src/main/java/org/onosproject/olt/cli/ShowSubscribersCommand.java b/app/src/main/java/org/onosproject/olt/cli/ShowSubscribersCommand.java
new file mode 100644
index 0000000..105abe9
--- /dev/null
+++ b/app/src/main/java/org/onosproject/olt/cli/ShowSubscribersCommand.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * 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.onosproject.olt.cli;
+
+import org.apache.karaf.shell.commands.Command;
+import org.onlab.packet.VlanId;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.olt.AccessDeviceService;
+
+import java.util.Map;
+
+/**
+ * Shows provisioned subscribers.
+ */
+@Command(scope = "onos", name = "subscribers",
+        description = "Shows provisioned subscribers")
+public class ShowSubscribersCommand extends AbstractShellCommand {
+
+    private static final String FORMAT = "port=%s, cvlan=%s";
+
+    @Override
+    protected void execute() {
+        AccessDeviceService service = AbstractShellCommand.get(AccessDeviceService.class);
+        service.getSubscribers().forEach(this::display);
+    }
+
+    private void display(Map.Entry<ConnectPoint, VlanId> subscriber) {
+        print(FORMAT, subscriber.getKey(), subscriber.getValue());
+    }
+}
diff --git a/app/src/main/java/org/onosproject/olt/impl/Olt.java b/app/src/main/java/org/onosproject/olt/impl/Olt.java
index 976fcaa..a62b115 100644
--- a/app/src/main/java/org/onosproject/olt/impl/Olt.java
+++ b/app/src/main/java/org/onosproject/olt/impl/Olt.java
@@ -67,6 +67,7 @@
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
+import java.util.Collection;
 import java.util.Dictionary;
 import java.util.List;
 import java.util.Map;
@@ -243,6 +244,11 @@
     }
 
     @Override
+    public Collection<Map.Entry<ConnectPoint, VlanId>> getSubscribers() {
+        return subscribers.entrySet();
+    }
+
+    @Override
     public Map<DeviceId, AccessDeviceData> fetchOlts() {
         return Maps.newHashMap(oltData);
     }
@@ -459,11 +465,10 @@
         public void event(DeviceEvent event) {
             DeviceId devId = event.subject().id();
             if (!oltData.containsKey(devId)) {
-                log.debug("Device {} is not an OLT", devId);
                 return;
             }
             switch (event.type()) {
-                //TODO: Port handling and bookkeeping should be inproved once
+                //TODO: Port handling and bookkeeping should be improved once
                 // olt firmware handles correct behaviour.
                 case PORT_ADDED:
                     if (!oltData.get(devId).uplink().equals(event.port().number()) &&
diff --git a/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 5d114f9..aa62d74 100644
--- a/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -37,6 +37,9 @@
                 <null/>
             </completers>
         </command>
+        <command>
+            <action class="org.onosproject.olt.cli.ShowSubscribersCommand"/>
+        </command>
     </command-bundle>
 
     <bean id="deviceIdCompleter" class="org.onosproject.cli.net.DeviceIdCompleter"/>
