diff --git a/accton/accton_util.py b/accton/accton_util.py
index d38bb78..e12cc63 100755
--- a/accton/accton_util.py
+++ b/accton/accton_util.py
@@ -276,7 +276,7 @@
 
     action=[]
     action.append(ofp.action.set_field(ofp.oxm.eth_src(src_mac)))
-    action.append(ofp.action.set_field(ofp.oxm.vlan_vid(vlanid)))       
+    action.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+vlanid)))       
     action.append(ofp.action.group(group_id))
     
     buckets = [ofp.bucket(actions=action)]
@@ -779,32 +779,30 @@
 
     return request        
 
-def add_mpls(ctrl, action_group_id, label=100 ,ethertype=0x0800, bos=1, vrf=1, send_barrier=False):
+def add_mpls_flow(ctrl, action_group_id=0x0, label=100 ,ethertype=0x0800, bos=1, vrf=1, goto_table=27, send_barrier=False):
     match = ofp.match()
     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 = [ofp.action.dec_mpls_ttl(),
-               #ofp.action.copy_ttl_in(),
-               ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=1, value=vrf)),
-               ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=23, value=32)),
-               ofp.action.group(action_group_id)]
-               #ofp.action.pop_mpls(ethertype)]
-
+               ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=1, value=vrf))]
+    if (goto_table == 29):
+            actions.append(ofp.action.set_field(
+                            ofp.oxm.exp2ByteValue(exp_type=23, value=32)))
+            actions.append(ofp.action.group(action_group_id))
+    else:
+            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.write_actions(
-                    ofp.instruction.goto_table(29)
+                    ofp.instruction.apply_actions(actions=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)
 
@@ -813,44 +811,6 @@
 
     return request
 
-
-
-def add_mpls_flow(ctrl, action_group_id=0x0, label=100 ,ethertype=0x0800, bos=1, vrf=1, send_barrier=False):
-    match = ofp.match()
-    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 = [ofp.action.dec_mpls_ttl(),
-               ofp.action.copy_ttl_in(),
-               ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=1, value=vrf)),
-               ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=23, value=32))]
-               #ofp.action.group(action_group_id)]
-               #ofp.action.pop_mpls(ethertype)]
-   
-    request = ofp.message.flow_add(
-            table_id=24,
-            cookie=43,
-            match=match,
-            instructions=[
-                    ofp.instruction.apply_actions(
-                        actions=actions
-                    ),
-                    #ofp.instruction.write_actions(
-                    #    actions=[ofp.action.group(action_group_id)]),
-                    ofp.instruction.goto_table(27)
-                ],
-            buffer_id=ofp.OFP_NO_BUFFER,
-            priority=1)
-
-    logging.info("Inserting MPLS flow , label %ld", label)
-    ctrl.message_send(request)
-
-    if send_barrier:
-        do_barrier(ctrl)
-
-    return request
-
-
 def add_mcast4_routing_flow(ctrl, vlan_id, src_ip, src_ip_mask, dst_ip, action_group_id, send_barrier=False):
     match = ofp.match()
     match.oxm_list.append(ofp.oxm.eth_type(0x0800))
