diff --git a/src/emuvim/api/zerorpc/network.py b/src/emuvim/api/zerorpc/network.py
index f21ce99..d4ca794 100644
--- a/src/emuvim/api/zerorpc/network.py
+++ b/src/emuvim/api/zerorpc/network.py
@@ -101,7 +101,7 @@
             return ex.message
 
     # remove the rate measurement for a vnf interface
-    def remove_metric(self, vnf_name, vnf_interface, metric):
+    def stop_metric(self, vnf_name, vnf_interface, metric):
         logging.debug("RPC CALL: setup metric")
         try:
             c = self.net.monitor_agent.remove_metric(vnf_name, vnf_interface, metric)
diff --git a/src/emuvim/cli/monitor.py b/src/emuvim/cli/monitor.py
index bae0c07..040fa13 100755
--- a/src/emuvim/cli/monitor.py
+++ b/src/emuvim/cli/monitor.py
@@ -37,7 +37,7 @@
             args.get("metric"))
         pp.pprint(r)
 
-    def remove_metric(self, args):
+    def stop_metric(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.remove_metric(
@@ -61,10 +61,10 @@
 parser = argparse.ArgumentParser(description='son-emu network')
 parser.add_argument(
     "command",
-    help="Action to be executed: get_rate")
+    help="Action to be executed")
 parser.add_argument(
     "--vnf_name", "-vnf", dest="vnf_name",
-    help="vnf name to be monitored")
+    help="vnf name:interface to be monitored")
 parser.add_argument(
     "--metric", "-m", dest="metric",
     help="tx_bytes, rx_bytes, tx_packets, rx_packets")
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index 7fa5e18..82411fd 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -5,7 +5,7 @@
 from mininet.node import  OVSSwitch
 import ast
 import time
-from prometheus_client import start_http_server, Summary, Histogram, Gauge, Counter
+from prometheus_client import start_http_server, Summary, Histogram, Gauge, Counter, REGISTRY
 import threading
 from subprocess import Popen, PIPE
 import os
@@ -121,21 +121,28 @@
             network_metric['switch_dpid'] = int(str(next_node.dpid), 16)
             network_metric['metric_key'] = metric
 
-
             self.network_metrics.append(network_metric)
 
             logging.info('Started monitoring: {2} on {0}:{1}'.format(vnf_name, vnf_interface, metric))
             return 'Started monitoring: {2} on {0}:{1}'.format(vnf_name, vnf_interface, metric)
 
         except Exception as ex:
-            logging.exception("get_rate error.")
+            logging.exception("setup_metric error.")
             return ex.message
 
-    def remove_metric(self, vnf_name, vnf_interface, metric):
+    def stop_metric(self, vnf_name, vnf_interface, metric):
         for metric_dict in self.network_metrics:
             if metric_dict['vnf_name'] == vnf_name and metric_dict['vnf_interface'] == vnf_interface \
-                    and metric_dict['metric'] == metric:
+                    and metric_dict['metric_key'] == metric:
+
                 self.network_metrics.remove(metric_dict)
+
+                #this removes the complete metric, all labels...
+                #REGISTRY.unregister(self.prom_metrics[metric_dict['metric_key']])
+
+                # set values to NaN, prometheus api currently does not support removal of metrics
+                self.prom_metrics[metric_dict['metric_key']].labels(vnf_name, vnf_interface).set(float('nan'))
+
                 logging.info('Stopped monitoring: {2} on {0}:{1}'.format(vnf_name, vnf_interface, metric))
                 return 'Stopped monitoring: {2} on {0}:{1}'.format(vnf_name, vnf_interface, metric)
 
@@ -179,7 +186,7 @@
                 #logging.info('set prom packets:{0} {1}:{2}'.format(this_measurement, vnf_name, vnf_interface))
 
                 # set prometheus metric
-                self.prom_metrics[metric_key].labels(vnf_name, vnf_interface).set(this_measurement)
+                self.prom_metrics[metric_dict['metric_key']].labels(vnf_name, vnf_interface).set(this_measurement)
 
                 if previous_monitor_time <= 0 or previous_monitor_time >= port_uptime:
                     metric_dict['previous_measurement'] = int(port_stat[metric_key])
diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py
index c3c3c03..ede593a 100755
--- a/src/emuvim/dcemulator/net.py
+++ b/src/emuvim/dcemulator/net.py
@@ -175,12 +175,16 @@
         Dockernet.start(self)
 
     def stop(self):
-        # stop Ryu controller
-        Dockernet.stop(self)
-        self.stopRyu()
         # stop the monitor agent
         self.monitor_agent.stop()
 
+        # stop emulator net
+        Dockernet.stop(self)
+
+        # stop Ryu controller
+        self.stopRyu()
+
+
     def CLI(self):
         CLI(self)
 
