diff --git a/src/emuvim/api/zerorpc/network.py b/src/emuvim/api/zerorpc/network.py
index b1e5d41..e5d5ca0 100644
--- a/src/emuvim/api/zerorpc/network.py
+++ b/src/emuvim/api/zerorpc/network.py
@@ -64,7 +64,7 @@
     def __init__(self, net):
         self.net = net
 
-    def network_action_start(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None, weight=None):
+    def network_action_start(self, vnf_src_name, vnf_dst_name, kwargs):
         # call DCNetwork method, not really datacenter specific API for now...
         # provided dc name needs to be part of API endpoint
         # no check if vnfs are really connected to this datacenter...
@@ -72,9 +72,10 @@
         try:
             c = self.net.setChain(
                 vnf_src_name, vnf_dst_name,
-                vnf_src_interface=vnf_src_interface,
-                vnf_dst_interface=vnf_dst_interface,
-                weight=weight)
+                vnf_src_interface=kwargs.get('vnf_src_interface'),
+                vnf_dst_interface=kwargs.get('vnf_dst_interface'),
+                weight=kwargs.get('weight'),
+                match=kwargs.get('match'))
             return str(c)
         except Exception as ex:
             logging.exception("RPC error.")
diff --git a/src/emuvim/cli/network.py b/src/emuvim/cli/network.py
index c524226..5fa9993 100755
--- a/src/emuvim/cli/network.py
+++ b/src/emuvim/cli/network.py
@@ -29,18 +29,20 @@
 
     def add(self, args):
         vnf_src_name = self._parse_vnf_name(args.get("source"))
-        vnf_src_interface = self._parse_vnf_interface(args.get("source"))
         vnf_dst_name = self._parse_vnf_name(args.get("destination"))
-        vnf_dst_interface = self._parse_vnf_interface(args.get("destination"))
-        weight = args.get("weight")
+
+        params = self._create_dict(
+            vnf_src_interface=self._parse_vnf_interface(args.get("source")),
+            vnf_dst_interface=self._parse_vnf_interface(args.get("destination")),
+            weight=args.get("weight"),
+            match=args.get("match"))
+
         # note zerorpc does not support named arguments
         r = self.c.network_action_start(
             #args.get("datacenter"),
             vnf_src_name,
             vnf_dst_name,
-            vnf_src_interface,
-            vnf_dst_interface,
-            weight)
+            params)
         pp.pprint(r)
 
     def remove(self, args):
@@ -49,13 +51,15 @@
         vnf_dst_name = self._parse_vnf_name(args.get("destination"))
         vnf_dst_interface = self._parse_vnf_interface(args.get("destination"))
         weight = args.get("weight")
+        match = args.get("match")
         r = self.c.network_action_stop(
             #args.get("datacenter"),
             vnf_src_name,
             vnf_dst_name,
             vnf_src_interface,
             vnf_dst_interface,
-            weight)
+            weight,
+            match)
         pp.pprint(r)
 
     def _parse_vnf_name(self, vnf_name_str):
@@ -70,6 +74,8 @@
 
         return vnf_interface
 
+    def _create_dict(self, **kwargs):
+        return kwargs
 
 parser = argparse.ArgumentParser(description='son-emu network')
 parser.add_argument(
@@ -87,6 +93,9 @@
 parser.add_argument(
     "--weight", "-w", dest="weight",
     help="weight metric to calculate the path")
+parser.add_argument(
+    "--match", "-m", dest="match",
+    help="string holding extra matches for the flow entries")
 
 def main(argv):
     args = vars(parser.parse_args(argv))
diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py
index ac44d57..ec42b66 100755
--- a/src/emuvim/dcemulator/net.py
+++ b/src/emuvim/dcemulator/net.py
@@ -221,7 +221,8 @@
         CLI(self)
 
     # to remove chain do setChain( src, dst, cmd='del-flows')
-    def setChain(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None, cmd='add-flow', weight=None):
+    def setChain(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None, cmd='add-flow',
+                 weight=None, **kwargs):
 
         logging.info('vnf_src_if: {0}'.format(vnf_src_interface))
         #check if port is specified (vnf:port)
@@ -306,6 +307,12 @@
             # TODO need multiple matches to do this (VLAN tags)
             if isinstance( current_node, OVSSwitch ):
                 match = 'in_port=%s' % switch_inport_nr
+                #add additional match entries from the argument
+                match_input = kwargs.get('match')
+                logging.info('match input:{0}'.format(match_input))
+                if match_input:
+                    s = ','
+                    match = s.join([match,match_input])
 
                 if cmd=='add-flow':
                     action = 'action=%s' % switch_outport_nr
