diff --git a/src/emuvim/api/rest/monitor.py b/src/emuvim/api/rest/monitor.py
index 379c8d5..74f7acf 100755
--- a/src/emuvim/api/rest/monitor.py
+++ b/src/emuvim/api/rest/monitor.py
@@ -33,7 +33,7 @@
 """
 
 import logging
-from flask_restful import Resource
+from flask_restful import Resource, reqparse
 from flask import request
 import json
 
@@ -55,8 +55,17 @@
     """
     global net
 
-    def put(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=None):
+    def put(self):
         logging.debug("REST CALL: start monitor VNF interface")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        vnf_interface = data.get("vnf_interface", None)
+        metric = data.get("metric", 'tx_packets')
+        cookie = data.get("cookie")
+
         try:
             if cookie:
                 c = net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
@@ -68,8 +77,17 @@
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def delete(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=None):
+    def delete(self):
         logging.debug("REST CALL: stop monitor VNF interface")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        vnf_interface = data.get("vnf_interface", None)
+        metric = data.get("metric", 'tx_packets')
+        cookie = data.get("cookie")
+
         try:
             if cookie:
                 c = net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
@@ -93,8 +111,17 @@
     """
     global net
 
-    def put(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=0):
+    def put(self):
         logging.debug("REST CALL: start monitor VNF interface")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        vnf_interface = data.get("vnf_interface", None)
+        metric = data.get("metric", 'tx_packets')
+        cookie = data.get("cookie", 0)
+
         try:
             c = net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
             # return monitor message response
@@ -103,8 +130,17 @@
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def delete(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=0):
+    def delete(self):
         logging.debug("REST CALL: stop monitor VNF interface")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        vnf_interface = data.get("vnf_interface", None)
+        metric = data.get("metric", 'tx_packets')
+        cookie = data.get("cookie", 0)
+
         try:
             c = net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
             # return monitor message response
@@ -138,37 +174,40 @@
     # the global net is set from the topology file, and connected via connectDCNetwork function in rest_api_endpoint.py
     global net
 
-    def put(self, vnf_src_name, vnf_dst_name):
+    def put(self):
         logging.debug("REST CALL: monitor link flow add")
 
         try:
             command = 'add-flow'
-            return self._MonitorLinkAction(vnf_src_name, vnf_dst_name, command=command)
+            return self._MonitorLinkAction(command=command)
         except Exception as ex:
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def delete(self, vnf_src_name, vnf_dst_name):
+    def delete(self):
         logging.debug("REST CALL: monitor link flow remove")
 
         try:
             command = 'del-flows'
-            return self._MonitorLinkAction(vnf_src_name, vnf_dst_name, command=command)
+            return self._MonitorLinkAction(command=command)
         except Exception as ex:
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def _MonitorLinkAction(self, vnf_src_name, vnf_dst_name, command=None):
+    def _MonitorLinkAction(self, command=None):
         # call DCNetwork method, not really datacenter specific API for now...
         # no check if vnfs are really connected to this datacenter...
+
         try:
-            # check if json data is a dict
-            data = request.json
+            # get URL parameters
+            data = request.args
+            #then no data
             if data is None:
                 data = {}
-            elif type(data) is not dict:
-                data = json.loads(request.json)
 
+
+            vnf_src_name = data.get("vnf_src_name")
+            vnf_dst_name = data.get("vnf_dst_name")
             vnf_src_interface = data.get("vnf_src_interface")
             vnf_dst_interface = data.get("vnf_dst_interface")
             weight = data.get("weight")
@@ -225,8 +264,14 @@
     """
     global net
 
-    def put(self, vnf_name, resource_name='cpu'):
+    def put(self):
         logging.debug("REST CALL: start monitor skewness")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        resource_name = data.get("resource_name", 'cpu')
         try:
             # configure skewmon
             c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='start')
@@ -237,8 +282,14 @@
             logging.exception("API error.")
             return ex.message, 500
 
-    def delete(self, vnf_name, resource_name='cpu'):
+    def delete(self):
         logging.debug("REST CALL: stop monitor skewness")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        resource_name = data.get("resource_name", 'cpu')
         try:
             # configure skewmon
             c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='stop')
diff --git a/src/emuvim/api/rest/network.py b/src/emuvim/api/rest/network.py
index 10baa8f..e766e62 100755
--- a/src/emuvim/api/rest/network.py
+++ b/src/emuvim/api/rest/network.py
@@ -65,27 +65,33 @@
 
     global net
 
-    def put(self, vnf_src_name, vnf_dst_name):
+    def put(self):
         logging.debug("REST CALL: network chain add")
         command = 'add-flow'
-        return self._NetworkAction(vnf_src_name, vnf_dst_name, command=command)
+        return self._NetworkAction(command=command)
 
-    def delete(self, vnf_src_name, vnf_dst_name):
+    def delete(self):
         logging.debug("REST CALL: network chain remove")
         command = 'del-flows'
-        return self._NetworkAction(vnf_src_name, vnf_dst_name, command=command)
+        return self._NetworkAction(command=command)
 
-    def _NetworkAction(self, vnf_src_name, vnf_dst_name, command=None):
+    def _NetworkAction(self, command=None):
         # call DCNetwork method, not really datacenter specific API for now...
         # no check if vnfs are really connected to this datacenter...
         try:
             # check if json data is a dict
-            data = request.json
+            data = request.args
+            # try json payload
+            if data is None:
+                data = request.json
+            # then no data
             if data is None:
                 data = {}
             elif type(data) is not dict:
                 data = json.loads(request.json)
 
+            vnf_src_name = data.get("vnf_src_name")
+            vnf_dst_name = data.get("vnf_dst_name")
             vnf_src_interface = data.get("vnf_src_interface")
             vnf_dst_interface = data.get("vnf_dst_interface")
             weight = data.get("weight")
diff --git a/src/emuvim/api/rest/rest_api_endpoint.py b/src/emuvim/api/rest/rest_api_endpoint.py
index 7168f37..afa4f5c 100755
--- a/src/emuvim/api/rest/rest_api_endpoint.py
+++ b/src/emuvim/api/rest/rest_api_endpoint.py
@@ -75,23 +75,20 @@
 
         # network related actions (setup chaining between VNFs)
         self.api.add_resource(NetworkAction,
-                              "/restapi/network/<vnf_src_name>/<vnf_dst_name>")
+                              "/restapi/network")
 
 
         # monitoring related actions
         # export a network interface traffic rate counter
         self.api.add_resource(MonitorInterfaceAction,
-                              "/restapi/monitor/interface/<vnf_name>/<metric>",
-                              "/restapi/monitor/interface/<vnf_name>/<vnf_interface>/<metric>",
-                              "/restapi/monitor/interface/<vnf_name>/<vnf_interface>/<metric>/<cookie>")
+                              "/restapi/monitor/interface")
         # export flow traffic counter, of a manually pre-installed flow entry, specified by its cookie
         self.api.add_resource(MonitorFlowAction,
-                              "/restapi/monitor/flow/<vnf_name>/<metric>/<cookie>",
-                              "/restapi/monitor/flow/<vnf_name>/<vnf_interface>/<metric>/<cookie>")
+                              "/restapi/monitor/flow")
         # install monitoring of a specific flow on a pre-existing link in the service.
         # the traffic counters of the newly installed monitor flow are exported
         self.api.add_resource(MonitorLinkAction,
-                              "/restapi/monitor/link/<vnf_src_name>/<vnf_dst_name>")
+                              "/restapi/monitor/link")
         # install skewness monitor of resource usage disribution
         # the skewness metric is exported
         self.api.add_resource(MonitorSkewAction,
diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py
index 1a8d938..af6fbad 100755
--- a/src/emuvim/dcemulator/net.py
+++ b/src/emuvim/dcemulator/net.py
@@ -456,6 +456,7 @@
                 kwargs['switch_inport_name'] = src_sw_inport_name
                 kwargs['switch_outport_name'] = dst_sw_outport_name
                 kwargs['skip_vlan_tag'] = True
+                kwargs['pathindex'] = i
 
                 monitor_placement = kwargs.get('monitor_placement').strip()
                 # put monitor flow at the dst switch
@@ -500,12 +501,10 @@
         :param cookie: cookie for the installed flowrules (can be used later as identifier for a set of installed chains)
         :param match: custom match entry to be added to the flowrules (default: only in_port and vlan tag)
         :param priority: custom flowrule priority
-<<<<<<< HEAD
         :param monitor: boolean to indicate whether this chain is a monitoring chain
         :param tag: vlan tag to be used for this chain (pre-defined or new one if none is specified)
-=======
+        :param skip_vlan_tag: boolean to indicate if a vlan tag should be appointed to this flow or not
         :param path: custom path between the two VNFs (list of switches)
->>>>>>> upstream/master
         :return: output log string
         """
 
@@ -617,7 +616,6 @@
         switch_inport_nr = src_sw_inport_nr
 
         # choose free vlan
-        ## if path contains more than 1 switch
         cmd = kwargs.get('cmd')
         vlan = None
         if cmd == 'add-flow':
@@ -661,7 +659,7 @@
                 switch_outport_nr = self.DCNetwork_graph[current_hop][next_hop][index_edge_out]['src_port_nr']
 
 
-           # set of entry via ovs-ofctl
+           # set OpenFlow entry
             if isinstance( current_node, OVSSwitch ):
                 kwargs['vlan'] = vlan
                 kwargs['path'] = path
diff --git a/utils/docker/Dockerfile b/utils/docker/Dockerfile
new file mode 100755
index 0000000..64bd790
--- /dev/null
+++ b/utils/docker/Dockerfile
@@ -0,0 +1,55 @@
+# Copyright (c) 2015 SONATA-NFV and Paderborn University
+# ALL RIGHTS RESERVED.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Neither the name of the SONATA-NFV [, ANY ADDITIONAL AFFILIATION]
+# nor the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# This work has been performed in the framework of the SONATA project,
+# funded by the European Commission under Grant number 671517 through
+# the Horizon 2020 and 5G-PPP programmes. The authors would like to
+# acknowledge the contributions of their colleagues of the SONATA
+# partner consortium (www.sonata-nfv.eu).
+
+FROM ubuntu:14.04
+MAINTAINER steven.vanrossem@intec.ugent.be
+
+ENV SON_EMU_IN_DOCKER 1
+
+RUN apt-get update \
+    && apt-get install -y  ansible git aptitude
+
+
+# install containernet
+WORKDIR /
+RUN git clone https://github.com/containernet/containernet.git
+WORKDIR containernet/ansible
+RUN echo 'localhost ansible_connection=local' >> /etc/ansible/hosts
+RUN ansible-playbook install.yml
+
+# install son-emu
+WORKDIR /
+RUN git clone https://github.com/sonata-nfv/son-emu.git
+WORKDIR /son-emu/ansible
+RUN ansible-playbook install.yml
+
+RUN echo 'Done'
+
+
+ENTRYPOINT ["/son-emu/utils/docker/entrypoint.sh"]
+
+# dummy GK, cAdvisor, Prometheus Push Gateway, son-emu REST API
+EXPOSE 5000 8081 9091 5001
diff --git a/utils/docker/README.md b/utils/docker/README.md
new file mode 100644
index 0000000..1146367
--- /dev/null
+++ b/utils/docker/README.md
@@ -0,0 +1,6 @@
+# Docker build scripts for son-emu
+
+This directory holds the Dockerfile to build son-emu as a docker container.
+This is an easy way to deploy son-emu.
+The docker container can be pulled from sonatanfv on Docker Hub.
+`docker pull sonatanfv/son-emu`
\ No newline at end of file
diff --git a/utils/docker/entrypoint.sh b/utils/docker/entrypoint.sh
new file mode 100644
index 0000000..c67e276
--- /dev/null
+++ b/utils/docker/entrypoint.sh
@@ -0,0 +1,12 @@
+#! /bin/bash -e
+set -x
+
+#cp /containernet/util/docker/entrypoint.sh /tmp/x.sh
+#cat /tmp/x.sh | awk 'NR==1{print; print "set -x"} NR!=1' > /conteinernet/util/docker/entrypoint.sh
+
+# this cannot be done from the Dockerfile since we have the socket not mounted during build
+# this image is needed for the monitoring in son-emu
+#echo 'Pulling the "google/cadvisor" image ... please wait'
+#docker pull 'google/cadvisor'
+
+exec /containernet/util/docker/entrypoint.sh $*
\ No newline at end of file
