diff --git a/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java b/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
index 6013a38..75da2be 100644
--- a/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
@@ -18,81 +18,41 @@
 import java.util.Collection;
 
 import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.onlab.util.Tools;
 import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.store.primitives.TransactionId;
 import org.onosproject.store.service.StorageAdminService;
-import org.onosproject.store.service.Transaction;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 
 /**
- * CLI to work with database transactions in the system.
+ * CLI to view in-progress database transactions in the system.
  */
 @Command(scope = "onos", name = "transactions",
-        description = "Utility for viewing and redriving database transactions")
+        description = "Utility for listing pending/inprogress transactions")
 public class TransactionsCommand extends AbstractShellCommand {
 
-    @Option(name = "-r", aliases = "--redrive",
-            description = "Redrive stuck transactions while removing those that are done",
-            required = false, multiValued = false)
-    private boolean redrive = false;
-
-    private static final String FMT = "%-20s %-15s %-10s";
-
-    /**
-     * Displays transactions as text.
-     *
-     * @param transactions transactions
-     */
-    private void displayTransactions(Collection<Transaction> transactions) {
-        print("---------------------------------------------");
-        print(FMT, "Id", "State", "Updated");
-        print("---------------------------------------------");
-        transactions.forEach(txn -> print(FMT, txn.id(), txn.state(),  Tools.timeAgo(txn.lastUpdated())));
-        if (transactions.size() > 0) {
-            print("---------------------------------------------");
-        }
-    }
-
     /**
      * Converts collection of transactions into a JSON object.
      *
-     * @param transactions transactions
+     * @param transactionIds transaction identifiers
      */
-    private JsonNode json(Collection<Transaction> transactions) {
+    private JsonNode json(Collection<TransactionId> transactionIds) {
         ObjectMapper mapper = new ObjectMapper();
         ArrayNode txns = mapper.createArrayNode();
-
-        // Create a JSON node for each transaction
-        transactions.stream().forEach(txn -> {
-                    ObjectNode txnNode = mapper.createObjectNode();
-                    txnNode.put("id", txn.id())
-                    .put("state", txn.state().toString())
-                    .put("lastUpdated", txn.lastUpdated());
-                    txns.add(txnNode);
-                });
-
+        transactionIds.forEach(id -> txns.add(id.toString()));
         return txns;
     }
 
     @Override
     protected void execute() {
         StorageAdminService storageAdminService = get(StorageAdminService.class);
-
-        if (redrive) {
-            storageAdminService.redriveTransactions();
-            return;
-        }
-
-        Collection<Transaction> transactions = storageAdminService.getTransactions();
+        Collection<TransactionId> transactionIds = storageAdminService.getPendingTransactions();
         if (outputJson()) {
-            print("%s", json(transactions));
+            print("%s", json(transactionIds));
         } else {
-            displayTransactions(transactions);
+            transactionIds.forEach(id -> print("%s", id.toString()));
         }
     }
 }
