diff --git a/cli/src/main/java/org/onosproject/cli/net/CountersListCommand.java b/cli/src/main/java/org/onosproject/cli/net/CountersListCommand.java
index 9706e0e..7a22965 100644
--- a/cli/src/main/java/org/onosproject/cli/net/CountersListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/CountersListCommand.java
@@ -64,14 +64,44 @@
         return jsonCounters;
     }
 
+    /**
+     * Converts info for counters from different databases into a JSON object.
+     *
+     * @param partitionedDbCounters counters info
+     * @param inMemoryDbCounters counters info
+     */
+    private JsonNode jsonAllCounters(Map<String, Long> partitionedDbCounters,
+                                     Map<String, Long> inMemoryDbCounters) {
+        ObjectMapper mapper = new ObjectMapper();
+        ArrayNode jsonCounters = mapper.createArrayNode();
+
+        // Create a JSON node for partitioned database counter
+        ObjectNode jsonPartitionedDatabaseCounters = mapper.createObjectNode();
+        jsonPartitionedDatabaseCounters.put("partitionedDatabaseCounters",
+                                            partitionedDbCounters.toString());
+        jsonCounters.add(jsonPartitionedDatabaseCounters);
+        // Create a JSON node for in-memory database counter
+        ObjectNode jsonInMemoryDatabseCounters = mapper.createObjectNode();
+        jsonInMemoryDatabseCounters.put("inMemoryDatabaseCounters",
+                                        inMemoryDbCounters.toString());
+        jsonCounters.add(jsonInMemoryDatabseCounters);
+
+        return jsonCounters;
+    }
+
+
     @Override
     protected void execute() {
         StorageAdminService storageAdminService = get(StorageAdminService.class);
-        Map<String, Long> counters = storageAdminService.getCounters();
+        Map<String, Long> partitionedDatabaseCounters = storageAdminService.getPartitionedDatabaseCounters();
+        Map<String, Long> inMemoryDatabaseCounters = storageAdminService.getInMemoryDatabaseCounters();
         if (outputJson()) {
-            print("%s", json(counters));
+            print("%s", jsonAllCounters(partitionedDatabaseCounters, inMemoryDatabaseCounters));
         } else {
-            displayCounters(counters);
+            print("Partitioned database counters:");
+            displayCounters(partitionedDatabaseCounters);
+            print("In-memory database counters:");
+            displayCounters(inMemoryDatabaseCounters);
         }
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/store/service/StorageAdminService.java b/core/api/src/main/java/org/onosproject/store/service/StorageAdminService.java
index 204e35b..2259104 100644
--- a/core/api/src/main/java/org/onosproject/store/service/StorageAdminService.java
+++ b/core/api/src/main/java/org/onosproject/store/service/StorageAdminService.java
@@ -40,12 +40,28 @@
 
     /**
      * Returns information about all the atomic counters in the system.
+     * If 2 counters belonging to 2 different databases have the same name,
+     * then only one counter from one database is returned.
      *
      * @return mapping from counter name to that counter's next value
      */
     Map<String, Long> getCounters();
 
     /**
+     * Returns information about all the atomic partitioned database counters in the system.
+     *
+     * @return mapping from counter name to that counter's next value
+     */
+    Map<String, Long> getPartitionedDatabaseCounters();
+
+    /**
+     * Returns information about all the atomic in-memory database counters in the system.
+     *
+     * @return mapping from counter name to that counter's next value
+     */
+    Map<String, Long> getInMemoryDatabaseCounters();
+
+    /**
      * Returns all the transactions in the system.
      *
      * @return collection of transactions
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
index 390a444..181490e 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
@@ -349,6 +349,20 @@
     }
 
     @Override
+    public Map<String, Long> getPartitionedDatabaseCounters() {
+        Map<String, Long> counters = Maps.newHashMap();
+        counters.putAll(complete(partitionedDatabase.counters()));
+        return counters;
+    }
+
+    @Override
+    public Map<String, Long> getInMemoryDatabaseCounters() {
+        Map<String, Long> counters = Maps.newHashMap();
+        counters.putAll(complete(inMemoryDatabase.counters()));
+        return counters;
+    }
+
+    @Override
     public Collection<Transaction> getTransactions() {
         return complete(transactionManager.getTransactions());
     }
