diff --git a/README.md b/README.md
index 6c37a68..a6b1de5 100755
--- a/README.md
+++ b/README.md
@@ -55,7 +55,6 @@
 * [flask_restful](https://pypi.python.org/pypi/Flask-RESTful) >= 0.3 (BSD)
 * [networkx](https://pypi.python.org/pypi/networkx/) >= 1.11  (BSD)
 * [oslo.config](http://docs.openstack.org/developer/oslo.config/) >= 3.9.0  (Apache 2.0)
-* [paramiko](https://pypi.python.org/pypi/paramiko/1.16.0) >= 1.6 (LGPL)
 * [prometheus_client](https://pypi.python.org/pypi/prometheus_client) >= 0.0.13 (Apache 2.0)
 * [pyaml](https://pypi.python.org/pypi/pyaml) >=15.8.2 (WTFPL)
 * [pytest-runner](https://pypi.python.org/pypi/pytest-runner) >= 2.8 (MIT)
diff --git a/ansible/install.yml b/ansible/install.yml
index 7fed451..fd3aa4b 100755
--- a/ansible/install.yml
+++ b/ansible/install.yml
@@ -63,9 +63,6 @@
    - name: install prometheus_client
      pip: name=prometheus_client state=latest
 
-   - name: install paramiko
-     pip: name=paramiko state=latest
-
    - name: install latest urllib3 (fix error urllib3.connection.match_hostname = match_hostname)
      pip: name=urllib3 state=latest
 
diff --git a/misc/sonata-demo-docker.son b/misc/sonata-demo-docker.son
old mode 100644
new mode 100755
Binary files differ
diff --git a/setup.py b/setup.py
index b8fad8a..d23ea68 100755
--- a/setup.py
+++ b/setup.py
@@ -51,7 +51,6 @@
           'docker-py==1.7.1',
           'requests',
           'prometheus_client',
-          'paramiko',
           'urllib3'
       ],
       zip_safe=False,
diff --git a/src/emuvim/api/rest/compute.py b/src/emuvim/api/rest/compute.py
index b935af8..e412133 100755
--- a/src/emuvim/api/rest/compute.py
+++ b/src/emuvim/api/rest/compute.py
@@ -50,18 +50,44 @@
     def put(self, dc_label, compute_name):
         logging.debug("API CALL: compute start")
         try:
+            #check if json data is a dict
+            data = request.json
+            if data is None:
+                data = {}
+            elif type(data) is not dict:
+                data = json.loads(request.json)
 
-            image = json.loads(request.json).get("image")
-            network = json.loads(request.json).get("network")
-            command = json.loads(request.json).get("docker_command")
+            network = data.get("network")
+            nw_list = self._parse_network(network)
+            image = data.get("image")
+            command = data.get("docker_command")
+
             c = dcs.get(dc_label).startCompute(
-                compute_name, image= image, command= command, network= network)
+                compute_name, image= image, command= command, network= nw_list)
             # return docker inspect dict
             return c.getStatus(), 200
         except Exception as ex:
             logging.exception("API error.")
             return ex.message, 500
 
+    def _parse_network(self, network_str):
+        '''
+        parse the options for all network interfaces of the vnf
+        :param network_str: (id=x,ip=x.x.x.x/x), ...
+        :return: list of dicts [{"id":x,"ip":"x.x.x.x/x"}, ...]
+        '''
+        nw_list = list()
+
+        if network_str is None or '),(' not in network_str :
+            return nw_list
+
+        networks = network_str[1:-1].split('),(')
+        for nw in networks:
+            nw_dict = dict(tuple(e.split('=')) for e in nw.split(','))
+            nw_list.append(nw_dict)
+
+        return nw_list
+
 class ComputeStop(Resource):
 
     global dcs
@@ -134,3 +160,5 @@
         except Exception as ex:
             logging.exception("API error.")
             return ex.message, 500
+
+
diff --git a/src/emuvim/api/rest/monitor.py b/src/emuvim/api/rest/monitor.py
index 827843b..15ec014 100755
--- a/src/emuvim/api/rest/monitor.py
+++ b/src/emuvim/api/rest/monitor.py
@@ -25,6 +25,13 @@
 acknowledge the contributions of their colleagues of the SONATA
 partner consortium (www.sonata-nfv.eu).
 """
+
+"""
+Distributed Cloud Emulator (dcemulator)
+Networking and monitoring functions
+(c) 2015 by Steven Van Rossem <steven.vanrossem@intec.ugent.be>
+"""
+
 import logging
 from flask_restful import Resource
 from flask import request
diff --git a/src/emuvim/api/rest/network.py b/src/emuvim/api/rest/network.py
index eb31c3c..3c0062e 100755
--- a/src/emuvim/api/rest/network.py
+++ b/src/emuvim/api/rest/network.py
@@ -25,6 +25,13 @@
 acknowledge the contributions of their colleagues of the SONATA
 partner consortium (www.sonata-nfv.eu).
 """
+
+"""
+Distributed Cloud Emulator (dcemulator)
+Networking and monitoring functions
+(c) 2015 by Steven Van Rossem <steven.vanrossem@intec.ugent.be>
+"""
+
 import logging
 from flask_restful import Resource
 from flask import request
@@ -65,12 +72,19 @@
         # call DCNetwork method, not really datacenter specific API for now...
         # no check if vnfs are really connected to this datacenter...
         try:
-            vnf_src_interface = json.loads(request.json).get("vnf_src_interface")
-            vnf_dst_interface = json.loads(request.json).get("vnf_dst_interface")
-            weight = json.loads(request.json).get("weight")
-            match = json.loads(request.json).get("match")
-            bidirectional = json.loads(request.json).get("bidirectional")
-            cookie = json.loads(request.json).get("cookie")
+            # check if json data is a dict
+            data = request.json
+            if data is None:
+                data = {}
+            elif type(data) is not dict:
+                data = json.loads(request.json)
+
+            vnf_src_interface = data.get("vnf_src_interface")
+            vnf_dst_interface = data.get("vnf_dst_interface")
+            weight = data.get("weight")
+            match = data.get("match")
+            bidirectional = data.get("bidirectional")
+            cookie = data.get("cookie")
             c = net.setChain(
                 vnf_src_name, vnf_dst_name,
                 vnf_src_interface=vnf_src_interface,
diff --git a/src/emuvim/api/zerorpc/compute.py b/src/emuvim/api/zerorpc/compute.py
index 5e5d0de..b612e87 100755
--- a/src/emuvim/api/zerorpc/compute.py
+++ b/src/emuvim/api/zerorpc/compute.py
@@ -34,11 +34,6 @@
 import threading
 import zerorpc
 
-import paramiko
-import ipaddress
-import time
-import gevent
-
 logging.basicConfig(level=logging.INFO)
 
 
@@ -145,108 +140,6 @@
             logging.exception("RPC error.")
             return ex.message
 
-    @zerorpc.stream
-    def compute_profile(self, dc_label, compute_name, kwargs):
-        # note: zerorpc does not support keyword arguments
-
-        ## VIM/dummy gatekeeper's tasks:
-        # start vnf
-        vnf_status = self.compute_action_start( dc_label, compute_name,
-                                  kwargs.get('image'),
-                                  kwargs.get('network'),
-                                  kwargs.get('command'))
-        # start traffic source (with fixed ip addres, no use for now...)
-        psrc_status = self.compute_action_start( dc_label, 'psrc', 'profile_source', [{'id':'output'}], None)
-        # start traffic sink (with fixed ip addres)
-        psink_status = self.compute_action_start(dc_label, 'psink', 'profile_sink', [{'id': 'input'}], None)
-        # link vnf to traffic source
-        DCNetwork = self.dcs.get(dc_label).net
-        DCNetwork.setChain('psrc', compute_name,
-                           vnf_src_interface='output',
-                           vnf_dst_interface=kwargs.get('input'),
-                           cmd='add-flow', weight=None, bidirectional=True)
-        DCNetwork.setChain('psrc', compute_name,
-                           vnf_src_interface='output',
-                           vnf_dst_interface=kwargs.get('input'),
-                           cmd='add-flow', weight=None,
-                           match='dl_type=0x0800,nw_proto=17,udp_dst=5001',
-                           cookie=10)
-        DCNetwork.setChain( compute_name, 'psink',
-                           vnf_src_interface='output',
-                           vnf_dst_interface=kwargs.get('input'),
-                           cmd='add-flow', weight=None, bidirectional=True)
-        DCNetwork.setChain(compute_name, 'psink',
-                       vnf_src_interface='output',
-                       vnf_dst_interface=kwargs.get('input'),
-                       cmd='add-flow', weight=None,
-                       match='dl_type=0x0800,nw_proto=17,udp_dst=5001',
-                       cookie=11)
-
-        ## SSM/SP tasks:
-        # start traffic generation
-        '''
-        for nw in psrc_status.get('network'):
-            if nw.get('intf_name') == 'output':
-                psrc_output_ip = unicode(nw['ip'])
-                break
-        dummy_iperf_server_ip = ipaddress.IPv4Address(psrc_output_ip) + 1
-        '''
-        for nw in psink_status.get('network'):
-            if nw.get('intf_name') == 'input':
-                psink_input_ip = nw['ip']
-                break
-
-
-        # get monitor data and analyze
-        vnf_uuid = vnf_status['id']
-        psrc_mgmt_ip = psrc_status['docker_network']
-
-        # query rate
-
-        #need to wait a bit before containers are fully up?
-        time.sleep(2)
-
-        def generate():
-            for rate in [0, 1, 2, 3]:
-                #logging.info('query:{0}'.format(query_cpu))
-
-                output_line = DCNetwork.monitor_agent.profile(psrc_mgmt_ip, rate, psink_input_ip, vnf_uuid)
-                gevent.sleep(0)
-                yield output_line
-
-            # query loss
-
-
-            # create table
-
-            ## VIM/dummy gatekeeper's tasks:
-            # remove vnfs and chain
-            DCNetwork.setChain('psrc', compute_name,
-                               vnf_src_interface='output',
-                               vnf_dst_interface=kwargs.get('input'),
-                               cmd='del-flows', weight=None, bidirectional=True)
-            DCNetwork.setChain('psrc', compute_name,
-                               vnf_src_interface='output',
-                               vnf_dst_interface=kwargs.get('input'),
-                               cmd='del-flows', weight=None,
-                               match='dl_type=0x0800,nw_proto=17,udp_dst=5001',
-                               cookie=10)
-            DCNetwork.setChain(compute_name, 'psink',
-                               vnf_src_interface='output',
-                               vnf_dst_interface=kwargs.get('input'),
-                               cmd='del-flows', weight=None, bidirectional=True)
-            DCNetwork.setChain(compute_name, 'psink',
-                               vnf_src_interface='output',
-                               vnf_dst_interface=kwargs.get('input'),
-                               cmd='del-flows', weight=None,
-                               match='dl_type=0x0800,nw_proto=17,udp_dst=5001',
-                               cookie=11)
-            self.compute_action_stop(dc_label, compute_name)
-            self.compute_action_stop(dc_label, 'psink')
-            self.compute_action_stop(dc_label, 'psrc')
-
-        return generate()
-
     def datacenter_list(self):
         logging.debug("RPC CALL: datacenter list")
         try:
diff --git a/src/emuvim/api/zerorpc/network.py b/src/emuvim/api/zerorpc/network.py
index 92cded5..7658be2 100755
--- a/src/emuvim/api/zerorpc/network.py
+++ b/src/emuvim/api/zerorpc/network.py
@@ -27,6 +27,8 @@
 """
 """
 Distributed Cloud Emulator (dcemulator)
+Networking and monitoring functions
+(c) 2015 by Steven Van Rossem <steven.vanrossem@intec.ugent.be>
 """
 
 import logging
diff --git a/src/emuvim/cli/compute.py b/src/emuvim/cli/compute.py
index 25ac247..b5f775f 100755
--- a/src/emuvim/cli/compute.py
+++ b/src/emuvim/cli/compute.py
@@ -101,27 +101,6 @@
             args.get("datacenter"), args.get("name"))
         pp.pprint(r)
 
-    def profile(self, args):
-        nw_list = list()
-        if args.get("network") is not None:
-            nw_list = self._parse_network(args.get("network"))
-
-        params = self._create_dict(
-            network=nw_list,
-            command=args.get("docker_command"),
-            image=args.get("image"),
-            input=args.get("input"),
-            output=args.get("output"))
-
-        for output in self.c.compute_profile(
-            args.get("datacenter"),
-            args.get("name"),
-            params):
-            print(output + '\n')
-
-        #pp.pprint(r)
-        #print(r)
-
     def _create_dict(self, **kwargs):
         return kwargs
 
@@ -144,7 +123,7 @@
 parser = argparse.ArgumentParser(description='son-emu compute')
 parser.add_argument(
     "command",
-    choices=['start', 'stop', 'list', 'status', 'profile'],
+    choices=['start', 'stop', 'list', 'status'],
     help="Action to be executed.")
 parser.add_argument(
     "--datacenter", "-d", dest="datacenter",
@@ -162,13 +141,6 @@
     "--net", dest="network",
     help="Network properties of a compute instance e.g. \
           '(id=input,ip=10.0.10.3/24),(id=output,ip=10.0.10.4/24)' for multiple interfaces.")
-parser.add_argument(
-    "--input", "-in", dest="input",
-    help="input interface of the vnf to profile")
-parser.add_argument(
-    "--output", "-out", dest="output",
-    help="output interface of the vnf to profile")
-
 
 def main(argv):
     args = vars(parser.parse_args(argv))
diff --git a/src/emuvim/cli/monitor.py b/src/emuvim/cli/monitor.py
index 9620a98..3e872d6 100755
--- a/src/emuvim/cli/monitor.py
+++ b/src/emuvim/cli/monitor.py
@@ -93,17 +93,9 @@
             args.get("cookie"))
         pp.pprint(r)
 
-    def prometheus_zrpc(self, args):
-        vnf_name = self._parse_vnf_name(args.get("vnf_name"))
-        vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))
-        r = self.c.prometheus(
-            args.get("datacenter"),
-            vnf_name,
-            vnf_interface,
-            args.get("query"))
-        pp.pprint(r)
-
     def prometheus(self, args):
+        # This functions makes it more user-friendly to create the correct prometheus query
+        # <uuid> is replaced by the correct uuid of the deployed vnf container
         vnf_name = self._parse_vnf_name(args.get("vnf_name"))
         vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))
         dc_label = args.get("datacenter")
diff --git a/src/emuvim/cli/prometheus.py b/src/emuvim/cli/prometheus.py
index 4572449..58969d1 100755
--- a/src/emuvim/cli/prometheus.py
+++ b/src/emuvim/cli/prometheus.py
@@ -26,14 +26,16 @@
 partner consortium (www.sonata-nfv.eu).
 """
 
-#import urllib2
+
 import requests
-#import ast
+
 
 # set this to localhost for now
 # this is correct for son-emu started outside of a container or as a container with net=host
-#TODO prometheus sdk DB is started outside of emulator, place these globals in an external SDK config file?
-prometheus_ip = '127.0.0.1'
+#TODO if prometheus sdk DB is started outside of emulator, place these globals in an external SDK config file?
+prometheus_ip = 'localhost'
+# when sdk is started with docker-compose, we could use
+# prometheus_ip = 'prometheus'
 prometheus_port = '9090'
 prometheus_REST_api = 'http://{0}:{1}'.format(prometheus_ip, prometheus_port)
 
@@ -41,10 +43,7 @@
 def query_Prometheus(query):
     url = prometheus_REST_api + '/' + 'api/v1/query?query=' + query
     # logging.info('query:{0}'.format(url))
-    #req = urllib2.Request(url)
     req = requests.get(url)
-    #ret = urllib2.urlopen(req).read()
-    #ret = ast.literal_eval(ret)
     ret = req.json()
     if ret['status'] == 'success':
         # logging.info('return:{0}'.format(ret))
diff --git a/src/emuvim/cli/rest/compute.py b/src/emuvim/cli/rest/compute.py
index 2a055a3..3a719cc 100755
--- a/src/emuvim/cli/rest/compute.py
+++ b/src/emuvim/cli/rest/compute.py
@@ -47,18 +47,16 @@
 
     def start(self, args):
 
-        nw_list = list()
-        if args.get("network") is not None:
-            nw_list = self._parse_network(args.get("network"))
         req = {'image':args.get("image"),
                'command':args.get("docker_command"),
-               'network':nw_list}
+               'network':args.get("network")}
 
         response = put("%s/restapi/compute/%s/%s/start" %
                        (args.get("endpoint"),
                         args.get("datacenter"),
                         args.get("name")),
-                       json = json.dumps(req))
+                        json = req)
+
         pp.pprint(response.json())
 
     def stop(self, args):
@@ -109,22 +107,6 @@
         pp.pprint(list)
 
 
-
-    def _parse_network(self, network_str):
-        '''
-        parse the options for all network interfaces of the vnf
-        :param network_str: (id=x,ip=x.x.x.x/x), ...
-        :return: list of dicts [{"id":x,"ip":"x.x.x.x/x"}, ...]
-        '''
-        nw_list = list()
-        networks = network_str[1:-1].split('),(')
-        for nw in networks:
-            nw_dict = dict(tuple(e.split('=')) for e in nw.split(','))
-            nw_list.append(nw_dict)
-
-        return nw_list
-
-
 parser = argparse.ArgumentParser(description='son-emu datacenter')
 parser.add_argument(
     "command",
diff --git a/src/emuvim/cli/rest/monitor.py b/src/emuvim/cli/rest/monitor.py
index 88db8b2..7e9b839 100755
--- a/src/emuvim/cli/rest/monitor.py
+++ b/src/emuvim/cli/rest/monitor.py
@@ -94,6 +94,23 @@
 
         pp.pprint(response.json())
 
+    def prometheus(self, args):
+        # This functions makes it more user-friendly to create the correct prometheus query
+        # <uuid> is replaced by the correct uuid of the deployed vnf container
+        vnf_name = self._parse_vnf_name(args.get("vnf_name"))
+        vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))
+        dc_label = args.get("datacenter")
+        query = args.get("query")
+        vnf_status = get("%s/restapi/compute/%s/%s" %
+            (args.get("endpoint"),
+             args.get("datacenter"),
+             vnf_name)).json()
+        uuid = vnf_status['id']
+        query = query.replace('<uuid>', uuid)
+
+        response = prometheus.query_Prometheus(query)
+        pp.pprint(response)
+
     def _parse_vnf_name(self, vnf_name_str):
         vnf_name = vnf_name_str.split(':')[0]
         return vnf_name
diff --git a/src/emuvim/cli/rest/network.py b/src/emuvim/cli/rest/network.py
index c87a924..c6e1dcc 100755
--- a/src/emuvim/cli/rest/network.py
+++ b/src/emuvim/cli/rest/network.py
@@ -61,7 +61,7 @@
                        (args.get("endpoint"),
                         vnf_src_name,
                         vnf_dst_name),
-                       json=json.dumps(params))
+                       json=params)
         pp.pprint(response.json())
 
     def remove(self, args):
@@ -80,7 +80,7 @@
                        (args.get("endpoint"),
                         vnf_src_name,
                         vnf_dst_name),
-                       json=json.dumps(params))
+                       json=params)
         pp.pprint(response.json())
 
     def _parse_vnf_name(self, vnf_name_str):
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index ad3b112..89d82ba 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -26,7 +26,6 @@
 partner consortium (www.sonata-nfv.eu).
 """
 
-import urllib2
 import logging
 from mininet.node import  OVSSwitch
 import ast
@@ -34,11 +33,9 @@
 from prometheus_client import start_http_server, Summary, Histogram, Gauge, Counter, REGISTRY, CollectorRegistry, \
     pushadd_to_gateway, push_to_gateway, delete_from_gateway
 import threading
-from subprocess import Popen, PIPE
+from subprocess import Popen
 import os
 
-import paramiko
-import gevent
 
 logging.basicConfig(level=logging.INFO)
 
@@ -50,16 +47,22 @@
     def __init__(self, net):
         self.net = net
 
+        # TODO: these global variables should be part of a config file?
+        '''
+        # prometheus is started outside of son-emu
         prometheus_ip = '127.0.0.1'
         prometheus_port = '9090'
         self.prometheus_REST_api = 'http://{0}:{1}'.format(prometheus_ip, prometheus_port)
-
-
-
+        '''
         # helper variables to calculate the metrics
+        # pushgateway is started outside of son-emu and son-emu is started with net=host
+        # so localhost:9091 works
         self.pushgateway = 'localhost:9091'
-        # Start up the server to expose the metrics to Prometheus.
+        # when sdk is started with docker-compose, we could use
+        # self.pushgateway = 'pushgateway:9091'
+        # Start up the server to expose the metrics to Prometheus
         #start_http_server(8000)
+
         # supported Prometheus metrics
         self.registry = CollectorRegistry()
         self.prom_tx_packet_count = Gauge('sonemu_tx_count_packets', 'Total number of packets sent',
@@ -101,6 +104,7 @@
         self.monitor_flow_thread.start()
 
         # helper tools
+        # Prometheus pushgateway and DB are started as external contianer, outside of son-emu
         #self.pushgateway_process = self.start_PushGateway()
         #self.prometheus_process = self.start_Prometheus()
         self.cadvisor_process = self.start_cadvisor()
@@ -124,10 +128,8 @@
         for connected_sw in self.net.DCNetwork_graph.neighbors(vnf_name):
             link_dict = self.net.DCNetwork_graph[vnf_name][connected_sw]
             for link in link_dict:
-                # logging.info("{0},{1}".format(link_dict[link],vnf_interface))
                 if link_dict[link]['src_port_id'] == vnf_interface:
                     # found the right link and connected switch
-                    # logging.info("{0},{1}".format(link_dict[link]['src_port_id'], vnf_source_interface))
                     vnf_switch = connected_sw
                     flow_metric['mon_port'] = link_dict[link]['dst_port_nr']
                     break
@@ -176,8 +178,6 @@
 
                 for collector in self.registry._collectors:
                     if (vnf_name, vnf_interface, cookie) in collector._metrics:
-                        #logging.info('2 name:{0} labels:{1} metrics:{2}'.format(collector._name, collector._labelnames,
-                        #                                                        collector._metrics))
                         collector.remove(vnf_name, vnf_interface, cookie)
 
                 delete_from_gateway(self.pushgateway, job='sonemu-SDNcontroller')
@@ -206,10 +206,8 @@
         for connected_sw in self.net.DCNetwork_graph.neighbors(vnf_name):
             link_dict = self.net.DCNetwork_graph[vnf_name][connected_sw]
             for link in link_dict:
-                # logging.info("{0},{1}".format(link_dict[link],vnf_interface))
                 if link_dict[link]['src_port_id'] == vnf_interface:
                     # found the right link and connected switch
-                    # logging.info("{0},{1}".format(link_dict[link]['src_port_id'], vnf_source_interface))
                     network_metric['mon_port'] = link_dict[link]['dst_port_nr']
                     break
 
@@ -261,7 +259,6 @@
     def stop_metric(self, vnf_name, vnf_interface=None, metric=None):
 
         for metric_dict in self.network_metrics:
-            #logging.info('start Stopped monitoring: {2} on {0}:{1}'.format(vnf_name, vnf_interface, metric_dict))
             if metric_dict['vnf_name'] == vnf_name and metric_dict['vnf_interface'] == vnf_interface \
                     and metric_dict['metric_key'] == metric:
 
@@ -274,7 +271,7 @@
                 #self.registry.unregister(self.prom_metrics[metric_dict['metric_key']])
 
                 for collector in self.registry._collectors :
-                    #logging.info('name:{0} labels:{1} metrics:{2}'.format(collector._name, collector._labelnames, collector._metrics))
+
                     """
                     INFO:root:name:sonemu_rx_count_packets
                     labels:('vnf_name', 'vnf_interface')
@@ -284,11 +281,10 @@
                     0x7f353447fd10 >}
                     """
                     logging.info('{0}'.format(collector._metrics.values()))
-                    #if self.prom_metrics[metric_dict['metric_key']]
+
                     if (vnf_name, vnf_interface, 'None') in collector._metrics:
                         logging.info('2 name:{0} labels:{1} metrics:{2}'.format(collector._name, collector._labelnames,
                                                                               collector._metrics))
-                        #collector._metrics = {}
                         collector.remove(vnf_name, vnf_interface, 'None')
 
                 # set values to NaN, prometheus api currently does not support removal of metrics
@@ -345,7 +341,7 @@
                 ret = self.net.ryu_REST('stats/flow', dpid=flow_dict['switch_dpid'], data=data)
                 flow_stat_dict = ast.literal_eval(ret)
 
-                #logging.info('received flow stat:{0} '.format(flow_stat_dict))
+                logging.debug('received flow stat:{0} '.format(flow_stat_dict))
                 self.set_flow_metric(flow_dict, flow_stat_dict)
 
             self.monitor_flow_lock.release()
@@ -368,7 +364,7 @@
 
                 metric_list = [metric_dict for metric_dict in self.network_metrics
                                if int(metric_dict['switch_dpid'])==int(dpid)]
-                #logging.info('1set prom packets:{0} '.format(self.network_metrics))
+
                 for metric_dict in metric_list:
                     self.set_network_metric(metric_dict, port_stat_dict)
 
@@ -390,23 +386,21 @@
             if int(port_stat['port_no']) == int(mon_port):
                 port_uptime = port_stat['duration_sec'] + port_stat['duration_nsec'] * 10 ** (-9)
                 this_measurement = int(port_stat[metric_key])
-                #logging.info('set prom packets:{0} {1}:{2}'.format(this_measurement, vnf_name, vnf_interface))
 
                 # set prometheus metric
                 self.prom_metrics[metric_dict['metric_key']].\
                     labels({'vnf_name': vnf_name, 'vnf_interface': vnf_interface, 'flow_id': None}).\
                     set(this_measurement)
-                #push_to_gateway(self.pushgateway, job='SDNcontroller',
-                #                grouping_key={'metric':metric_dict['metric_key']}, registry=self.registry)
 
                 # 1 single monitor job for all metrics of the SDN controller
                 pushadd_to_gateway(self.pushgateway, job='sonemu-SDNcontroller', registry=self.registry)
 
+                # also the rate is calculated here, but not used for now
+                # (rate can be easily queried from prometheus also)
                 if previous_monitor_time <= 0 or previous_monitor_time >= port_uptime:
                     metric_dict['previous_measurement'] = int(port_stat[metric_key])
                     metric_dict['previous_monitor_time'] = port_uptime
                     # do first measurement
-                    #logging.info('first measurement')
                     time.sleep(1)
                     self.monitor_lock.release()
 
@@ -416,7 +410,6 @@
                 else:
                     time_delta = (port_uptime - metric_dict['previous_monitor_time'])
                     metric_rate = (this_measurement - metric_dict['previous_measurement']) / float(time_delta)
-                    #logging.info('metric: {0} rate:{1}'.format(metric_dict['metric_key'], metric_rate))
 
                 metric_dict['previous_measurement'] = this_measurement
                 metric_dict['previous_monitor_time'] = port_uptime
@@ -427,7 +420,6 @@
 
     def set_flow_metric(self, metric_dict, flow_stat_dict):
         # vnf tx is the datacenter switch rx and vice-versa
-        #metric_key = self.switch_tx_rx(metric_dict['metric_key'])
         metric_key = metric_dict['metric_key']
         switch_dpid = metric_dict['switch_dpid']
         vnf_name = metric_dict['vnf_name']
@@ -450,30 +442,6 @@
             set(counter)
         pushadd_to_gateway(self.pushgateway, job='sonemu-SDNcontroller', registry=self.registry)
 
-        #logging.exception('metric {0} not found on {1}:{2}'.format(metric_key, vnf_name, vnf_interface))
-        #return 'metric {0} not found on {1}:{2}'.format(metric_key, vnf_name, vnf_interface)
-
-    def query_Prometheus(self, query):
-        '''
-        escaped_chars='{}[]'
-        for old in escaped_chars:
-            new = '\{0}'.format(old)
-            query = query.replace(old, new)
-        '''
-        url = self.prometheus_REST_api + '/' + 'api/v1/query?query=' + query
-        #logging.info('query:{0}'.format(url))
-        req = urllib2.Request(url)
-        ret = urllib2.urlopen(req).read()
-        ret = ast.literal_eval(ret)
-        if ret['status'] == 'success':
-            #logging.info('return:{0}'.format(ret))
-            try:
-                ret = ret['data']['result'][0]['value']
-            except:
-                ret = None
-        else:
-            ret = None
-        return ret
 
     def start_Prometheus(self, port=9090):
         # prometheus.yml configuration file is located in the same directory as this file
@@ -563,33 +531,3 @@
                name]
         Popen(cmd).wait()
 
-    def profile(self, mgmt_ip, rate, input_ip, vnf_uuid ):
-
-        ssh = paramiko.SSHClient()
-        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-        #ssh.connect(mgmt_ip, username='steven', password='test')
-        ssh.connect(mgmt_ip, username='root', password='root')
-
-        iperf_cmd = 'iperf -c {0} -u -l18 -b{1}M -t1000 &'.format(input_ip, rate)
-        if rate > 0:
-            stdin, stdout, stderr = ssh.exec_command(iperf_cmd)
-
-        start_time = time.time()
-        query_cpu = '(sum(rate(container_cpu_usage_seconds_total{{id="/docker/{0}"}}[{1}s])))'.format(vnf_uuid, 1)
-        while (time.time() - start_time) < 15:
-            data = self.query_Prometheus(query_cpu)
-            # logging.info('rate: {1} data:{0}'.format(data, rate))
-            gevent.sleep(0)
-            time.sleep(1)
-
-        query_cpu2 = '(sum(rate(container_cpu_usage_seconds_total{{id="/docker/{0}"}}[{1}s])))'.format(vnf_uuid, 8)
-        cpu_load = float(self.query_Prometheus(query_cpu2)[1])
-        output = 'rate: {1}Mbps; cpu_load: {0}%'.format(round(cpu_load * 100, 2), rate)
-        output_line = output
-        logging.info(output_line)
-
-        stop_iperf = 'pkill -9 iperf'
-        stdin, stdout, stderr = ssh.exec_command(stop_iperf)
-
-        return output_line
-
diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py
index b201112..0e3882c 100755
--- a/src/emuvim/dcemulator/net.py
+++ b/src/emuvim/dcemulator/net.py
@@ -261,7 +261,7 @@
             if kwargs.get('bidirectional'):
                 ret = ret +'\n' + self._chainAddFlow(vnf_dst_name, vnf_src_name, vnf_dst_interface, vnf_src_interface, **kwargs)
 
-        elif cmd == 'del-flows':  # TODO: del-flow to be implemented
+        elif cmd == 'del-flows':
             ret = self._chainAddFlow(vnf_src_name, vnf_dst_name, vnf_src_interface, vnf_dst_interface, **kwargs)
             if kwargs.get('bidirectional'):
                 ret = ret + '\n' + self._chainAddFlow(vnf_dst_name, vnf_src_name, vnf_dst_interface, vnf_src_interface, **kwargs)
@@ -274,7 +274,6 @@
 
     def _chainAddFlow(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None, **kwargs):
 
-        # TODO: this needs to be cleaned up
         #check if port is specified (vnf:port)
         if vnf_src_interface is None:
             # take first interface by default
diff --git a/utils/vagrant/motd b/utils/vagrant/motd
old mode 100644
new mode 100755
