diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java
index bfb6300..cf6a1a2 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java
@@ -84,9 +84,14 @@
         VLAN_PUSH,
 
         /**
-         * Tunnle id modification.
+         * Tunnel id modification.
          */
-        TUNNEL_ID
+        TUNNEL_ID,
+
+        /**
+         * MPLS BOS instruction.
+         */
+        MPLS_BOS
     }
 
     // TODO: Create factory class 'Instructions' that will have various factory
@@ -371,6 +376,51 @@
     }
 
     /**
+     * Represents a MPLS BOS modification.
+     */
+    public static final class ModMplsBosInstruction
+            extends L2ModificationInstruction {
+
+        private final boolean mplsBos;
+
+        ModMplsBosInstruction(boolean mplsBos) {
+            this.mplsBos = mplsBos;
+        }
+
+        public boolean mplsBos() {
+            return mplsBos;
+        }
+
+        @Override
+        public L2SubType subtype() {
+            return L2SubType.MPLS_BOS;
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(subtype().toString()).add("bos", mplsBos)
+                    .toString();
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(type(), subtype(), mplsBos);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj instanceof ModMplsBosInstruction) {
+                ModMplsBosInstruction that = (ModMplsBosInstruction) obj;
+                return Objects.equals(mplsBos, that.mplsBos());
+            }
+            return false;
+        }
+    }
+
+    /**
      * Represents a MPLS TTL modification.
      */
     public static final class ModMplsTtlInstruction
