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 ee2a74f..c9f1068 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
@@ -68,11 +68,21 @@
      *
      * @return drop instruction
      */
+    @Deprecated
     public static DropInstruction createDrop() {
         return new DropInstruction();
     }
 
     /**
+     * Creates a no action instruction.
+     *
+     * @return no action instruction
+     */
+    public static NoActionInstruction createNoAction() {
+        return new NoActionInstruction();
+    }
+
+    /**
      * Creates a group instruction.
      *
      * @param groupId Group Id
@@ -450,6 +460,7 @@
     /**
      *  Drop instruction.
      */
+    @Deprecated
     public static final class DropInstruction implements Instruction {
 
         private DropInstruction() {}
@@ -482,6 +493,40 @@
     }
 
     /**
+     *  No Action instruction.
+     */
+    public static final class NoActionInstruction implements Instruction {
+
+        private NoActionInstruction() {}
+
+        @Override
+        public Type type() {
+            return Type.NOACTION;
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(type().toString()).toString();
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(type().ordinal());
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj instanceof NoActionInstruction) {
+                return true;
+            }
+            return false;
+        }
+    }
+
+    /**
      *  Output Instruction.
      */
     public static final class OutputInstruction implements Instruction {
