diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
index 56ced3d..928f7b0 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
@@ -222,7 +222,11 @@
                               fbe.operator(), fbe);
                     continue;
                 }
-            sw.sendMsg(mod);
+            if (fbe.target().type() == FlowRule.Type.DEFAULT) {
+                sw.sendMsg(mod);
+            } else {
+                sw.sendMsg(mod, getTableType(fbe.target().type()));
+            }
         }
         OFBarrierRequest.Builder builder = sw.factory()
                 .buildBarrierRequest()
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 a6ec780..6fb5d0a 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
@@ -87,11 +87,11 @@
     private static final AtomicLong XID_COUNTER = new AtomicLong(1);
     private final Map<Dpid, GroupStatsCollector> collectors = Maps.newHashMap();
     private final Map<Long, OFStatsReply> groupStats = Maps.newConcurrentMap();
-    private final Map<Integer, GroupOperation> pendingGroupOperations =
+    private final Map<GroupId, GroupOperation> pendingGroupOperations =
             Maps.newConcurrentMap();
 
     /* Map<Group ID, Transaction ID> */
-    private final Map<Integer, Long> pendingXidMaps = Maps.newConcurrentMap();
+    private final Map<GroupId, Long> pendingXidMaps = Maps.newConcurrentMap();
 
     /**
      * Creates a OpenFlow group provider.
@@ -157,9 +157,9 @@
                     log.error("Unsupported Group operation");
             }
             sw.sendMsg(groupMod);
-            pendingGroupOperations.put(groupMod.getGroup().getGroupNumber(),
-                    groupOperation);
-            pendingXidMaps.put(groupMod.getGroup().getGroupNumber(), groupModXid);
+            GroupId groudId = new DefaultGroupId(groupMod.getGroup().getGroupNumber());
+            pendingGroupOperations.put(groudId, groupOperation);
+            pendingXidMaps.put(groudId, groupModXid);
         }
      }
 
@@ -282,14 +282,14 @@
                 case ERROR:
                     OFErrorMsg errorMsg = (OFErrorMsg) msg;
                     if (errorMsg.getErrType() == OFErrorType.GROUP_MOD_FAILED) {
-                        int pendingGroupId = -1;
-                        for (Map.Entry<Integer, Long> entry: pendingXidMaps.entrySet()) {
+                        GroupId pendingGroupId = null;
+                        for (Map.Entry<GroupId, Long> entry: pendingXidMaps.entrySet()) {
                             if (entry.getValue() == errorMsg.getXid()) {
                                 pendingGroupId = entry.getKey();
                                 break;
                             }
                         }
-                        if (pendingGroupId == -1) {
+                        if (pendingGroupId == null) {
                             log.warn("Error for unknown group operation: {}",
                                     errorMsg.getXid());
                         } else {
