diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
index e5de812..cc50819 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
@@ -20,17 +20,17 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multiset;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.onlab.packet.Ethernet;
-import org.onlab.packet.MacAddress;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
+import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
+import org.onosproject.config.NetworkConfigService;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.DeviceId;
@@ -39,12 +39,12 @@
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flow.FlowRule.Type;
 import org.onosproject.net.flow.FlowRuleOperations;
 import org.onosproject.net.flow.FlowRuleOperationsContext;
 import org.onosproject.net.flow.FlowRuleService;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.FlowRule.Type;
 import org.onosproject.net.group.DefaultGroupBucket;
 import org.onosproject.net.group.DefaultGroupDescription;
 import org.onosproject.net.group.Group;
@@ -64,7 +64,6 @@
 import org.onosproject.routing.config.BgpSpeaker;
 import org.onosproject.routing.config.Interface;
 import org.onosproject.routing.config.RoutingConfigurationService;
-import org.onosproject.config.NetworkConfigService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -264,6 +263,7 @@
             TrafficTreatment treatment = DefaultTrafficTreatment.builder()
                     .setEthSrc(egressIntf.mac())
                     .setEthDst(nextHop.mac())
+                    .pushVlan()
                     .setVlanId(egressIntf.vlan())
                     .setOutput(egressIntf.connectPoint().port())
                     .build();
@@ -334,7 +334,6 @@
             processTableFive(install);
             processTableSix(install);
             processTableNine(install);
-
         }
 
         private void getIntefaceConfig(Set<Interface> intfs) {
@@ -416,7 +415,6 @@
             FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
             FlowRule rule;
 
-
             selector.matchEthType(Ethernet.TYPE_VLAN);
             treatment.transition(FlowRule.Type.VLAN);
 
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 aa5af74..499e9e7 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
@@ -300,6 +300,11 @@
         }
 
         @Override
+        public Builder pushVlan() {
+            return add(Instructions.pushVlan());
+        }
+
+        @Override
         public Builder transition(FlowRule.Type type) {
             return add(Instructions.transition(type));
         }
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 b44411b..db634ff 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
@@ -15,18 +15,17 @@
  */
 package org.onosproject.net.flow;
 
-import java.util.List;
-
-import org.onosproject.core.GroupId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.DefaultTrafficTreatment.Builder;
-import org.onosproject.net.flow.instructions.Instruction;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.MplsLabel;
 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;
 
+import java.util.List;
+
 /**
  * Abstraction of network traffic treatment.
  */
@@ -247,6 +246,13 @@
         public Builder popVlan();
 
         /**
+         * Pushes a new VLAN tag.
+         *
+         * @return a treatment builder.
+         */
+        public Builder pushVlan();
+
+        /**
          * Any instructions preceded by this method call will be deferred.
          * @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 47e473f..3a0566d 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
@@ -15,12 +15,11 @@
  */
 package org.onosproject.net.flow.instructions;
 
-import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.net.flow.instructions.L2ModificationInstruction.*;
-
-import java.util.Objects;
-
+import org.onlab.packet.Ethernet;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.MplsLabel;
+import org.onlab.packet.VlanId;
 import org.onosproject.core.GroupId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.FlowRule;
@@ -33,11 +32,17 @@
 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction;
 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModTtlInstruction;
 
-import org.onlab.packet.Ethernet;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.MplsLabel;
-import org.onlab.packet.VlanId;
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsLabelInstruction;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsTtlInstruction;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanPcpInstruction;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.PopVlanInstruction;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.PushHeaderInstructions;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.StripVlanInstruction;
 
 /**
  * Factory class for creating various traffic treatment instructions.
@@ -62,6 +67,7 @@
 
     /**
      * Creates a drop instruction.
+     *
      * @return drop instruction
      */
     public static DropInstruction createDrop() {
@@ -81,7 +87,8 @@
 
     /**
      * Creates a l0 modification.
-     * @param lambda the lambda to modify to.
+     *
+     * @param lambda the lambda to modify to
      * @return a l0 modification
      */
     public static L0ModificationInstruction modL0Lambda(short lambda) {
@@ -91,7 +98,8 @@
 
     /**
      * Creates a l2 src modification.
-     * @param addr the mac address to modify to.
+     *
+     * @param addr the mac address to modify to
      * @return a l2 modification
      */
     public static L2ModificationInstruction modL2Src(MacAddress addr) {
@@ -101,7 +109,8 @@
 
     /**
      * Creates a L2 dst modification.
-     * @param addr the mac address to modify to.
+     *
+     * @param addr the mac address to modify to
      * @return a L2 modification
      */
     public static L2ModificationInstruction modL2Dst(MacAddress addr) {
@@ -110,8 +119,9 @@
     }
 
     /**
-     * Creates a Vlan id modification.
-     * @param vlanId the vlan id to modify to.
+     * Creates a VLAN ID modification.
+     *
+     * @param vlanId the VLAN ID to modify to
      * @return a L2 modification
      */
     public static L2ModificationInstruction modVlanId(VlanId vlanId) {
@@ -120,8 +130,9 @@
     }
 
     /**
-     * Creates a Vlan pcp modification.
-     * @param vlanPcp the pcp to modify to.
+     * Creates a VLAN PCP modification.
+     *
+     * @param vlanPcp the PCP to modify to
      * @return a L2 modification
      */
     public static L2ModificationInstruction modVlanPcp(Byte vlanPcp) {
@@ -131,6 +142,7 @@
 
     /**
      * Strips the VLAN tag if one is present.
+     *
      * @return a L2 modification
      */
     public static L2ModificationInstruction stripVlanId() {
@@ -139,7 +151,8 @@
 
     /**
      * Creates a MPLS label modification.
-     * @param mplsLabel to set.
+     *
+     * @param mplsLabel MPLS label to set
      * @return a L2 Modification
      */
     public static L2ModificationInstruction modMplsLabel(MplsLabel mplsLabel) {
@@ -148,7 +161,7 @@
     }
 
     /**
-     * Creates a MPLS TTL modification.
+     * Creates a MPLS decrement TTL modification.
      *
      * @return a L2 Modification
      */
@@ -211,7 +224,8 @@
     }
 
     /**
-     * Creates a L3 TTL modification.
+     * Creates a L3 decrement TTL modification.
+     *
      * @return a L3 modification
      */
     public static L3ModificationInstruction decNwTtl() {
@@ -219,7 +233,8 @@
     }
 
     /**
-     * Creates a L3 TTL modification.
+     * Creates a L3 copy TTL to outer header modification.
+     *
      * @return a L3 modification
      */
     public static L3ModificationInstruction copyTtlOut() {
@@ -227,7 +242,8 @@
     }
 
     /**
-     * Creates a L3 TTL modification.
+     * Creates a L3 copy TTL to inner header modification.
+     *
      * @return a L3 modification
      */
     public static L3ModificationInstruction copyTtlIn() {
@@ -235,7 +251,8 @@
     }
 
     /**
-     * Creates a mpls header instruction.
+     * Creates a push MPLS header instruction.
+     *
      * @return a L2 modification.
      */
     public static Instruction pushMpls() {
@@ -244,7 +261,8 @@
     }
 
     /**
-     * Creates a mpls header instruction.
+     * Creates a pop MPLS header instruction.
+     *
      * @return a L2 modification.
      */
     public static Instruction popMpls() {
@@ -253,7 +271,7 @@
     }
 
     /**
-     * Creates a mpls header instruction.
+     * Creates a pop MPLS header instruction with a particular ethertype.
      *
      * @param etherType Ethernet type to set
      * @return a L2 modification.
@@ -264,15 +282,26 @@
     }
 
     /**
-     * Creates a vlan header instruction.
-     * @return a L2 modification.
+     * Creates a pop VLAN header instruction.
+     *
+     * @return a L2 modification
      */
     public static Instruction popVlan() {
         return new PopVlanInstruction(L2SubType.VLAN_POP);
     }
 
     /**
+     * Creates a push VLAN header instruction.
+     *
+     * @return a L2 modification
+     */
+    public static Instruction pushVlan() {
+        return new PushHeaderInstructions(L2SubType.VLAN_PUSH, Ethernet.TYPE_VLAN);
+    }
+
+    /**
      * Sends the packet to the table described in 'type'.
+     *
      * @param type flow rule table type
      * @return table type transition instruction
      */
@@ -296,7 +325,6 @@
         @Override
         public String toString() {
             return toStringHelper(type().toString()).toString();
-
         }
 
         @Override
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 2a93b45..e29ffb9 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
@@ -15,14 +15,14 @@
  */
 package org.onosproject.net.flow.instructions;
 
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-import java.util.Objects;
-
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.MplsLabel;
 import org.onlab.packet.VlanId;
 
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
 /**
  * Abstraction of a single traffic treatment step.
  */
@@ -80,7 +80,12 @@
         /**
          * VLAN Pop modification.
          */
-        VLAN_POP
+        VLAN_POP,
+
+        /**
+         * VLAN Push modification.
+         */
+        VLAN_PUSH
     }
 
     // TODO: Create factory class 'Instructions' that will have various factory
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
index d253aef..cf4f490 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
@@ -345,6 +345,10 @@
                 return factory().actions().decMplsTtl();
             case VLAN_POP:
                 return factory().actions().popVlan();
+            case VLAN_PUSH:
+                PushHeaderInstructions pushVlanInstruction = (PushHeaderInstructions) l2m;
+                return factory().actions().pushVlan(
+                        EthType.of(pushVlanInstruction.ethernetType()));
             default:
                 log.warn("Unimplemented action type {}.", l2m.subtype());
                 break;
diff --git a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupModBuilder.java b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupModBuilder.java
index 07ddbec..25ece46 100644
--- a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupModBuilder.java
+++ b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupModBuilder.java
@@ -183,6 +183,7 @@
         if (treatment == null) {
             return actions;
         }
+
         for (Instruction i : treatment.instructions()) {
             switch (i.type()) {
                 case DROP:
@@ -254,6 +255,13 @@
                         (L2ModificationInstruction.ModVlanPcpInstruction) l2m;
                 oxm = factory.oxms().vlanPcp(VlanPcp.of(vlanPcp.vlanPcp()));
                 break;
+            case VLAN_POP:
+                return factory.actions().popVlan();
+            case VLAN_PUSH:
+                L2ModificationInstruction.PushHeaderInstructions pushVlanInstruction
+                        = (L2ModificationInstruction.PushHeaderInstructions) l2m;
+                return factory.actions().pushVlan(
+                        EthType.of(pushVlanInstruction.ethernetType()));
             case MPLS_PUSH:
                 L2ModificationInstruction.PushHeaderInstructions pushHeaderInstructions =
                         (L2ModificationInstruction.PushHeaderInstructions) l2m;
