diff --git a/src/emuvim/api/rest/compute.py b/src/emuvim/api/rest/compute.py
index 07d059f..b657660 100755
--- a/src/emuvim/api/rest/compute.py
+++ b/src/emuvim/api/rest/compute.py
@@ -35,6 +35,7 @@
 
 CORS_HEADER = {'Access-Control-Allow-Origin': '*'}
 
+# the dcs dict is set in the rest_api_endpoint.py upon datacenter init
 dcs = {}
 
 
@@ -49,6 +50,7 @@
     example networks list({"id":"input","ip": "10.0.0.254/8"}, {"id":"output","ip": "11.0.0.254/24"})
     :return: docker inspect dict of deployed docker
     """
+
     global dcs
 
     def put(self, dc_label, compute_name, resource=None, value=None):
diff --git a/src/emuvim/api/rest/monitor.py b/src/emuvim/api/rest/monitor.py
index 74f7acf..eac10ef 100755
--- a/src/emuvim/api/rest/monitor.py
+++ b/src/emuvim/api/rest/monitor.py
@@ -277,10 +277,10 @@
             c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='start')
 
             # return monitor message response
-            return  str(c), 200
+            return  str(c), 200, CORS_HEADER
         except Exception as ex:
             logging.exception("API error.")
-            return ex.message, 500
+            return ex.message, 500, CORS_HEADER
 
     def delete(self):
         logging.debug("REST CALL: stop monitor skewness")
@@ -300,3 +300,27 @@
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
+class MonitorTerminal(Resource):
+    """
+    start a terminal for the selected VNFs
+    :param vnf_list: list of names of the VNFs to start a terminal from (all VNFs if None)
+    :return: message string indicating if the monitor action is succesful or not
+    """
+    global net
+
+    def get(self):
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_list = data.get("vnf_list")
+        logging.debug("REST CALL: start terminal for: {}".format(vnf_list))
+        try:
+            # start terminals
+            c = net.monitor_agent.term(vnf_list)
+
+            # return monitor message response
+            return  str(c), 200, CORS_HEADER
+        except Exception as ex:
+            logging.exception("API error.")
+            return ex.message, 500, CORS_HEADER
\ No newline at end of file
diff --git a/src/emuvim/api/rest/rest_api_endpoint.py b/src/emuvim/api/rest/rest_api_endpoint.py
index 0c9e1bc..891f95d 100755
--- a/src/emuvim/api/rest/rest_api_endpoint.py
+++ b/src/emuvim/api/rest/rest_api_endpoint.py
@@ -41,7 +41,7 @@
 from network import NetworkAction, DrawD3jsgraph
 
 import monitor
-from monitor import MonitorInterfaceAction, MonitorFlowAction, MonitorLinkAction, MonitorSkewAction
+from monitor import MonitorInterfaceAction, MonitorFlowAction, MonitorLinkAction, MonitorSkewAction, MonitorTerminal
 
 import pkg_resources
 from os import path
@@ -103,6 +103,9 @@
         # the skewness metric is exported
         self.api.add_resource(MonitorSkewAction,
                               "/restapi/monitor/skewness")
+        # start a terminal window for the specified vnfs
+        self.api.add_resource(MonitorTerminal,
+                              "/restapi/monitor/term")
 
 
         logging.debug("Created API endpoint %s(%s:%d)" % (self.__class__.__name__, self.ip, self.port))
diff --git a/src/emuvim/dashboard/index.html b/src/emuvim/dashboard/index.html
index abdc2c6..bd57753 100755
--- a/src/emuvim/dashboard/index.html
+++ b/src/emuvim/dashboard/index.html
@@ -25,6 +25,8 @@
     <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
     <![endif]-->
 
+
+
     <script src="js/main.js" type="text/javascript"></script>
 
 
diff --git a/src/emuvim/dashboard/js/graph.js b/src/emuvim/dashboard/js/graph.js
index 5858833..b158bf0 100755
--- a/src/emuvim/dashboard/js/graph.js
+++ b/src/emuvim/dashboard/js/graph.js
@@ -30,6 +30,7 @@
       .enter().append("g")
       .attr("class", "node")
       .call(force.drag)
+      .on("dblclick", dblclick)
 
   node.append("circle")
     .attr("r", 10)
@@ -49,5 +50,17 @@
     node.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
   });
 
+  // action to take on double mouse click, call rest api to start xterm
+  function dblclick() {
+      var vnf_name = d3.select(this).text()
+      console.debug(vnf_name)
+      var rest_url = "http://127.0.0.1:5001/restapi/monitor/term?vnf_list=" + vnf_name
+
+      d3.json(rest_url, function(error, json) {
+        if (error) throw error;
+        console.debug(json)
+      });
+  }
+
 
 });
\ No newline at end of file
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index 6418e37..0d40531 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -34,7 +34,7 @@
 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, check_call
+from subprocess import Popen
 import os
 import docker
 import json
@@ -626,6 +626,46 @@
                 wait_time += 1
         return ret
 
+    def term(self, vnf_list=[]):
+        """
+        Start a terminal window for the specified VNFs
+        (start a terminal for all VNFs if vnf_list is empty)
+        :param vnf_list:
+        :return:
+        """
+
+
+        if vnf_list is None:
+            vnf_list = []
+        if not isinstance(vnf_list, list):
+            vnf_list = str(vnf_list).split(',')
+            vnf_list = map(str.strip, vnf_list)
+        logging.info('vnf_list: {}'.format(vnf_list))
+
+        return self.start_xterm(vnf_list)
+
+
+    # start an xterm for the specfified vnfs
+    def start_xterm(self, vnf_names):
+        # start xterm for all vnfs
+        for vnf_name in vnf_names:
+            terminal_cmd = "docker exec -it mn.{0} /bin/bash".format(vnf_name)
+
+            cmd = ['xterm', '-xrm', 'XTerm*selectToClipboard: true', '-xrm', 'XTerm.vt100.allowTitleOps: false',
+                   '-T', vnf_name,
+                   '-e', terminal_cmd]
+            Popen(cmd)
+
+        ret = 'xterms started for {0}'.format(vnf_names)
+        if len(vnf_names) == 0:
+            ret = 'vnf list is empty, no xterms started'
+        return ret
+
+
+
+
+
+
 
 
 
