diff --git a/views/ngXosViews/diagnostic/src/js/nodeDrawer.js b/views/ngXosViews/diagnostic/src/js/nodeDrawer.js
index 67156d5..dba2325 100644
--- a/views/ngXosViews/diagnostic/src/js/nodeDrawer.js
+++ b/views/ngXosViews/diagnostic/src/js/nodeDrawer.js
@@ -9,7 +9,7 @@
   var instanceId = 0;
 
   angular.module('xos.serviceTopology')
-  .service('NodeDrawer', function(d3, serviceTopologyConfig, Node){
+  .service('NodeDrawer', function(d3, serviceTopologyConfig, Node, RackHelper){
     this.addNetworks = (nodes) => {
       nodes.append('path')
       .attr({
@@ -31,23 +31,35 @@
 
       Node.queryWithInstances().$promise
       .then((computeNodes) => {
-        this.drawComputeNodes(nodes, computeNodes);
+        let [w, h] = RackHelper.getRackSize(computeNodes);
+
+        let rack = nodes
+        .append('g').
+        attr({
+          transform: d => `translate(${- (w / 2)}, ${- (h / 2)})`
+        });
+
+        rack
+        .append('rect')
+        .attr({
+          width: w,
+          height: h
+        });
+
+        nodes.append('text')
+        .attr({
+          'text-anchor': 'middle',
+          y: - (h / 2) - 10
+        })
+        .text(d => d.name);
+
+        this.drawComputeNodes(rack, computeNodes);
       });
-
-      // NOTE should we draw the rack?
-      nodes.append('rect')
-      .attr(serviceTopologyConfig.rack);
-
-      nodes.append('text')
-      .attr({
-        'text-anchor': 'middle',
-        y: serviceTopologyConfig.rack.y - 10
-      })
-      .text(d => d.name);
     };
 
     this.drawComputeNodes = (container, nodes) => {
-      console.log('drawComputeNodes');
+      
+
       let elements = container.selectAll('.compute-nodes')
       .data(nodes, d => {
         if(!angular.isString(d.d3Id)){
@@ -58,11 +70,23 @@
 
       var nodeContainer = elements.enter().append('g')
       .attr({
-        class: 'compute-node'
+        class: 'compute-node',
+        transform: (d) => `translate(${RackHelper.getComputeNodePosition(nodes, d.d3Id.replace('compute-node-', '') - 1)})`
       });
 
       nodeContainer.append('rect')
-      .attr(serviceTopologyConfig.computeNode);
+      .attr({
+        width: d => RackHelper.getComputeNodeSize(d.instances)[0],
+        height: d => RackHelper.getComputeNodeSize(d.instances)[1],
+      });
+
+      nodeContainer.append('text')
+      .attr({
+        'text-anchor': 'start',
+        y: 15, //FIXME
+        x: 10 //FIXME
+      })
+      .text(d => d.humanReadableName.split('.')[0]);
 
       // if there are Compute Nodes
       if(nodeContainer.length > 0){
@@ -74,19 +98,29 @@
     };
 
     this.drawInstances = (container, instances) => {
-      
-      // TODO position instances... How??
 
       let elements = container.selectAll('.instances')
       .data(instances, d => angular.isString(d.d3Id) ? d.d3Id : d.d3Id = `instance-${++instanceId}`)
 
       var instanceContainer = elements.enter().append('g')
       .attr({
-        class: 'instance'
+        class: 'instance',
+        transform: d => `translate(${RackHelper.getInstancePosition(d.d3Id.replace('instance-', '') - 1)})`
       });
 
       instanceContainer.append('rect')
-      .attr(serviceTopologyConfig.instance);
+      .attr({
+        width: serviceTopologyConfig.instance.width,
+        height: serviceTopologyConfig.instance.height
+      });
+
+      instanceContainer.append('text')
+      .attr({
+        'text-anchor': 'start',
+        y: 13, //FIXME
+        x: 5 //FIXME
+      })
+      .text(d => d.humanReadableName.split('.')[0]);
     };
 
     this.addPhisical = (nodes) => {
