diff --git a/cli/src/main/java/org/onosproject/cli/Comparators.java b/cli/src/main/java/org/onosproject/cli/Comparators.java
index 50e79a1..c1c019e 100644
--- a/cli/src/main/java/org/onosproject/cli/Comparators.java
+++ b/cli/src/main/java/org/onosproject/cli/Comparators.java
@@ -19,13 +19,13 @@
 import org.onosproject.core.Application;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.incubator.net.intf.Interface;
+import org.onosproject.incubator.net.key.DeviceKey;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Element;
 import org.onosproject.net.ElementId;
 import org.onosproject.net.Port;
 import org.onosproject.net.flow.FlowRule;
 import org.onosproject.net.group.Group;
-
 import org.onosproject.net.statistic.TypedFlowEntryWithLoad;
 import org.onosproject.net.topology.TopologyCluster;
 
@@ -118,8 +118,8 @@
         public int compare(ConnectPoint o1, ConnectPoint o2) {
             int compareId = ELEMENT_ID_COMPARATOR.compare(o1.elementId(), o2.elementId());
             return (compareId != 0) ?
-                compareId :
-                Long.signum(o1.port().toLong() - o2.port().toLong());
+                    compareId :
+                    Long.signum(o1.port().toLong() - o2.port().toLong());
         }
     };
 
@@ -130,8 +130,15 @@
             new Comparator<TypedFlowEntryWithLoad>() {
                 @Override
                 public int compare(TypedFlowEntryWithLoad fe1, TypedFlowEntryWithLoad fe2) {
-                    long delta = fe1.load().rate() -  fe2.load().rate();
+                    long delta = fe1.load().rate() - fe2.load().rate();
                     return delta == 0 ? 0 : (delta > 0 ? -1 : +1);
                 }
             };
+
+    public static final Comparator<DeviceKey> DEVICE_KEY_COMPARATOR = new Comparator<DeviceKey>() {
+        @Override
+        public int compare(DeviceKey deviceKey1, DeviceKey deviceKey2) {
+            return deviceKey1.deviceKeyId().id().toString().compareTo(deviceKey2.deviceKeyId().id().toString());
+        }
+    };
 }
diff --git a/cli/src/main/java/org/onosproject/cli/net/DeviceKeyAddCommand.java b/cli/src/main/java/org/onosproject/cli/net/DeviceKeyAddCommand.java
new file mode 100644
index 0000000..2c636ca
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/DeviceKeyAddCommand.java
@@ -0,0 +1,81 @@
+/*
+ * 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.cli.net;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.incubator.net.key.DeviceKey;
+import org.onosproject.incubator.net.key.DeviceKeyAdminService;
+import org.onosproject.incubator.net.key.DeviceKeyId;
+
+/**
+ * Adds a device key.
+ */
+@Command(scope = "onos", name = "device-key-add",
+        description = "Adds a device key. Adding a new device key with " +
+                "the same id will replace the existing device key.")
+
+public class DeviceKeyAddCommand extends AbstractShellCommand {
+
+    private static final String COMMUNITY_NAME = "CommunityName";
+    private static final String USERNAME = "UsernamePassword";
+
+    @Argument(index = 0, name = "id", description = "Device Key ID",
+            required = true, multiValued = false)
+    String id = null;
+
+    @Argument(index = 1, name = "type", description = "Device Key Type, " +
+            "it includes CommunityName, UsernamePassword.",
+            required = true, multiValued = false)
+    String type = null;
+
+    @Option(name = "-c", aliases = "--communityName", description = "Device Key Community Name",
+            required = false, multiValued = false)
+    String communityName = null;
+
+    @Option(name = "-l", aliases = "--label", description = "Device Key Label",
+            required = false, multiValued = false)
+    String label = null;
+
+    @Option(name = "-u", aliases = "--username", description = "Device Key Username",
+            required = false, multiValued = false)
+    String username = null;
+
+    @Option(name = "-p", aliases = "--password", description = "Device Key Password",
+            required = false, multiValued = false)
+    String password = null;
+
+    @Override
+    protected void execute() {
+        DeviceKeyAdminService service = get(DeviceKeyAdminService.class);
+        DeviceKey deviceKey = null;
+        if (type.equalsIgnoreCase(COMMUNITY_NAME)) {
+            deviceKey = DeviceKey.createDeviceKeyUsingCommunityName(DeviceKeyId.deviceKeyId(id),
+                                                                    label, communityName);
+        } else if (type.equalsIgnoreCase(USERNAME)) {
+            deviceKey = DeviceKey.createDeviceKeyUsingUsernamePassword(DeviceKeyId.deviceKeyId(id),
+                                                                       label, username, password);
+        } else {
+            print("Invalid Device key type: ", type);
+            return;
+        }
+        service.addKey(deviceKey);
+        print("Device Key successfully added.");
+    }
+}
diff --git a/cli/src/main/java/org/onosproject/cli/net/DeviceKeyListCommand.java b/cli/src/main/java/org/onosproject/cli/net/DeviceKeyListCommand.java
new file mode 100644
index 0000000..5d84f59
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/DeviceKeyListCommand.java
@@ -0,0 +1,79 @@
+/*
+ * 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.cli.net;
+
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.cli.Comparators;
+import org.onosproject.incubator.net.key.DeviceKey;
+import org.onosproject.incubator.net.key.DeviceKeyService;
+
+import java.util.Collections;
+import java.util.List;
+
+import static com.google.common.collect.Lists.newArrayList;
+
+/**
+ * Lists all device keys.
+ */
+@Command(scope = "onos", name = "device-keys",
+        description = "Lists all device keys")
+
+public class DeviceKeyListCommand extends AbstractShellCommand {
+    private static final String FMT_COMMUNITY_NAME =
+            "identifier=%s, type=%s, community name=%s";
+    private static final String FMT_USERNAME_PASSWORD =
+            "identifier=%s, type=%s, username=%s, password=%s";
+
+    @Override
+    protected void execute() {
+        DeviceKeyService service = get(DeviceKeyService.class);
+        for (DeviceKey deviceKey : getSortedDeviceKeys(service)) {
+            printDeviceKey(deviceKey);
+        }
+    }
+
+    /**
+     * Returns the list of devices keys sorted using the device key identifier.
+     *
+     * @param service device key service
+     * @return sorted device key list
+     */
+    protected List<DeviceKey> getSortedDeviceKeys(DeviceKeyService service) {
+        List<DeviceKey> deviceKeys = newArrayList(service.getDeviceKeys());
+        Collections.sort(deviceKeys, Comparators.DEVICE_KEY_COMPARATOR);
+        return deviceKeys;
+    }
+
+    /**
+     * Prints out each device key.
+     *
+     * @param deviceKey the device key to be printed
+     */
+    private void printDeviceKey(DeviceKey deviceKey) {
+        if (DeviceKey.Type.COMMUNITY_NAME.equals(deviceKey.type())) {
+            print(FMT_COMMUNITY_NAME, deviceKey.deviceKeyId().id(), deviceKey.type(),
+                  deviceKey.asCommunityName().name());
+        } else if (DeviceKey.Type.USERNAME_PASSWORD.equals(deviceKey.type())) {
+            print(FMT_USERNAME_PASSWORD, deviceKey.deviceKeyId().id(), deviceKey.type(),
+                  deviceKey.asUsernamePassword().username(), deviceKey.asUsernamePassword().password());
+        } else {
+            log.error("Unsupported device key type: " + deviceKey.type());
+        }
+    }
+
+}
diff --git a/cli/src/main/java/org/onosproject/cli/net/DeviceKeyRemoveCommand.java b/cli/src/main/java/org/onosproject/cli/net/DeviceKeyRemoveCommand.java
new file mode 100644
index 0000000..329c9af
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/DeviceKeyRemoveCommand.java
@@ -0,0 +1,42 @@
+/*
+ * 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.cli.net;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.incubator.net.key.DeviceKeyAdminService;
+import org.onosproject.incubator.net.key.DeviceKeyId;
+
+/**
+ * Removes a device key.
+ */
+@Command(scope = "onos", name = "device-key-remove",
+        description = "Removes a device key")
+
+public class DeviceKeyRemoveCommand extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "id", description = "Device Key ID",
+            required = true, multiValued = false)
+    String id = null;
+
+    @Override
+    protected void execute() {
+        DeviceKeyAdminService service = get(DeviceKeyAdminService.class);
+        service.removeKey(DeviceKeyId.deviceKeyId(id));
+    }
+}
diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 6d5b839..434c9a4 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -533,6 +533,17 @@
         <command>
             <action class="org.onosproject.cli.net.TunnelUpdateCommand"/>
         </command>
+        <!-- device key commands -->
+        <command>
+            <action class="org.onosproject.cli.net.DeviceKeyListCommand"/>
+        </command>
+        <command>
+            <action class="org.onosproject.cli.net.DeviceKeyAddCommand"/>
+        </command>
+        <command>
+            <action class="org.onosproject.cli.net.DeviceKeyRemoveCommand"/>
+        </command>
+
     </command-bundle>
 
     <bean id="reviewAppNameCompleter" class="org.onosproject.cli.security.ReviewApplicationNameCompleter"/>
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/key/DeviceKey.java b/incubator/api/src/main/java/org/onosproject/incubator/net/key/DeviceKey.java
index a9f0f5f..012636d 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/key/DeviceKey.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/key/DeviceKey.java
@@ -40,7 +40,7 @@
     /**
      * type of the device key.
      */
-    enum Type {
+    public enum Type {
         COMMUNITY_NAME, USERNAME_PASSWORD, SSL_KEY
     }
 
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/key/impl/DeviceKeyManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/key/impl/DeviceKeyManager.java
index 91d1364..d650732 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/key/impl/DeviceKeyManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/key/impl/DeviceKeyManager.java
@@ -17,9 +17,11 @@
 package org.onosproject.incubator.net.key.impl;
 
 import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
 import org.onosproject.event.AbstractListenerManager;
 import org.onosproject.incubator.net.key.DeviceKey;
 import org.onosproject.incubator.net.key.DeviceKeyAdminService;
@@ -42,14 +44,13 @@
 /**
  * Implementation of device key services.
  */
+@Component(immediate = true, enabled = true)
+@Service
 public class DeviceKeyManager extends AbstractListenerManager<DeviceKeyEvent, DeviceKeyListener>
         implements DeviceKeyService, DeviceKeyAdminService {
 
     private final Logger log = getLogger(getClass());
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected DeviceKeyService deviceKeyService;
-
     private DeviceKeyStoreDelegate delegate = this::post;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/key/impl/DistributedDeviceKeyStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/key/impl/DistributedDeviceKeyStore.java
index eaaf597..5c865f5 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/key/impl/DistributedDeviceKeyStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/key/impl/DistributedDeviceKeyStore.java
@@ -36,6 +36,7 @@
 import org.onosproject.store.service.StorageService;
 import org.slf4j.Logger;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Map;
 
@@ -68,7 +69,10 @@
     @Activate
     public void activate() {
         deviceKeys = storageService.<DeviceKeyId, DeviceKey>consistentMapBuilder()
-                .withSerializer(Serializer.using(KryoNamespaces.API))
+                .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
+                                DeviceKey.class,
+                                DeviceKeyId.class,
+                                DeviceKey.Type.class))
                 .withName("onos-device-keys")
                 .withRelaxedReadConsistency()
                 .build();
