diff --git a/cli/src/main/java/org/onosproject/cli/net/GroupsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/GroupsListCommand.java
index be50a39..567880d 100644
--- a/cli/src/main/java/org/onosproject/cli/net/GroupsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/GroupsListCommand.java
@@ -15,27 +15,28 @@
  */
 package org.onosproject.cli.net;
 
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 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.utils.Comparators;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.group.Group;
 import org.onosproject.net.group.Group.GroupState;
 import org.onosproject.net.group.GroupBucket;
+import org.onosproject.net.group.GroupDescription;
 import org.onosproject.net.group.GroupService;
+import org.onosproject.utils.Comparators;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.stream.Collectors;
 
 import static com.google.common.collect.Lists.newArrayList;
 
@@ -49,7 +50,7 @@
     public static final String ANY = "any";
 
     private static final String FORMAT =
-            "   id=0x%s, state=%s, type=%s, bytes=%s, packets=%s, appId=%s";
+            "   id=0x%s, state=%s, type=%s, bytes=%s, packets=%s, appId=%s, referenceCount=%s";
     private static final String BUCKET_FORMAT =
             "   id=0x%s, bucket=%s, bytes=%s, packets=%s, actions=%s";
 
@@ -66,6 +67,12 @@
             required = false, multiValued = false)
     private boolean countOnly = false;
 
+    @Option(name = "-t", aliases = "--type",
+            description = "Print groups with specified type",
+            required = false, multiValued = false)
+    private String type = null;
+
+
     private JsonNode json(Map<Device, List<Group>> sortedGroups) {
         ArrayNode result = mapper().createArrayNode();
 
@@ -82,14 +89,12 @@
         GroupService groupService = get(GroupService.class);
         SortedMap<Device, List<Group>> sortedGroups =
                 getSortedGroups(deviceService, groupService);
-
         if (outputJson()) {
             print("%s", json(sortedGroups));
         } else {
             sortedGroups.forEach((device, groups) -> printGroups(device.id(), groups));
         }
     }
-
     /**
      * Returns the list of devices sorted using the device ID URIs.
      *
@@ -128,6 +133,13 @@
             groups.sort(Comparators.GROUP_COMPARATOR);
             sortedGroups.put(d, groups);
         }
+        if (type != null) {
+            for (Device device : sortedGroups.keySet()) {
+                sortedGroups.put(device, sortedGroups.get(device).stream()
+                        .filter(group -> GroupDescription.Type.valueOf(type.toUpperCase()).equals(group.type()))
+                        .collect(Collectors.toList()));
+            }
+        }
         return sortedGroups;
     }
 
@@ -140,7 +152,7 @@
 
         for (Group group : groups) {
             print(FORMAT, Integer.toHexString(group.id().id()), group.state(), group.type(),
-                  group.bytes(), group.packets(), group.appId().name());
+                  group.bytes(), group.packets(), group.appId().name(), group.referenceCount());
             int i = 0;
             for (GroupBucket bucket:group.buckets().buckets()) {
                 print(BUCKET_FORMAT, Integer.toHexString(group.id().id()), ++i,
