diff --git a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
index 5433a4d..4a5c872 100644
--- a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
+++ b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
@@ -19,6 +19,7 @@
 import org.onlab.util.Timer;
 import org.onosproject.openflow.controller.OpenFlowSwitch;
 import org.onosproject.openflow.controller.RoleState;
+import org.projectfloodlight.openflow.protocol.OFCapabilities;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsRequest;
 import org.projectfloodlight.openflow.protocol.OFGroupStatsRequest;
 import org.projectfloodlight.openflow.types.OFGroup;
@@ -59,7 +60,7 @@
     public void run(Timeout timeout) throws Exception {
         log.trace("Collecting stats for {}", sw.getStringId());
 
-        sendGroupStatisticRequest();
+        sendGroupStatisticRequests();
 
         if (!this.stopTimer) {
             log.trace("Scheduling stats collection in {} seconds for {}",
@@ -69,7 +70,23 @@
         }
     }
 
-    private void sendGroupStatisticRequest() {
+    private void sendGroupDescStatisticRequest(long xid) {
+        OFGroupDescStatsRequest descStatsRequest =
+                sw.factory().buildGroupDescStatsRequest()
+                        .setXid(xid)
+                        .build();
+        sw.sendMsg(descStatsRequest);
+    }
+
+    private void sendGroupStatisticRequest(long xid) {
+        OFGroupStatsRequest statsRequest = sw.factory().buildGroupStatsRequest()
+            .setGroup(OFGroup.ALL)
+            .setXid(xid)
+            .build();
+        sw.sendMsg(statsRequest);
+    }
+
+    private void sendGroupStatisticRequests() {
         if (log.isTraceEnabled()) {
             log.trace("sendGroupStatistics {}:{}", sw.getStringId(), sw.getRole());
         }
@@ -79,19 +96,15 @@
         if (!sw.isConnected()) {
             return;
         }
-        long statsXid = OpenFlowGroupProvider.getXidAndAdd(2);
-        OFGroupStatsRequest statsRequest = sw.factory().buildGroupStatsRequest()
-                .setGroup(OFGroup.ALL)
-                .setXid(statsXid)
-                .build();
-        sw.sendMsg(statsRequest);
 
-        long descXid = statsXid + 1;
-        OFGroupDescStatsRequest descStatsRequest =
-                sw.factory().buildGroupDescStatsRequest()
-                        .setXid(descXid)
-                        .build();
-        sw.sendMsg(descStatsRequest);
+        if (sw.features().getCapabilities().contains(OFCapabilities.GROUP_STATS)) {
+            long xid = OpenFlowGroupProvider.getXidAndAdd(2);
+            sendGroupDescStatisticRequest(xid);
+            sendGroupStatisticRequest(xid + 1);
+        } else {
+            long xid = OpenFlowGroupProvider.getXidAndAdd(1);
+            sendGroupDescStatisticRequest(xid);
+        }
     }
 
     public void adjustRate(int pollInterval) {
diff --git a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
index 0f55b41..b536fda 100644
--- a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
+++ b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
@@ -65,7 +65,6 @@
 import org.onosproject.openflow.controller.RoleState;
 import org.osgi.service.component.ComponentContext;
 import org.projectfloodlight.openflow.protocol.OFBucketCounter;
-import org.projectfloodlight.openflow.protocol.OFCapabilities;
 import org.projectfloodlight.openflow.protocol.OFErrorMsg;
 import org.projectfloodlight.openflow.protocol.OFErrorType;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
@@ -413,7 +412,7 @@
             if (sw == null) {
                 return;
             }
-            if (isGroupSupported(sw) && sw.features().getCapabilities().contains(OFCapabilities.GROUP_STATS)) {
+            if (isGroupSupported(sw)) {
                 GroupStatsCollector gsc = new GroupStatsCollector(sw, groupPollInterval);
                 stopCollectorIfNeeded(collectors.put(dpid, gsc));
                 gsc.start();
