diff --git a/README.md b/README.md
index da7e87e..963aec1 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/misc/vnfs/firewall/Dockerfile b/misc/vnfs/firewall/Dockerfile
old mode 100644
new mode 100755
diff --git a/misc/vnfs/firewall/start.sh b/misc/vnfs/firewall/start.sh
old mode 100644
new mode 100755
diff --git a/misc/vnfs/iperf/Dockerfile b/misc/vnfs/iperf/Dockerfile
old mode 100644
new mode 100755
diff --git a/misc/vnfs/iperf/start.sh b/misc/vnfs/iperf/start.sh
old mode 100644
new mode 100755
diff --git a/misc/vnfs/tcpdump/Dockerfile b/misc/vnfs/tcpdump/Dockerfile
old mode 100644
new mode 100755
diff --git a/misc/vnfs/tcpdump/start.sh b/misc/vnfs/tcpdump/start.sh
old mode 100644
new mode 100755
diff --git a/setup.py b/setup.py
index d64279c..fbd8650 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/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..ee0c389 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
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/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/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
