diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
index 90f8c4e..6b5af75 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
@@ -20,6 +20,7 @@
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
+import org.onosproject.core.GroupId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.instructions.Instruction;
 import org.onosproject.net.flow.instructions.Instructions;
@@ -241,6 +242,11 @@
         }
 
         @Override
+        public Builder group(GroupId groupId) {
+            return add(Instructions.createGroup(groupId));
+        }
+
+        @Override
         public TrafficTreatment build() {
 
             //If we are dropping should we just return an empty list?
diff --git a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
index da682ee..91edcbf 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
@@ -17,6 +17,7 @@
 
 import java.util.List;
 
+import org.onosproject.core.GroupId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.instructions.Instruction;
 import org.onlab.packet.IpAddress;
@@ -185,6 +186,14 @@
         public Builder setLambda(short lambda);
 
         /**
+         * Sets the group ID.
+         *
+         * @param groupId group ID
+         * @return a treatment builder
+         */
+        public Builder group(GroupId groupId);
+
+        /**
          * Builds an immutable traffic treatment descriptor.
          *
          * @return traffic treatment
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
index 6f1281f..df4a695 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
@@ -21,6 +21,7 @@
 
 import java.util.Objects;
 
+import org.onosproject.core.GroupId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.instructions.L0ModificationInstruction.L0SubType;
 import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
@@ -65,6 +66,17 @@
     }
 
     /**
+     * Creates a group instruction.
+     *
+     * @param groupId Group Id
+     * @return group instruction
+     */
+    public static GroupInstruction createGroup(final GroupId groupId) {
+        checkNotNull(groupId, "GroupId cannot be null");
+        return new GroupInstruction(groupId);
+    }
+
+    /**
      * Creates a l0 modification.
      * @param lambda the lambda to modify to.
      * @return a l0 modification
@@ -207,7 +219,7 @@
     }
 
     /*
-     *  Output instructions
+     *  Drop instructions
      */
 
     public static final class DropInstruction implements Instruction {
@@ -241,6 +253,9 @@
         }
     }
 
+    /*
+     *  Output Instruction
+     */
 
     public static final class OutputInstruction implements Instruction {
         private final PortNumber port;
@@ -282,6 +297,50 @@
         }
     }
 
+    /*
+     *  Group Instruction
+     */
+
+    public static final class GroupInstruction implements Instruction {
+        private final GroupId groupId;
+
+        private GroupInstruction(GroupId groupId) {
+            this.groupId = groupId;
+        }
+
+        public GroupId groupId() {
+            return groupId;
+        }
+
+        @Override
+        public Type type() {
+            return Type.GROUP;
+        }
+        @Override
+        public String toString() {
+            return toStringHelper(type().toString())
+                    .add("group ID", groupId.id()).toString();
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(type(), groupId);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj instanceof GroupInstruction) {
+                GroupInstruction that = (GroupInstruction) obj;
+                return Objects.equals(groupId, that.groupId);
+
+            }
+            return false;
+        }
+    }
+
 }
 
 
