diff --git a/README.md b/README.md
index f59d638..691ed64 100755
--- a/README.md
+++ b/README.md
@@ -90,34 +90,35 @@
 
 The following tests are implemented and these are their results.
 
-Test Results       | i12_1.7 | 2.0 GA | 3.0 EA0
--------            | ------- | ------ | -------
-/0Ucast            | X       | ok     | ok
-/24UnicastTagged   | ok      | ok     | ok
-/32UnicastTagged   | ok      | ok     | ok
-/24ECMPL3          | ok      | ok     | ok
-/32ECMPL3          | ok      | ok     | ok
-/24ECMPVPN         | ok      | ok     | ok
-/32ECMPVPN         | ok      | ok     | ok
-/32VPN             | ok      | ok     | ok
-/24VPN             | ok      | ok     | ok
-EcmpGroupMod       | X       | X      | ok
-PacketInArp        | ok      | ok     | ok
-MTU1500            | ok      | ok     | ok
-MplsTermination    | ok      | ok     | ok
-MplsFwd            | X       | ok     | ok
-L2FloodQinQ        | ok      | ok     | ok
-L2UnicastTagged    | ok      | ok     | ok
-L3McastToL3        | ok      | X      | ok
-L3McastToL2_1*     | ?       | ?      | ok
-L3McastToL2_2**    | ?       | ?      | ok
-L3McastToL2_3***   | ?       | ?      | ok
-L3McastToL2_4****  | ok      | ?      | ok
-L3McastToL2_5***** | ?       | ?      | ok
-FloodGroupMod      | X       | X      | ok
-PacketInUDP        | ok      | ok     | ok
-Unfiltered         | X       | ok     | X
-Untagged           | ok      | n/a    | ok
+Test Results       | i12_1.7 | 2.0 GA | 3.0 EA0 | 3.0 EA4 |
+-------            | ------- | ------ | ------- | ------- |
+/0Ucast            | X       | ok     | ok      | ok      |
+/24UnicastTagged   | ok      | ok     | ok      | ok      |
+/32UnicastTagged   | ok      | ok     | ok      | ok      |
+/24ECMPL3          | ok      | ok     | ok      | ok      |
+/32ECMPL3          | ok      | ok     | ok      | ok      |
+/24ECMPVPN         | ok      | ok     | ok      | ok      |
+/32ECMPVPN         | ok      | ok     | ok      | ok      |
+/32VPN             | ok      | ok     | ok      | ok      |
+/24VPN             | ok      | ok     | ok      | ok      |
+EcmpGroupMod       | X       | X      | ok      | ok      |
+PacketInArp        | ok      | ok     | ok      | ok      |
+MTU1500            | ok      | ok     | ok      | ok      |
+MplsTermination    | ok      | ok     | ok      | ok      |
+MplsFwd            | X       | ok     | ok      | ok      |
+L2FloodQinQ        | ok      | ok     | ok      | ok      |
+L2UnicastTagged    | ok      | ok     | ok      | ok      |
+L3McastToL3        | ok      | X      | ok      | ok      |
+L3McastToL2_1*     | ?       | ?      | ok      | ok      |
+L3McastToL2_2**    | ?       | ?      | ok      | ok      |
+L3McastToL2_3***   | ?       | ?      | ok      | ok      |
+L3McastToL2_4****  | ok      | ?      | ok      | ok      |
+L3McastToL2_5***** | ?       | ?      | ok      | ok      |
+FloodGroupMod      | X       | X      | ok      | ok      |
+PacketInUDP        | ok      | ok     | ok      | ok      |
+Unfiltered         | X       | ok     | X       | ok      |
+Untagged           | ok      | n/a    | ok      | ok      |
+PacketInIPTable    | X       | X      | ok      | ok      |
 
 *       Untag -> Untag (4094 as internal vlan)
 **      Untag -> Tag
@@ -131,13 +132,13 @@
 
 The following tests are implemented in vlan_flows.py and these are their results.
 
-Test Results                | 3.0 EA0
------------------           | -------
-L2ForwardingStackedVLAN1    | ok
-L2ForwardingStackedVLAN2    | ok
-L2ForwardingStackedVLAN3    | ok
-L2ForwardingStackedVLAN4    | ok
-L2ForwardingStackedVLAN5    | ok
+Test Results                | 3.0 EA0 | 3.0 EA4 |
+------------------------    | ------- | ------- |
+L2ForwardingStackedVLAN     | ok      | ok      |
+L2ForwardingStackedVLAN2    | ok      | ok      |
+L2ForwardingStackedVLAN3    | ok      | ok      |
+L2ForwardingStackedVLAN4    | ok      | ok      |
+L2ForwardingStackedVLAN5    | ok      | ok      |
 
 For major details on the test look the comments in the code.
 
@@ -145,28 +146,30 @@
 
 The following tests are implemented in pw_flows.py and these are their results.
 
-Test Results                            | 3.0 EA0
-----------------------------------      | -------
-UntaggedPWInitiation_2_Labels           | ok
-Untagged2PWInitiation_2_Labels          | ok
-UntaggedPWInitiation_3_Labels           | ok
-Untagged2PWInitiation_3_Labels          | ok
-TaggedPWInitiation_2_Labels             | ?
-Tagged2PWInitiation_2_Labels            | ?
-TaggedPWInitiation_3_Labels             | ?
-Tagged2PWInitiation_3_Labels            | ?
-DoubleTaggedPWInitiation_2_Labels       | ?
-DoubleTagged2PWInitiation_2_Labels      | ?
-DoubleTaggedPWInitiation_3_Labels       | ?
-DoubleTagged2PWInitiation_3_Labels      | ?
-IntraCO_2_Labels                        | ok
-IntraCO_3_Labels                        | ok
-InterCO                                 | ok
-UntaggedPWTermination                   | ok
-Untagged2PWTermination                  | ?
-TaggedPWTermination                     | ok
-DoubleTaggedPWTermination               | ok
+Test Results                            | 3.0 EA0 | 3.0 EA4 |
+----------------------------------      | ------- | ------- |
+UntaggedPWInitiation_2_Labels           | ok      | ok      |
+Untagged2PWInitiation_2_Labels          | ok      | ok      |
+UntaggedPWInitiation_3_Labels           | ok      | ok      |
+Untagged2PWInitiation_3_Labels          | ok      | ok      |
+TaggedPWInitiation_2_Labels             | x       | ok*     |
+Tagged2PWInitiation_2_Labels            | x       | ok*     |
+TaggedPWInitiation_3_Labels             | x       | ok*     |
+Tagged2PWInitiation_3_Labels            | x       | ok*     |
+DoubleTaggedPWInitiation_2_Labels       | x       | ok*     |
+DoubleTagged2PWInitiation_2_Labels      | x       | ok*     |
+DoubleTaggedPWInitiation_3_Labels       | x       | ok*     |
+DoubleTagged2PWInitiation_3_Labels      | x       | ok*     |
+IntraCO_2_Labels                        | ok      | ok*     |
+IntraCO_3_Labels                        | ok      | ok*     |
+InterCO                                 | ok      | ok*     |
+UntaggedPWTermination                   | ok      | ok      |
+Untagged2PWTermination                  | x       | x       |
+TaggedPWTermination                     | ok      | ok      |
+DoubleTaggedPWTermination               | ok      | ok      |
+BoSBug                                  | x       | x       |
 
+* The test may fail intermittently
 
 For major details on the test look the comments in the code.
 
@@ -174,17 +177,17 @@
 
 The following tests are implemented in ipv6_flows.py and these are their results.
 
-Test Results                | 3.0 EA0
-----------------------      | -------
-PacketInICMPv6              | ok
-PacketInIPv6Table           | ok
-_128UcastUnTagged           | ok
-_128ECMPVpn                 | ok
-_128ECMPL3                  | ok
-_64UcastUnTagged            | ok
-_64ECMPVpn                  | ok
-_64ECMPL3                   | ok
-_0UcastV6                   | ok
-_MPLSTerminationV6          | ok
+Test Results                | 3.0 EA0 | 3.0 EA4 |
+----------------------      | ------- | ------- |
+PacketInICMPv6              | ok      | ok      |
+PacketInIPv6Table           | ok      | ok      |
+_128UcastUnTagged           | ok      | ok      |
+_128ECMPVpn                 | ok      | ok      |
+_128ECMPL3                  | ok      | ok      |
+_64UcastUntagged            | ok      | ok      |
+_64ECMPVpn                  | ok      | ok      |
+_64ECMPL3                   | ok      | ok      |
+_0UcastV6                   | ok      | ok      |
+_MPLSTerminationV6          | ok      | ok      |
 
 For major details on the test look the comments in the code.
diff --git a/accton/accton_util.py b/accton/accton_util.py
index a729f79..0dafb5d 100755
--- a/accton/accton_util.py
+++ b/accton/accton_util.py
@@ -472,13 +472,13 @@
        NEXT_TABLE=10
 
     request = ofp.message.flow_add(
-		table_id=0,
-		cookie=42,
-		match=match,
-		instructions=[
-		  ofp.instruction.goto_table(NEXT_TABLE)
-		],
-		priority=0)
+        table_id=0,
+        cookie=42,
+        match=match,
+        instructions=[
+          ofp.instruction.goto_table(NEXT_TABLE)
+        ],
+        priority=0)
     logging.info("Add port table, match port %lx" % 0x10000)
     ctrl.message_send(request)
 
@@ -1087,7 +1087,7 @@
     instructions = []
     instructions.append(ofp.instruction.goto_table(60))
     if send_ctrl:
-        instructions.append(ofp.instruction.apply_actions(
+        instructions.append(ofp.instruction.write_actions(
                             actions=[ofp.action.output( port=ofp.OFPP_CONTROLLER,
                             max_len=ofp.OFPCML_NO_BUFFER)]))
     else:
@@ -1121,7 +1121,7 @@
     instructions = []
     instructions.append(ofp.instruction.goto_table(60))
     if send_ctrl:
-        instructions.append(ofp.instruction.apply_actions(
+        instructions.append(ofp.instruction.write_actions(
                             actions=[ofp.action.output( port=ofp.OFPP_CONTROLLER,
                             max_len=ofp.OFPCML_NO_BUFFER)]))
     else:
@@ -1149,23 +1149,23 @@
     match.oxm_list.append(ofp.oxm.eth_type(0x8847))
     match.oxm_list.append(ofp.oxm.mpls_label(label))
     match.oxm_list.append(ofp.oxm.mpls_bos(bos))
-    actions = []
-    actions = [ofp.action.dec_mpls_ttl(),
+    write_actions = []
+    write_actions.append(ofp.action.group(action_group_id))
+    apply_actions = []
+    apply_actions = [ofp.action.dec_mpls_ttl(),
                ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=1, value=vrf))]
-    if (goto_table == 29):
-            actions.append(ofp.action.group(action_group_id))
-    else:
-            actions.append(ofp.action.set_field(
+    if (goto_table != 29):
+            apply_actions.append(ofp.action.set_field(
                             ofp.oxm.exp2ByteValue(exp_type=23, value=32)))
-            actions.append(ofp.action.group(action_group_id))
-            actions.append(ofp.action.copy_ttl_in())
+            apply_actions.append(ofp.action.copy_ttl_in())
 
     request = ofp.message.flow_add(
             table_id=24,
             cookie=43,
             match=match,
             instructions=[
-                    ofp.instruction.apply_actions(actions=actions),
+                    ofp.instruction.apply_actions(actions=apply_actions),
+                    ofp.instruction.write_actions(actions=write_actions),
                     ofp.instruction.goto_table(goto_table)
                 ],
             buffer_id=ofp.OFP_NO_BUFFER,
@@ -1184,31 +1184,32 @@
     match.oxm_list.append(ofp.oxm.mpls_label(label))
     match.oxm_list.append(ofp.oxm.mpls_bos(bos))
 
-    actions = []
-    actions.append(ofp.action.dec_mpls_ttl())
+    apply_actions = []
+    write_actions = []
+    apply_actions.append(ofp.action.dec_mpls_ttl())
     if popMPLS == True:
-        actions.append(ofp.action.copy_ttl_in())
-        actions.append(ofp.action.pop_mpls(ethertype))
+        apply_actions.append(ofp.action.copy_ttl_in())
+        apply_actions.append(ofp.action.pop_mpls(ethertype))
     if bos==1 and popL2 == True:
-        actions.append(ofp.action.ofdpa_pop_l2_header())
-        actions.append(ofp.action.ofdpa_pop_cw())
-        actions.append(ofp.action.set_field(ofp.oxm.tunnel_id(tunnel_index + ofp.oxm.TUNNEL_ID_BASE)))
+        apply_actions.append(ofp.action.ofdpa_pop_l2_header())
+        apply_actions.append(ofp.action.ofdpa_pop_cw())
+        apply_actions.append(ofp.action.set_field(ofp.oxm.tunnel_id(tunnel_index + ofp.oxm.TUNNEL_ID_BASE)))
         # 0x0002nnnn is for UNI interfaces
-        actions.append(ofp.action.set_field(ofp.oxm.exp4ByteValue(exp_type=ofp.oxm.OFDPA_EXP_TYPE_MPLS_L2_PORT, value=0x00020000 + of_port)))
-        actions.append(ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=ofp.oxm.OFDPA_EXP_TYPE_MPLS_TYPE, value=ofp.oxm.VPWS)))
-    actions.append(ofp.action.group(action_group_id))
+        apply_actions.append(ofp.action.set_field(ofp.oxm.exp4ByteValue(exp_type=ofp.oxm.OFDPA_EXP_TYPE_MPLS_L2_PORT, value=0x00020000 + of_port)))
+        apply_actions.append(ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=ofp.oxm.OFDPA_EXP_TYPE_MPLS_TYPE, value=ofp.oxm.VPWS)))
+    write_actions.append(ofp.action.group(action_group_id))
 
     request = ofp.message.flow_add(
-        table_id=24,
-        cookie=43,
-        match=match,
-        instructions=[
-        ofp.instruction.apply_actions(actions=actions),
-        ofp.instruction.goto_table(goto_table)
-        ],
-        buffer_id=ofp.OFP_NO_BUFFER,
-        priority=1
-        )
+            table_id=24,
+            cookie=43,
+            match=match,
+            instructions=[
+                    ofp.instruction.apply_actions(actions=apply_actions),
+                    ofp.instruction.write_actions(actions=write_actions),
+                    ofp.instruction.goto_table(goto_table)
+                ],
+            buffer_id=ofp.OFP_NO_BUFFER,
+            priority=1)
     logging.info("Inserting MPLS flow , label %ld", label)
     ctrl.message_send(request)
 
@@ -1483,16 +1484,16 @@
                      <pause>symmetric</pause>
                    </advertised-peer>
                 </features>
-			  <ofdpa10:vtep xmlns:ofdpa10="urn:bcm:ofdpa10:accton01">
-				<ofdpa10:src-ip>SRC_IP</ofdpa10:src-ip>
-				<ofdpa10:dest-ip>DST_IP</ofdpa10:dest-ip>
-				<ofdpa10:udp-src-port>UDP_SRC_PORT</ofdpa10:udp-src-port>
-				<ofdpa10:vni xc:operation="OPERATION">
+              <ofdpa10:vtep xmlns:ofdpa10="urn:bcm:ofdpa10:accton01">
+                <ofdpa10:src-ip>SRC_IP</ofdpa10:src-ip>
+                <ofdpa10:dest-ip>DST_IP</ofdpa10:dest-ip>
+                <ofdpa10:udp-src-port>UDP_SRC_PORT</ofdpa10:udp-src-port>
+                <ofdpa10:vni xc:operation="OPERATION">
                     <ofdpa10:id>VNID</ofdpa10:id>
                 </ofdpa10:vni>
-				<ofdpa10:nexthop-id>NEXT_HOP_ID</ofdpa10:nexthop-id>
-				<ofdpa10:ttl>TTL</ofdpa10:ttl>
-			  </ofdpa10:vtep>
+                <ofdpa10:nexthop-id>NEXT_HOP_ID</ofdpa10:nexthop-id>
+                <ofdpa10:ttl>TTL</ofdpa10:ttl>
+              </ofdpa10:vtep>
              </port>
             </resources>
             <logical-switches>
@@ -1596,7 +1597,7 @@
             logging.info("Fail to set xml %s", xml)
             return False
 
-	#return m.get_config(source='running').data_xml
+    #return m.get_config(source='running').data_xml
     return True
 
 def send_delete_config(switch_ip, xml, target='runing'):
@@ -1613,14 +1614,14 @@
             logging.info("Fail to set xml %s", xml)
             return False
 
-	#return m.get_config(source='running').data_xml
+    #return m.get_config(source='running').data_xml
     return True
 
 def get_edit_config(switch_ip, target='runing'):
     NETCONF_ACCOUNT="netconfuser"
     NETCONF_PASSWD="netconfuser"
     with manager.connect_ssh(host=switch_ip, port=830, username=NETCONF_ACCOUNT, password=NETCONF_PASSWD, hostkey_verify=False ) as m:
-	    return m.get_config(source='running').data_xml
+        return m.get_config(source='running').data_xml
 
 
 """
@@ -1665,8 +1666,7 @@
     action=[]
     action.append(ofp.action.set_field(ofp.oxm.eth_src(src_mac)))
     action.append(ofp.action.set_field(ofp.oxm.eth_dst(dst_mac)))
-    if vid != 1:
-        action.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+vid)))
+    action.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+vid)))
     action.append(ofp.action.group(ref_gid))
 
     buckets = [ofp.bucket(actions=action)]
@@ -1814,20 +1814,21 @@
     match.oxm_list.append(ofp.oxm.tunnel_id(tunnel_index + ofp.oxm.TUNNEL_ID_BASE))
 
 
-    action = []
-    action.append(ofp.action.group(ref_gid))
+    write_actions = []
+    write_actions.append(ofp.action.group(ref_gid))
+    apply_actions = []
     assert(qos_index>=0)
-    action.append(ofp.action.set_field(ofp.oxm.exp1ByteValue(exp_type=ofp.oxm.OFDPA_EXP_TYPE_QOS_INDEX, value=qos_index)))
+    apply_actions.append(ofp.action.set_field(ofp.oxm.exp1ByteValue(exp_type=ofp.oxm.OFDPA_EXP_TYPE_QOS_INDEX, value=qos_index)))
 
     request = ofp.message.flow_add(
             table_id=MPLS_L2_PORT_FLOW_TABLE,
             cookie=42,
             match=match,
             instructions=[
-                    ofp.instruction.write_actions(
-                        actions=action
-                        ),
-                    ofp.instruction.goto_table(MPLS_L2_PORT_PCP_TRUST_FLOW_TABLE)                ],
+                    ofp.instruction.apply_actions(actions=apply_actions),
+                    ofp.instruction.write_actions(actions=write_actions),
+                    ofp.instruction.goto_table(MPLS_L2_PORT_PCP_TRUST_FLOW_TABLE)
+                    ],
             buffer_id=ofp.OFP_NO_BUFFER,
             priority=1)
     logging.info("Inserting flow %d mpls_l2_port, %d tunnel_id, action %x group and go to table %d", mpls_l2_port, tunnel_id, ref_gid, MPLS_L2_PORT_DSCP_TRUST_FLOW_TABLE)
@@ -1838,13 +1839,13 @@
 
 def add_mpls_forwarding_group(ctrl, subtype, index, ref_gids,
                               watch_port=None,
-							  watch_group=ofp.OFPP_ANY,
-							  push_vlan=None,
+                              watch_group=ofp.OFPP_ANY,
+                              push_vlan=None,
                               pop_vlan=None,
                               set_vid=None):
     assert(subtype == OFDPA_MPLS_GROUP_SUBTYPE_FAST_FAILOVER_GROUP
-	       or subtype == OFDPA_MPLS_GROUP_SUBTYPE_ECMP
-		   or subtype == OFDPA_MPLS_GROUP_SUBTYPE_L2_TAG)
+           or subtype == OFDPA_MPLS_GROUP_SUBTYPE_ECMP
+           or subtype == OFDPA_MPLS_GROUP_SUBTYPE_L2_TAG)
 
     buckets=[]
     if subtype == OFDPA_MPLS_GROUP_SUBTYPE_FAST_FAILOVER_GROUP:
diff --git a/ofdpa/flows.py b/ofdpa/flows.py
index 53e0edd..b888105 100755
--- a/ofdpa/flows.py
+++ b/ofdpa/flows.py
@@ -143,7 +143,7 @@
 
 class PacketInIPTable( base_tests.SimpleDataPlane ):
     """
-        Verify Packet-in message from IP table when controller action is used
+    Verify Packet-in message from IP table when controller action is used
     Send a packet to each dataplane port and verify that a packet
     in message is received from the controller for each
     #todo verify you stop receiving after adding rule
@@ -327,7 +327,7 @@
             vlan_id = 18
             for port in ports:
                 L2gid, msg = add_one_l2_interface_group( self.controller, port, vlan_id, True, False )
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 Groups.put( L2gid )
                 add_bridge_flow( self.controller, [ 0x00, 0x12, 0x34, 0x56, 0x78, port ], vlan_id, L2gid,
                         True )
@@ -378,7 +378,7 @@
                 l3_msg = add_l3_unicast_group( self.controller, port, vlanid=vlan_id, id=vlan_id,
                         src_mac=intf_src_mac, dst_mac=dst_mac )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
                 # add unicast routing flow
@@ -445,7 +445,7 @@
                 # ecmp_msg=add_l3_ecmp_group(self.controller, vlan_id, [mpls_label_gid])
                 do_barrier( self.controller )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, vrf=2,
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, vrf=2,
                         flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
@@ -513,7 +513,7 @@
                 ecmp_msg = add_l3_ecmp_group( self.controller, vlan_id, [ mpls_label_gid ] )
                 do_barrier( self.controller )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, vrf=0,
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, vrf=0,
                         flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
@@ -578,7 +578,7 @@
                         src_mac=intf_src_mac, dst_mac=dst_mac )
                 ecmp_msg = add_l3_ecmp_group( self.controller, id, [ l3_msg.group_id ] )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
                 # add unicast routing flow
@@ -644,7 +644,7 @@
                 # ecmp_msg=add_l3_ecmp_group(self.controller, vlan_id, [mpls_label_gid])
                 do_barrier( self.controller )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, vrf=0,
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, vrf=0,
                         flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
@@ -711,7 +711,7 @@
                 ecmp_msg = add_l3_ecmp_group( self.controller, id, [ mpls_label_gid ] )
                 do_barrier( self.controller )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, vrf=0,
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, vrf=0,
                         flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
@@ -828,7 +828,7 @@
                         src_mac=intf_src_mac, dst_mac=dst_mac )
                 ecmp_msg = add_l3_ecmp_group( self.controller, id, [ l3_msg.group_id ] )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
                 # add unicast routing flow
@@ -1003,17 +1003,6 @@
 
                 verify_no_other_packets( self )
 
-            parsed_pkt = simple_udp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=vlan_id,
-                    eth_dst=dst_mac_str, eth_src=port1_mac_str, ip_ttl=64, ip_src=src_ip_str,
-                    ip_dst=dst_ip_str )
-            pkt = str( parsed_pkt )
-            self.dataplane.send( port1, pkt )
-            for port in config[ "port_map" ].keys( ):
-                if port == port2 or port == port1:
-                    verify_no_packet( self, pkt, port )
-                    continue
-                verify_packet( self, pkt, port )
-            verify_no_other_packets( self )
         finally:
             delete_all_flows( self.controller )
             delete_groups( self.controller, Groups )
@@ -1388,7 +1377,7 @@
                 ecmp_gid, ecmp_msg = add_mpls_forwarding_group( self.controller,
                         subtype=OFDPA_MPLS_GROUP_SUBTYPE_ECMP, index=id, ref_gids=[mpls_label_gid] )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x8847, intf_src_mac, vlan_id, goto_table=24 )
                 #add_mpls_flow( self.controller, ecmp_gid, port, goto_table=29 )
@@ -1462,7 +1451,7 @@
                 # add L3 ecmp group
                 ecmp_msg = add_l3_ecmp_group( self.controller, id, [ l3_msg.group_id ] )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x8847, intf_src_mac, vlan_id, goto_table=24 )
                 add_mpls_flow( self.controller, ecmp_msg.group_id, mpls_label )
@@ -1529,7 +1518,7 @@
                 l3_msg = add_l3_unicast_group( self.controller, port, vlanid=vlan_id, id=vlan_id,
                         src_mac=intf_src_mac, dst_mac=dst_mac )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
                 # add unicast routing flow
@@ -1589,7 +1578,7 @@
                 l3_msg = add_l3_unicast_group( self.controller, port, vlanid=vlan_id + 1, id=vlan_id,
                         src_mac=intf_src_mac, dst_mac=dst_mac )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
                 # add unicast routing flow
@@ -1802,7 +1791,7 @@
                 Groups._put( l3_msg.group_id )
                 ecmp_msg = add_l3_ecmp_group( self.controller, ports[ 0 ], [ l3_msg.group_id ] )
                 # add vlan flow table
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
                 # add termination flow
                 add_termination_flow( self.controller, port, 0x0800, intf_src_mac, vlan_id )
                 # add unicast routing flow
@@ -1894,8 +1883,8 @@
             ports = sorted( config[ "port_map" ].keys( ) )
             for port in ports:
                 vlan_id = Untagged.MAX_INTERNAL_VLAN - port
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
-                add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_UNTAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
+                add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_UNTAG )
                 for other_port in ports:
                     if other_port == port:
                         continue
diff --git a/ofdpa/ipv6_flows.py b/ofdpa/ipv6_flows.py
index a7161a5..a20b6d9 100644
--- a/ofdpa/ipv6_flows.py
+++ b/ofdpa/ipv6_flows.py
@@ -100,6 +100,7 @@
                 add_one_vlan_table_flow(
                     ctrl=self.controller,
                     of_port=in_port,
+                    out_vlan_id=1,
                     vlan_id=vlan_id,
                     flag=VLAN_TABLE_FLAG_ONLY_TAG
                     )
@@ -217,7 +218,6 @@
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             self.dataplane.send(in_port, tcpv6_pkt)
-            print_port_stats(self, in_port)
             parsed_tcpv6_pkt = simple_tcpv6_packet(
                     pktlen=100,
                     eth_dst=dst_mac_str,
@@ -226,8 +226,6 @@
                     ipv6_src=sip,
                     ipv6_hlim=63
                     )
-            time.sleep(2)
-            print_port_stats(self, in_port)
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             verify_packet(self, tcpv6_pkt, out_port )
             verify_no_packet(self, tcpv6_pkt, in_port )
@@ -352,7 +350,6 @@
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             self.dataplane.send(in_port, tcpv6_pkt)
-            print_port_stats(self, in_port)
             parsed_mplsv6_pkt = mplsv6_packet(
                     pktlen=104,
                     eth_dst=dst_mac_str,
@@ -363,8 +360,6 @@
                     label=[ label ]
                     )
             mplsv6_pkt = str( parsed_mplsv6_pkt )
-            time.sleep(2)
-            print_port_stats(self, in_port)
             verify_packet(self, mplsv6_pkt, out_port )
             verify_no_packet(self, mplsv6_pkt, in_port )
             verify_no_other_packets(self)
@@ -377,7 +372,6 @@
 class _128ECMPL3( base_tests.SimpleDataPlane ):
     """ Verifies /128 IP routing and ECMP """
 
-
     def runTest( self ):
         try:
 
@@ -474,7 +468,6 @@
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             self.dataplane.send(in_port, tcpv6_pkt)
-            print_port_stats(self, in_port)
             parsed_tcpv6_pkt = simple_tcpv6_packet(
                     pktlen=100,
                     eth_dst=dst_mac_str,
@@ -484,8 +477,6 @@
                     ipv6_hlim=63
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
-            time.sleep(2)
-            print_port_stats(self, in_port)
             verify_packet(self, tcpv6_pkt, out_port )
             verify_no_packet(self, tcpv6_pkt, in_port )
             verify_no_other_packets(self)
@@ -587,7 +578,6 @@
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             self.dataplane.send(in_port, tcpv6_pkt)
-            print_port_stats(self, in_port)
             parsed_tcpv6_pkt = simple_tcpv6_packet(
                     pktlen=100,
                     eth_dst=dst_mac_str,
@@ -596,8 +586,6 @@
                     ipv6_src=sip,
                     ipv6_hlim=63
                     )
-            time.sleep(2)
-            print_port_stats(self, in_port)
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             verify_packet(self, tcpv6_pkt, out_port )
             verify_no_packet(self, tcpv6_pkt, in_port )
@@ -721,7 +709,6 @@
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             self.dataplane.send(in_port, tcpv6_pkt)
-            print_port_stats(self, in_port)
             parsed_mplsv6_pkt = mplsv6_packet(
                     pktlen=104,
                     eth_dst=dst_mac_str,
@@ -732,8 +719,6 @@
                     label=[ label ]
                     )
             mplsv6_pkt = str( parsed_mplsv6_pkt )
-            time.sleep(2)
-            print_port_stats(self, in_port)
             verify_packet(self, mplsv6_pkt, out_port )
             verify_no_packet(self, mplsv6_pkt, in_port )
             verify_no_other_packets(self)
@@ -824,6 +809,7 @@
             add_one_vlan_table_flow(
                 ctrl=self.controller,
                 of_port=in_port,
+                out_vlan_id=1,
                 vlan_id=vlan_id,
                 flag=VLAN_TABLE_FLAG_ONLY_TAG
                 )
@@ -831,6 +817,7 @@
             add_one_vlan_table_flow(
                 ctrl=self.controller,
                 of_port=in_port,
+                out_vlan_id=1,
                 vlan_id=vlan_id,
                 flag=VLAN_TABLE_FLAG_ONLY_UNTAG
                 )
@@ -843,7 +830,6 @@
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             self.dataplane.send(in_port, tcpv6_pkt)
-            print_port_stats(self, in_port)
             parsed_tcpv6_pkt = simple_tcpv6_packet(
                     pktlen=100,
                     eth_dst=dst_mac_str,
@@ -853,8 +839,6 @@
                     ipv6_hlim=63
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
-            time.sleep(2)
-            print_port_stats(self, in_port)
             verify_packet(self, tcpv6_pkt, out_port )
             verify_no_packet(self, tcpv6_pkt, in_port )
             verify_no_other_packets(self)
@@ -955,7 +939,6 @@
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             self.dataplane.send(in_port, tcpv6_pkt)
-            print_port_stats(self, in_port)
             parsed_tcpv6_pkt = simple_tcpv6_packet(
                     pktlen=100,
                     eth_dst=dst_mac_str,
@@ -964,8 +947,6 @@
                     ipv6_src=sip,
                     ipv6_hlim=63
                     )
-            time.sleep(2)
-            print_port_stats(self, in_port)
             tcpv6_pkt = str( parsed_tcpv6_pkt )
             verify_packet(self, tcpv6_pkt, out_port )
             verify_no_packet(self, tcpv6_pkt, in_port )
@@ -1075,7 +1056,6 @@
                     )
             mplsv6_pkt = str( parsed_mplsv6_pkt )
             self.dataplane.send(in_port, mplsv6_pkt)
-            print_port_stats(self, in_port)
             parsed_tcpv6_pkt = simple_tcpv6_packet(
                     pktlen=100,
                     eth_dst=dst_mac_str,
@@ -1085,8 +1065,6 @@
                     ipv6_hlim=63
                     )
             tcpv6_pkt = str( parsed_tcpv6_pkt )
-            time.sleep(2)
-            print_port_stats(self, in_port)
             verify_packet(self, tcpv6_pkt, out_port )
             verify_no_packet(self, tcpv6_pkt, in_port )
             verify_no_other_packets(self)
diff --git a/ofdpa/pw_flows.py b/ofdpa/pw_flows.py
index 564ca56..01fabb9 100644
--- a/ofdpa/pw_flows.py
+++ b/ofdpa/pw_flows.py
@@ -2,6 +2,7 @@
 Check README file
 """
 import Queue
+import time
 
 from oftest import config
 import inspect
@@ -1699,3 +1700,133 @@
             delete_groups( self.controller, Groups )
             delete_groups( self.controller, Groups2 )
             delete_all_groups( self.controller )
+
+class BoSBug( base_tests.SimpleDataPlane ):
+    """
+    This test is meant to verify the forwarding of the default traffic
+    when the rule for the PW transport (BoS=0) has been installed in the
+    switch, together with the rule for the transport of default routing
+    traffic. There is a bug in OFDPA 3.0EA4, which requires BOS=0 flow
+    to be installed before BOS=1 flow to generate correct packets. Incoming
+    packet has 1 label, and there is no VLAN tag in the incoming packet.
+    The expected behvior is the Pop of the outer MPLS label and plain IP
+    packet should exit from the switch.
+    """
+    def runTest( self ):
+        Groups = Queue.LifoQueue( )
+        try:
+            if len( config[ "port_map" ] ) < 1:
+                logging.info( "Port count less than 1, can't run this case" )
+                assert (False)
+                return
+            ports           = config[ "port_map" ].keys( )
+            in_port         = ports[0]
+            out_port        = ports[1]
+            out_vlan        = 4094
+            src_mac         = [ 0x00, 0x00, 0x00, 0x00, 0x11, 0x01 ]
+            src_mac_str     = ':'.join( [ '%02X' % x for x in src_mac ] )
+            dst_mac         = [ 0x00, 0x00, 0x00, 0x11, 0x11, 0x01 ]
+            dst_mac_str     = ':'.join( [ '%02X' % x for x in dst_mac ] )
+            mpls_label      = 100
+            # Add l2 interface group, we have to pop the VLAN;
+            l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(
+                ctrl=self.controller,
+                port=out_port,
+                vlan_id=out_vlan,
+                is_tagged=False,
+                send_barrier=False
+                )
+            Groups._put( l2_intf_gid )
+            # add MPLS interface group
+            mpls_intf_gid, mpls_intf_msg = add_mpls_intf_group(
+                ctrl=self.controller,
+                ref_gid=l2_intf_gid,
+                dst_mac=dst_mac,
+                src_mac=src_mac,
+                vid=out_vlan,
+                index=in_port
+                )
+            Groups._put( mpls_intf_gid )
+            # Add L3 Unicast  group
+            l3_msg = add_l3_unicast_group(
+                ctrl=self.controller,
+                port=out_port,
+                vlanid=out_vlan,
+                id=in_port,
+                src_mac=src_mac,
+                dst_mac=dst_mac
+                )
+            Groups._put( l3_msg.group_id )
+            # Add L3 ecmp group
+            ecmp_msg = add_l3_ecmp_group(
+                ctrl=self.controller,
+                id=in_port,
+                l3_ucast_groups=[ l3_msg.group_id ]
+                )
+            Groups._put( ecmp_msg.group_id )
+            # Add MPLS flow with BoS=1
+            add_mpls_flow(
+                ctrl=self.controller,
+                action_group_id=ecmp_msg.group_id,
+                label=mpls_label
+                )
+            # add MPLS flow with BoS=0
+            add_mpls_flow_pw(
+                ctrl=self.controller,
+                action_group_id=mpls_intf_gid,
+                label=mpls_label,
+                ethertype=0x8847,
+                tunnel_index=1,
+                bos=0
+                )
+            # add Termination flow
+            add_termination_flow(
+                ctrl=self.controller,
+                in_port=in_port,
+                eth_type=0x8847,
+                dst_mac=src_mac,
+                vlanid=out_vlan,
+                goto_table=23
+                )
+            # add VLAN flows
+            add_one_vlan_table_flow(
+                ctrl=self.controller,
+                of_port=in_port,
+                vlan_id=out_vlan,
+                flag=VLAN_TABLE_FLAG_ONLY_TAG,
+                )
+            add_one_vlan_table_flow(
+                ctrl=self.controller,
+                of_port=in_port,
+                vlan_id=out_vlan,
+                flag=VLAN_TABLE_FLAG_ONLY_UNTAG
+                )
+            # Packet generation with sleep
+            time.sleep(2)
+            label = (mpls_label, 0, 1, 32)
+            parsed_pkt = mpls_packet(
+                pktlen=104,
+                vlan_vid=out_vlan,
+                ip_ttl=63,
+                eth_dst=src_mac_str,
+                label=[ label]
+            )
+            pkt = str( parsed_pkt )
+            self.dataplane.send( in_port, pkt )
+            # we geneate the expected pw packet
+            parsed_pkt = simple_tcp_packet(
+                pktlen=100,
+                vlan_vid=out_vlan,
+                ip_ttl=31,
+                eth_dst=dst_mac_str,
+                eth_src=src_mac_str,
+            )
+            pkt = str( parsed_pkt )
+            # Assertions
+            verify_packet( self, pkt, out_port )
+            verify_no_packet( self, pkt, in_port )
+            verify_no_other_packets( self )
+        finally:
+            delete_all_flows( self.controller )
+            delete_groups( self.controller, Groups )
+            delete_all_groups( self.controller )
\ No newline at end of file
diff --git a/ofdpa/utils.py b/ofdpa/utils.py
index f4236a2..253c037 100644
--- a/ofdpa/utils.py
+++ b/ofdpa/utils.py
@@ -148,9 +148,9 @@
 
         L2_Groups = []
         # add vlan flows table
-        add_one_vlan_table_flow( controller, in_port, port_to_in_vlan[in_port], flag=VLAN_TABLE_FLAG_ONLY_TAG )
+        add_one_vlan_table_flow( controller, in_port, 1, port_to_in_vlan[in_port], flag=VLAN_TABLE_FLAG_ONLY_TAG )
         if not is_ingress_tagged:
-            add_one_vlan_table_flow( controller, in_port, port_to_in_vlan[in_port], flag=VLAN_TABLE_FLAG_ONLY_UNTAG )
+            add_one_vlan_table_flow( controller, in_port, 1, port_to_in_vlan[in_port], flag=VLAN_TABLE_FLAG_ONLY_UNTAG )
         elif is_vlan_translated:
             add_one_vlan_table_flow_translation( controller, in_port, port_to_in_vlan[in_port], port_to_out_vlan[in_port], flag=VLAN_TABLE_FLAG_ONLY_TAG)
         # add termination flow
@@ -279,7 +279,7 @@
         # add termination flow
         add_termination_flow( controller, port, 0x0800, switch_mac, port_to_in_vlan[port] )
         # add vlan flow table
-        add_one_vlan_table_flow( controller, port, port_to_in_vlan[port], flag=VLAN_TABLE_FLAG_ONLY_TAG )
+        add_one_vlan_table_flow( controller, port, 1, port_to_in_vlan[port], flag=VLAN_TABLE_FLAG_ONLY_TAG )
 
     return (
         port_to_in_vlan,
