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;
+        }
+    }
+
 }
 
 
