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 2dad08b..f0937a7 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
@@ -343,6 +343,11 @@
         }
 
         @Override
+        public Builder setMplsBos(boolean mplsBos) {
+            return add(Instructions.modMplsBos(mplsBos));
+        }
+
+        @Override
         public Builder decMplsTtl() {
             return add(Instructions.decMplsTtl());
         }
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 042aeaf..b982199 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
@@ -227,6 +227,14 @@
         Builder setMpls(MplsLabel mplsLabel);
 
         /**
+         * Sets the mpls bottom-of-stack indicator bit.
+         *
+         * @param mplsBos boolean to set BOS=1 (true) or BOS=0 (false).
+         * @return a treatment builder.
+         */
+        Builder setMplsBos(boolean mplsBos);
+
+        /**
          * Decrement MPLS TTL.
          *
          * @return a treatment builder
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 cd9ec96..97f57db 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
@@ -176,6 +176,16 @@
     }
 
     /**
+     * Creates a MPLS BOS bit modification.
+     *
+     * @param mplsBos MPLS BOS bit to set (true) or unset (false)
+     * @return a L2 Modification
+     */
+    public static L2ModificationInstruction modMplsBos(boolean mplsBos) {
+        return new L2ModificationInstruction.ModMplsBosInstruction(mplsBos);
+    }
+
+    /**
      * Creates a MPLS decrement TTL modification.
      *
      * @return a L2 Modification
@@ -673,6 +683,7 @@
             return false;
         }
     }
+
 }
 
 
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
