diff --git a/src/emuvim/api/rest/network.py b/src/emuvim/api/rest/network.py
index 65dddc4..84db87e 100755
--- a/src/emuvim/api/rest/network.py
+++ b/src/emuvim/api/rest/network.py
@@ -36,6 +36,7 @@
 from flask_restful import Resource
 from flask import request
 import json
+import networkx
 
 logging.basicConfig(level=logging.INFO)
 
@@ -132,11 +133,12 @@
         nodes2 = list()
         links = list()
         # add all DCs
-        #for dc in net.dcs:
+        node_attr = networkx.get_node_attributes(net.DCNetwork_graph, 'type')
         for node_name in net.DCNetwork_graph.nodes():
             nodes2.append(node_name)
             node_index = nodes2.index(node_name)
-            node_dict = {"name":node_name,"group":node_index}
+            type = node_attr[node_name]
+            node_dict = {"name":node_name,"group":type}
             nodes.append(node_dict)
 
         # add links between other DCs
diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py
index a7f0a6c..a57a6b9 100755
--- a/src/emuvim/api/sonata/dummygatekeeper.py
+++ b/src/emuvim/api/sonata/dummygatekeeper.py
@@ -259,7 +259,7 @@
         # last step: remove the instance from the list of all instances
         del self.instances[instance_uuid]
 
-    def _start_vnfd(self, vnfd, vnf_id):
+    def _start_vnfd(self, vnfd, vnf_id, **kwargs):
         """
         Start a single VNFD of this service
         :param vnfd: vnfd descriptor dict
@@ -352,7 +352,8 @@
                     cpu_period=cpu_period,
                     cpuset=cpu_list,
                     mem_limit=mem_lim,
-                    volumes=volumes)
+                    volumes=volumes,
+                    type=kwargs.get('type','docker'))
 
             # rename the docker0 interfaces (eth0) to the management port name defined in the VNFD
             if USE_DOCKER_MGMT:
@@ -546,7 +547,7 @@
         if sap["type"] == "internal":
             vnfi = None
             if not GK_STANDALONE_MODE:
-                vnfi = self._start_vnfd(sap, sap['name'])
+                vnfi = self._start_vnfd(sap, sap['name'], type='sap_int')
             self.instances[instance_uuid]["vnf_instances"].append(vnfi)
 
         elif sap["type"] == "external":
diff --git a/src/emuvim/dashboard/index_upb.html b/src/emuvim/dashboard/index_upb.html
index c5224bf..485a6b1 100755
--- a/src/emuvim/dashboard/index_upb.html
+++ b/src/emuvim/dashboard/index_upb.html
@@ -100,11 +100,6 @@
   </table>
 </div>
 
-<div>
-<script src="//d3js.org/d3.v3.min.js"></script>
-<script src="js/graph.js" type="text/javascript"></script>
-</div>
-
 
 </div>
 
diff --git a/src/emuvim/dashboard/js/d3.v3.min.js b/src/emuvim/dashboard/js/d3.v3.min.js
old mode 100644
new mode 100755
diff --git a/src/emuvim/dashboard/js/graph.js b/src/emuvim/dashboard/js/graph.js
old mode 100644
new mode 100755
index bc10d39..9b28e11
--- a/src/emuvim/dashboard/js/graph.js
+++ b/src/emuvim/dashboard/js/graph.js
@@ -1,6 +1,6 @@
 var width = 960,
     height = 500,
-    color = d3.scale.category20c();
+    color = d3.scale.category10();
 
 var svg = d3.select("#table_graph").append("svg")
     .attr("width", width)
@@ -40,7 +40,7 @@
   //    .attr("height", 16);
   node.append("circle")
     .attr("r", 10)
-    .style("fill", function(d) { return color(d.name); });
+    .style("fill", function(d) { return color(d.group); });
 
   node.append("text")
       .attr("dx", 12)
diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py
index 418ab20..faae0e3 100755
--- a/src/emuvim/dcemulator/net.py
+++ b/src/emuvim/dcemulator/net.py
@@ -240,16 +240,33 @@
         """
         Wrapper for addDocker method to use custom container class.
         """
-        self.DCNetwork_graph.add_node(label)
+        self.DCNetwork_graph.add_node(label, type=params.get('type', 'docker'))
         return Containernet.addDocker(self, label, cls=EmulatorCompute, **params)
 
-    def removeDocker( self, label, **params ):
+    def removeDocker( self, label, **params):
         """
         Wrapper for removeDocker method to update graph.
         """
         self.DCNetwork_graph.remove_node(label)
         return Containernet.removeDocker(self, label, **params)
 
+    def addExtSAP(self, sap_name, sap_ip, **params):
+        """
+        Wrapper for addExtSAP method to store SAP  also in graph.
+        """
+        # make sure that 'type' is set
+        params['type'] = params.get('type','sap_ext')
+        self.DCNetwork_graph.add_node(sap_name, type=params['type'])
+        LOG.info('add ext sap: {0}'.format(sap_name))
+        return Containernet.addExtSAP(self, sap_name, sap_ip, **params)
+
+    def removeExtSAP(self, sap_name, **params):
+        """
+        Wrapper for removeExtSAP method to remove SAP  also from graph.
+        """
+        self.DCNetwork_graph.remove_node(sap_name)
+        return Containernet.removeExtSAP(self, sap_name)
+
     def addSwitch( self, name, add_to_graph=True, **params ):
         """
         Wrapper for addSwitch method to store switch also in graph.
@@ -257,7 +274,8 @@
 
         # add this switch to the global topology overview
         if add_to_graph:
-            self.DCNetwork_graph.add_node(name)
+            self.DCNetwork_graph.add_node(name, type=params.get('type','switch'))
+            LOG.info('*** **** *** add switch: {0} type: {1}'.format(name, params.get('type')))
 
         # set the learning switch behavior
         if 'failMode' in params :
@@ -267,12 +285,6 @@
 
         s = Containernet.addSwitch(self, name, protocols='OpenFlow10,OpenFlow12,OpenFlow13', failMode=failMode, **params)
 
-        # set flow entry that enables learning switch behavior (needed to enable E-LAN functionality)
-        #LOG.info('failmode {0}'.format(failMode))
-        #if failMode == 'standalone' :
-        #    LOG.info('add NORMAL')
-        #    s.dpctl('add-flow', 'actions=NORMAL')
-
         return s
 
     def getAllContainers(self):
