diff --git a/cli/src/main/java/org/onosproject/cli/net/FlowObjectiveQueueClearCommand.java b/cli/src/main/java/org/onosproject/cli/net/FlowObjectiveQueueClearCommand.java
new file mode 100644
index 0000000..d15ac87
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/FlowObjectiveQueueClearCommand.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2018-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.onosproject.cli.net;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onlab.osgi.ServiceNotFoundException;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.flowobjective.FlowObjectiveService;
+
+/**
+ * Clear flow objective that are waiting for the completion of previous objective with the same key.
+ */
+@Command(scope = "onos", name = "obj-clear-queues",
+        description = "Force empty flow objective queues and invalidate flow objective caches")
+public class FlowObjectiveQueueClearCommand extends AbstractShellCommand {
+
+    private static final String CONFIRM_PHRASE = "please";
+    @Argument(name = "confirm", description = "Confirmation phrase")
+    private String please = null;
+
+    @Override
+    protected void execute() {
+        if (please == null || !please.equals(CONFIRM_PHRASE)) {
+            print("WARNING: System may enter an unpredictable state if the flow obj queues are force emptied." +
+                    "Enter confirmation phrase to continue.");
+            return;
+        }
+
+        try {
+            FlowObjectiveService service = get(FlowObjectiveService.class);
+            service.clearQueue();
+        } catch (ServiceNotFoundException e) {
+            print("FlowObjectiveService unavailable");
+        }
+    }
+
+}
diff --git a/cli/src/main/java/org/onosproject/cli/net/FlowObjectiveQueueListCommand.java b/cli/src/main/java/org/onosproject/cli/net/FlowObjectiveQueueListCommand.java
new file mode 100644
index 0000000..46f6122
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/FlowObjectiveQueueListCommand.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2018-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.onosproject.cli.net;
+
+import com.google.common.collect.ListMultimap;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.onlab.osgi.ServiceNotFoundException;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.flowobjective.FilteringObjQueueKey;
+import org.onosproject.net.flowobjective.FlowObjectiveService;
+import org.onosproject.net.flowobjective.ForwardingObjQueueKey;
+import org.onosproject.net.flowobjective.NextObjQueueKey;
+import org.onosproject.net.flowobjective.Objective;
+
+import java.util.Map;
+
+/**
+ * Displays flow objective that are waiting for the completion of previous objective with the same key.
+ */
+@Command(scope = "onos", name = "obj-queues",
+        description = "Display flow objective queues")
+public class FlowObjectiveQueueListCommand extends AbstractShellCommand {
+
+    @Option(name = "-s", aliases = "--size",
+            description = "Print queue size only",
+            required = false, multiValued = false)
+    private boolean sizeOnly = false;
+
+    @Option(name = "-c", aliases = "--cache",
+            description = "Print cache",
+            required = false, multiValued = false)
+    private boolean cache = false;
+
+    @Override
+    protected void execute() {
+        try {
+            FlowObjectiveService service = get(FlowObjectiveService.class);
+            ListMultimap<FilteringObjQueueKey, Objective> filtObjQueue = service.getFilteringObjQueue();
+            ListMultimap<ForwardingObjQueueKey, Objective> fwdObjQueue = service.getForwardingObjQueue();
+            ListMultimap<NextObjQueueKey, Objective> nextObjQueue = service.getNextObjQueue();
+            Map<FilteringObjQueueKey, Objective> filtObjQueueHead = service.getFilteringObjQueueHead();
+            Map<ForwardingObjQueueKey, Objective> fwdObjQueueHead = service.getForwardingObjQueueHead();
+            Map<NextObjQueueKey, Objective> nextObjQueueHead = service.getNextObjQueueHead();
+
+            if (cache) {
+                printMap("Filtering objective cache", filtObjQueueHead, sizeOnly);
+                printMap("Forwarding objective cache", fwdObjQueueHead, sizeOnly);
+                printMap("Next objective cache", nextObjQueueHead, sizeOnly);
+            } else {
+                printMap("Filtering objective queue", filtObjQueue.asMap(), sizeOnly);
+                printMap("Forwarding objective queue", fwdObjQueue.asMap(), sizeOnly);
+                printMap("Next objective queue", nextObjQueue.asMap(), sizeOnly);
+            }
+        } catch (ServiceNotFoundException e) {
+            print("FlowObjectiveService unavailable");
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void printMap(String mapName, Map map, boolean sizeOnly) {
+        print("%s size = %d", mapName, map.size());
+        if (!sizeOnly) {
+            map.forEach((k, v) -> print("%s -> %s", k, v));
+        }
+    }
+}
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 3fab2f9..6ca9c5a 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -53,6 +53,14 @@
         </command>
 
         <command>
+            <action class="org.onosproject.cli.net.FlowObjectiveQueueListCommand"/>
+        </command>
+
+        <command>
+            <action class="org.onosproject.cli.net.FlowObjectiveQueueClearCommand"/>
+        </command>
+
+        <command>
             <action class="org.onosproject.cli.net.FlowObjectiveCompositionCommand"/>
         </command>
 
