diff --git a/accton/accton_util.py b/accton/accton_util.py
index 67a7191..155849f 100755
--- a/accton/accton_util.py
+++ b/accton/accton_util.py
@@ -548,20 +548,56 @@
     logging.info("Add allow all vlan on port %d " %(in_port))
     ctrl.message_send(request)    
 
-def add_untag_vlan_table_flow(ctrl, in_port, send_barrier=False):
+def add_untag_vlan_table(ctrl, in_port,vlan_id=0x0000, send_barrier=False):
     """it a flow to allow all vlan untag on this port"""
     match = ofp.match()
     match.oxm_list.append(ofp.oxm.in_port(in_port))
-    match.oxm_list.append(ofp.oxm.vlan_vid_masked(0x1000, 0x0fff))
+    match.oxm_list.append(ofp.oxm.vlan_vid(vlan_id))
+    actions=[]
+    #actions.append(ofp.action.push_vlan(0x8100))
+    actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x100a)))
     request = ofp.message.flow_add(
         table_id=10,
         cookie=42,
         match=match,
         instructions=[
+            ofp.instruction.apply_actions(
+                actions=actions
+            ),
             ofp.instruction.goto_table(20)
         ],
         priority=0)
     logging.info("Add allow all untag on port %d " %(in_port))
+    print "REQUEST:"
+    print request.show()
+    print "END"
+
+    ctrl.message_send(request)
+
+def add_untag_vlan_table_flow(ctrl, in_port,vlan_id=0x1001, vlan_mask=0x1fff, send_barrier=False):
+    """it a flow to allow all vlan untag on this port"""
+    match = ofp.match()
+    match.oxm_list.append(ofp.oxm.in_port(in_port))
+    match.oxm_list.append(ofp.oxm.vlan_vid_masked(vlan_id, vlan_mask))
+    actions=[]
+    #actions.append(ofp.action.push_vlan(0x8100))
+    actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x100a)))
+    request = ofp.message.flow_add(
+        table_id=10,
+        cookie=42,
+        match=match,
+        instructions=[
+            ofp.instruction.apply_actions(
+                actions=actions
+            ),
+            ofp.instruction.goto_table(20)
+        ],
+        priority=0)
+    logging.info("Add allow all untag on port %d " %(in_port))
+    print "REQUEST:"
+    print request.show()
+    print "END"
+
     ctrl.message_send(request)
     
 def add_one_vlan_table_flow(ctrl, of_port, vlan_id=1, vrf=0, flag=VLAN_TABLE_FLAG_ONLY_BOTH, send_barrier=False):
@@ -576,7 +612,7 @@
         if vrf!=0:
             actions.append(ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=1, value=vrf)))
             
-        actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(value=vlan_id)))
+        #actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(value=vlan_id)))
 
         request = ofp.message.flow_add(
             table_id=10,
