diff --git a/views/ngXosViews/serviceTopology/.bowerrc b/views/ngXosViews/diagnostic/.bowerrc
similarity index 100%
rename from views/ngXosViews/serviceTopology/.bowerrc
rename to views/ngXosViews/diagnostic/.bowerrc
diff --git a/views/ngXosViews/serviceTopology/.eslintrc b/views/ngXosViews/diagnostic/.eslintrc
similarity index 100%
rename from views/ngXosViews/serviceTopology/.eslintrc
rename to views/ngXosViews/diagnostic/.eslintrc
diff --git a/views/ngXosViews/serviceTopology/.gitignore b/views/ngXosViews/diagnostic/.gitignore
similarity index 100%
rename from views/ngXosViews/serviceTopology/.gitignore
rename to views/ngXosViews/diagnostic/.gitignore
diff --git a/views/ngXosViews/serviceTopology/bower.json b/views/ngXosViews/diagnostic/bower.json
similarity index 100%
rename from views/ngXosViews/serviceTopology/bower.json
rename to views/ngXosViews/diagnostic/bower.json
diff --git a/views/ngXosViews/serviceTopology/env/apt.js b/views/ngXosViews/diagnostic/env/apt.js
similarity index 100%
rename from views/ngXosViews/serviceTopology/env/apt.js
rename to views/ngXosViews/diagnostic/env/apt.js
diff --git a/views/ngXosViews/serviceTopology/env/default.js b/views/ngXosViews/diagnostic/env/default.js
similarity index 74%
rename from views/ngXosViews/serviceTopology/env/default.js
rename to views/ngXosViews/diagnostic/env/default.js
index 9d8f108..94f3385 100644
--- a/views/ngXosViews/serviceTopology/env/default.js
+++ b/views/ngXosViews/diagnostic/env/default.js
@@ -7,7 +7,7 @@
 // (works only for local environment as both application are served on the same domain)
 
 module.exports = {
-  host: 'http://clnode078.clemson.cloudlab.us:9999/',
-  xoscsrftoken: 'kJlAS4O3AJOpLq2fMkhor2QKLaWvxSAd',
-  xossessionid: 'f7z75zly6omm9ftlswsujfe87hfaomn2'
+  host: 'http://clnode067.clemson.cloudlab.us:9999/',
+  xoscsrftoken: 'IZ52y2rmIxizNDeRfaHdmcRNQsSd9mDV',
+  xossessionid: 'tmsqxdnf8og252ydu94sbfr1u63lht50'
 };
diff --git a/views/ngXosViews/serviceTopology/env/srikanth.js b/views/ngXosViews/diagnostic/env/srikanth.js
similarity index 100%
rename from views/ngXosViews/serviceTopology/env/srikanth.js
rename to views/ngXosViews/diagnostic/env/srikanth.js
diff --git a/views/ngXosViews/serviceTopology/gulp/build.js b/views/ngXosViews/diagnostic/gulp/build.js
similarity index 100%
rename from views/ngXosViews/serviceTopology/gulp/build.js
rename to views/ngXosViews/diagnostic/gulp/build.js
diff --git a/views/ngXosViews/serviceTopology/gulp/server.js b/views/ngXosViews/diagnostic/gulp/server.js
similarity index 100%
rename from views/ngXosViews/serviceTopology/gulp/server.js
rename to views/ngXosViews/diagnostic/gulp/server.js
diff --git a/views/ngXosViews/serviceTopology/gulpfile.js b/views/ngXosViews/diagnostic/gulpfile.js
similarity index 100%
rename from views/ngXosViews/serviceTopology/gulpfile.js
rename to views/ngXosViews/diagnostic/gulpfile.js
diff --git a/views/ngXosViews/serviceTopology/karma.conf.js b/views/ngXosViews/diagnostic/karma.conf.js
similarity index 100%
rename from views/ngXosViews/serviceTopology/karma.conf.js
rename to views/ngXosViews/diagnostic/karma.conf.js
diff --git a/views/ngXosViews/serviceTopology/package.json b/views/ngXosViews/diagnostic/package.json
similarity index 100%
rename from views/ngXosViews/serviceTopology/package.json
rename to views/ngXosViews/diagnostic/package.json
diff --git a/views/ngXosViews/serviceTopology/spec/sample.test.js b/views/ngXosViews/diagnostic/spec/sample.test.js
similarity index 75%
rename from views/ngXosViews/serviceTopology/spec/sample.test.js
rename to views/ngXosViews/diagnostic/spec/sample.test.js
index 56f7c8b..e3d2052 100644
--- a/views/ngXosViews/serviceTopology/spec/sample.test.js
+++ b/views/ngXosViews/diagnostic/spec/sample.test.js
@@ -154,55 +154,4 @@
     });
   });
 
-  describe('given slices and instances', () => {
-    const slices = [
-      {
-        id: 12,
-        name: 'First'
-      },
-      {
-        id: 13,
-        name: 'Second'
-      }
-    ];
-
-    const instances = [
-      [
-        {
-          humanReadableName: 'first-slice-instance-1',
-          id: 1
-        },
-        {
-          humanReadableName: 'first-slice-instance-2',
-          id: 2
-        }
-      ],
-      [
-        {
-          humanReadableName: 'second-slice-instance',
-          id: 3
-        }
-      ]
-    ];
-
-    const service = {
-      service_specific_attribute: {
-        instance_id: 1
-      }
-    };
-
-    it('should create a tree grouping instances', () => {
-      const res = Service.buildServiceInterfacesTree(service, slices, instances);
-
-      expect(res[0].name).toBe('First');
-      expect(res[0].children[0].name).toBe('first-slice-instance-1');
-      expect(res[0].children[0].active).toBeTruthy();
-      expect(res[0].children[1].name).toBe('first-slice-instance-2');
-
-      expect(res[1].name).toBe('Second');
-      expect(res[1].children[0].name).toBe('second-slice-instance');
-    });
-  });
-
-
 });
\ No newline at end of file
diff --git a/views/ngXosViews/serviceTopology/src/css/dev.css b/views/ngXosViews/diagnostic/src/css/dev.css
similarity index 100%
rename from views/ngXosViews/serviceTopology/src/css/dev.css
rename to views/ngXosViews/diagnostic/src/css/dev.css
diff --git a/views/ngXosViews/serviceTopology/src/css/serviceTopology.css b/views/ngXosViews/diagnostic/src/css/serviceTopology.css
similarity index 90%
rename from views/ngXosViews/serviceTopology/src/css/serviceTopology.css
rename to views/ngXosViews/diagnostic/src/css/serviceTopology.css
index 283967c..54beba3 100644
--- a/views/ngXosViews/serviceTopology/src/css/serviceTopology.css
+++ b/views/ngXosViews/diagnostic/src/css/serviceTopology.css
@@ -1,22 +1,15 @@
-service-canvas {
+/* CONTAINER */
+diagnostic .half-height {
+    position: relative;
+    height: 50%;
+}
+
+service-topology {
     height: 100%;
     width: 100%;
     display: block;
 }
 
-service-canvas .subscriber-select{
-    z-index: 1000;
-    position: absolute;
-    width: 200px;
-    top: 10px;
-    left: 10px;
-}
-
-service-canvas svg {
-    position: absolute;
-    top: 0;
-}
-
 /* LEGEND */
 
 .legend {
@@ -38,7 +31,7 @@
 .node rect{
     fill: #fff;
     stroke: steelblue;
-    stroke-width: 3px;
+    stroke-width: 1px;
 }
 
 .node.subscriber circle,
diff --git a/views/ngXosViews/serviceTopology/src/index.html b/views/ngXosViews/diagnostic/src/index.html
similarity index 94%
rename from views/ngXosViews/serviceTopology/src/index.html
rename to views/ngXosViews/diagnostic/src/index.html
index d2f95db..f7282b9 100644
--- a/views/ngXosViews/serviceTopology/src/index.html
+++ b/views/ngXosViews/diagnostic/src/index.html
@@ -33,8 +33,9 @@
 <script src="/api/ng-xos.js"></script>
 <script src="/api/ng-hpcapi.js"></script>
 <script src="/.tmp/main.js"></script>
-<script src="/.tmp/topologyCanvas.js"></script>
 <script src="/.tmp/services.js"></script>
+<script src="/.tmp/serviceTopology.js"></script>
+<script src="/.tmp/diagnostic.js"></script>
 <script src="/.tmp/d3.js"></script>
 <script src="/.tmp/config.js"></script>
 <!-- endinject -->
diff --git a/views/ngXosViews/serviceTopology/src/js/config.js b/views/ngXosViews/diagnostic/src/js/config.js
similarity index 68%
rename from views/ngXosViews/serviceTopology/src/js/config.js
rename to views/ngXosViews/diagnostic/src/js/config.js
index 347feb9..91ea0c2 100644
--- a/views/ngXosViews/serviceTopology/src/js/config.js
+++ b/views/ngXosViews/diagnostic/src/js/config.js
@@ -3,12 +3,18 @@
 
   angular.module('xos.serviceTopology')
   .constant('serviceTopologyConfig', {
-    widthMargin: 100,
+    widthMargin: 20,
     heightMargin: 30,
     duration: 750,
     circle: {
       radius: 10,
       selectedRadius: 15
+    },
+    square: {
+      width: 20,
+      height: 20,
+      x: -10,
+      y: -10
     }
   })
 
diff --git a/views/ngXosViews/serviceTopology/src/js/d3.js b/views/ngXosViews/diagnostic/src/js/d3.js
similarity index 73%
rename from views/ngXosViews/serviceTopology/src/js/d3.js
rename to views/ngXosViews/diagnostic/src/js/d3.js
index 4672325..027f08d 100644
--- a/views/ngXosViews/serviceTopology/src/js/d3.js
+++ b/views/ngXosViews/diagnostic/src/js/d3.js
@@ -5,7 +5,7 @@
     .factory('d3', function($window){
       return $window.d3;
     })
-  .service('TreeLayout', function($window, lodash, ServiceRelation, serviceTopologyConfig, Slice, Instances){
+  .service('TreeLayout', function($window, $log, lodash, ServiceRelation, serviceTopologyConfig){
 
     const drawLegend = (svg) => {
       const legendContainer = svg.append('g')
@@ -91,19 +91,6 @@
 
     var i = 0;
 
-    const getInitialNodePosition = (node, source, direction = 'enter') => {
-      // this is the starting position
-      // TODO if enter use y0 and x0 else x and y
-      // TODO start from the node that has been clicked
-      if(node.parent){
-        if(direction === 'enter' && node.parent.y0 && node.parent.x0){
-          return `translate(${node.parent.y0},${node.parent.x0})`;
-        }
-        return `translate(${node.parent.y},${node.parent.x})`;
-      }
-      return `translate(${source.y0},${source.x0})`;
-    };
-
     // given a canvas, a layout and a data source, draw a tree layout
     const updateTree = (svg, layout, source) => {
 
@@ -126,9 +113,6 @@
         // position the child node horizontally
         const step = (($window.innerWidth - (serviceTopologyConfig.widthMargin * 2)) / maxDepth);
         d.y = d.depth * step;
-        if(d.type === 'slice' || d.type === 'instance'){
-          d.y = d.depth * step - (step / 2);
-        }
       });
 
       // Update the nodes…
@@ -139,7 +123,7 @@
       var nodeEnter = node.enter().append('g')
         .attr({
           class: d => `node ${d.type}`,
-          transform: d => getInitialNodePosition(d, source)
+          transform: `translate(${source.y0}, ${source.x0})`
         });
 
       const subscriberNodes = nodeEnter.filter('.subscriber');
@@ -148,20 +132,11 @@
       const instanceNodes = nodeEnter.filter('.instance');
       const sliceNodes = nodeEnter.filter('.slice');
 
-      subscriberNodes.append('path')
-        .attr({
-          d: 'M20.771,12.364c0,0,0.849-3.51,0-4.699c-0.85-1.189-1.189-1.981-3.058-2.548s-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.792-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.321s0.283,3.058,0.566,3.624l-0.337,0.113c-0.283,3.283,1.132,3.68,1.132,3.68c0.509,3.058,1.019,1.756,1.019,2.548s-0.51,0.51-0.51,0.51s-0.452,1.245-1.584,1.698c-1.132,0.452-7.416,2.886-7.927,3.396c-0.511,0.511-0.453,2.888-0.453,2.888h26.947c0,0,0.059-2.377-0.452-2.888c-0.512-0.511-6.796-2.944-7.928-3.396c-1.132-0.453-1.584-1.698-1.584-1.698s-0.51,0.282-0.51-0.51s0.51,0.51,1.02-2.548c0,0,1.414-0.397,1.132-3.68H20.771z',
-          transform: 'translate(-20, -20)'
-        });
+      subscriberNodes.append('rect')
+        .attr(serviceTopologyConfig.square);
 
-      internetNodes.append('path')
-        .attr({
-          d: 'M209,15a195,195 0 1,0 2,0zm1,0v390m195-195H15M59,90a260,260 0 0,0 302,0 m0,240 a260,260 0 0,0-302,0M195,20a250,250 0 0,0 0,382 m30,0 a250,250 0 0,0 0-382',
-          stroke: '#000',
-          'stroke-width': '20px',
-          fill: 'none',
-          transform: 'translate(-10, -10), scale(0.05)'
-        });
+      internetNodes.append('rect')
+        .attr(serviceTopologyConfig.square);
 
       serviceNodes.append('circle')
         .attr('r', 1e-6)
@@ -219,9 +194,6 @@
       // Transition exiting nodes to the parent's new position.
       var nodeExit = node.exit().transition()
         .duration(serviceTopologyConfig.duration)
-        .attr({
-          'transform': d => getInitialNodePosition(d, source, 'exit')
-        })
         .remove();
 
       nodeExit.select('circle')
@@ -265,6 +237,8 @@
 
     const serviceClick = function(d) {
 
+      $log.info('TODO emit an event to highlight VMs');
+
       if(!d.service){
         return;
       }
@@ -278,20 +252,6 @@
         .transition()
         .duration(serviceTopologyConfig.duration)
         .attr('r', serviceTopologyConfig.circle.selectedRadius);
-
-      ServiceRelation.getServiceInterfaces(d.service)
-        .then(interfaceTree => {
-
-          const isDetailed = lodash.find(d.children, {type: 'slice'});
-          if(isDetailed){
-            lodash.remove(d.children, {type: 'slice'});
-          }
-          else {
-            d.children = d.children.concat(interfaceTree);
-          }
-
-          updateTree(_svg, _layout, _source);
-        });
     };
 
     this.updateTree = updateTree;
diff --git a/views/ngXosViews/diagnostic/src/js/diagnostic.js b/views/ngXosViews/diagnostic/src/js/diagnostic.js
new file mode 100644
index 0000000..7f433f6
--- /dev/null
+++ b/views/ngXosViews/diagnostic/src/js/diagnostic.js
@@ -0,0 +1,23 @@
+(function () {
+  'use strict';
+
+  angular.module('xos.serviceTopology')
+  .directive('diagnostic', function(){
+    return {
+      restrict: 'E',
+      templateUrl: 'templates/diagnostic.tpl.html',
+      controllerAs: 'vm',
+      controller: function(Subscribers, ServiceRelation){
+        Subscribers.query().$promise
+        .then((subscribers) => {
+          this.subscribers = subscribers;
+          this.selectedSubscriber = subscribers[0];
+          return ServiceRelation.get(this.selectedSubscriber);
+        })
+        .then((serviceChain) => {
+          this.serviceChain = serviceChain;
+        });
+      }
+    }
+  });
+})();
\ No newline at end of file
diff --git a/views/ngXosViews/serviceTopology/src/js/main.js b/views/ngXosViews/diagnostic/src/js/main.js
similarity index 80%
rename from views/ngXosViews/serviceTopology/src/js/main.js
rename to views/ngXosViews/diagnostic/src/js/main.js
index 4e6239a..a6e79c5 100644
--- a/views/ngXosViews/serviceTopology/src/js/main.js
+++ b/views/ngXosViews/diagnostic/src/js/main.js
@@ -10,9 +10,9 @@
 ])
 .config(($stateProvider) => {
   $stateProvider
-  .state('user-list', {
+  .state('home', {
     url: '/',
-    template: '<service-canvas></service-canvas>'
+    template: '<diagnostic></diagnostic>'
   });
 })
 .config(function($httpProvider){
diff --git a/views/ngXosViews/diagnostic/src/js/serviceTopology.js b/views/ngXosViews/diagnostic/src/js/serviceTopology.js
new file mode 100644
index 0000000..d30122c
--- /dev/null
+++ b/views/ngXosViews/diagnostic/src/js/serviceTopology.js
@@ -0,0 +1,64 @@
+(function () {
+  'use strict';
+
+  angular.module('xos.serviceTopology')
+  .directive('serviceTopology', function(){
+    return {
+      restrict: 'E',
+      scope: {
+        serviceChain: '='
+      },
+      bindToController: true,
+      controllerAs: 'vm',
+      template: '',
+      controller: function($element, $window, $scope, d3, serviceTopologyConfig, ServiceRelation, Slice, Instances, Subscribers, TreeLayout){
+
+        const el = $element[0];
+
+        this.instances = [];
+        this.slices = [];
+
+        const width = el.clientWidth - (serviceTopologyConfig.widthMargin * 2);
+        const height = el.clientHeight - (serviceTopologyConfig.heightMargin * 2);
+
+        const treeLayout = d3.layout.tree()
+          .size([height, width]);
+
+        const svg = d3.select($element[0])
+          .append('svg')
+          .style('width', `${el.clientWidth}px`)
+          .style('height', `${el.clientHeight}px`)
+
+        const treeContainer = svg.append('g')
+          .attr('transform', `translate(${serviceTopologyConfig.widthMargin * 4},${serviceTopologyConfig.heightMargin})`);
+
+        var root;
+
+        const draw = (tree) => {
+          root = tree;
+          root.x0 = height / 2;
+          root.y0 = width / 2;
+
+          TreeLayout.updateTree(treeContainer, treeLayout, root);
+        };
+
+        TreeLayout.drawLegend(svg);
+
+        this.getInstances = (slice) => {
+          Instances.query({slice: slice.id}).$promise
+          .then((instances) => {
+            this.selectedSlice = slice;
+            this.instances = instances;
+          })
+        };
+        
+        $scope.$watch(() => this.serviceChain, (chain) => {
+          if(chain){
+            draw(chain);
+          }
+        });
+      }
+    }
+  });
+
+}());
\ No newline at end of file
diff --git a/views/ngXosViews/serviceTopology/src/js/services.js b/views/ngXosViews/diagnostic/src/js/services.js
similarity index 73%
rename from views/ngXosViews/serviceTopology/src/js/services.js
rename to views/ngXosViews/diagnostic/src/js/services.js
index 12dedaf..60a20d2 100644
--- a/views/ngXosViews/serviceTopology/src/js/services.js
+++ b/views/ngXosViews/diagnostic/src/js/services.js
@@ -145,64 +145,6 @@
       return deferred.promise;
     };
 
-    const buildServiceInterfacesTree = (service, slices, instances) => {
-
-      const isActive = (service, instance) => {
-        if(service.service_specific_attribute){
-          return service.service_specific_attribute.instance_id === instance.id;
-        }
-        return false;
-      }
-
-      var interfaceTree = [];
-      lodash.forEach(slices, (slice, i) => {
-        let current = {
-          name: slice.name,
-          slice: slice,
-          type: 'slice',
-          children: instances[i].map((instance) => {
-
-            return {
-              name: instance.humanReadableName,
-              children: [],
-              type: 'instance',
-              instance: instance,
-              active: isActive(service, instance)
-            };
-
-          })
-        };
-        interfaceTree.push(current);
-      });
-      return interfaceTree;
-    };
-
-    const getServiceInterfaces = (service) => {
-      var deferred = $q.defer();
-
-      var _slices;
-
-      Slice.query({service: service.id}).$promise
-      .then((slices) => {
-        _slices = slices;
-        const promisesArr = slices.reduce((promises, slice) => {
-          promises.push(Instances.query({slice: slice.id}).$promise);
-          return promises;
-        }, []);
-
-        // TODO add networks
-        // decide how, they should be manually drawn
-        // as they connect more instances without parent dependencies
-
-        return $q.all(promisesArr);
-      })
-      .then((instances) => {
-        deferred.resolve(buildServiceInterfacesTree(service, _slices, instances));
-      });
-
-      return deferred.promise;
-    };
-
     // export APIs
     return {
       get: get,
@@ -211,8 +153,6 @@
       findLevelRelation: findLevelRelation,
       findLevelServices: findLevelServices,
       depthOf: depthOf,
-      getServiceInterfaces: getServiceInterfaces,
-      buildServiceInterfacesTree: buildServiceInterfacesTree,
       findSpecificInformation: findSpecificInformation
     }
   });
diff --git a/views/ngXosViews/diagnostic/src/templates/diagnostic.tpl.html b/views/ngXosViews/diagnostic/src/templates/diagnostic.tpl.html
new file mode 100644
index 0000000..a8b2d3a
--- /dev/null
+++ b/views/ngXosViews/diagnostic/src/templates/diagnostic.tpl.html
@@ -0,0 +1,3 @@
+<div class="half-height">
+  <service-topology service-chain="vm.serviceChain"></service-topology>  
+</div>
diff --git a/views/ngXosViews/serviceTopology/src/js/topologyCanvas.js b/views/ngXosViews/serviceTopology/src/js/topologyCanvas.js
deleted file mode 100644
index 8fce43d..0000000
--- a/views/ngXosViews/serviceTopology/src/js/topologyCanvas.js
+++ /dev/null
@@ -1,91 +0,0 @@
-(function () {
-  'use strict';
-
-  angular.module('xos.serviceTopology')
-  .directive('serviceCanvas', function(){
-    return {
-      restrict: 'E',
-      scope: {},
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/topology_canvas.tpl.html',
-      controller: function($element, $window, d3, serviceTopologyConfig, ServiceRelation, Slice, Instances, Subscribers, TreeLayout){
-
-        // NOTE $window is not the right reference, we should refer to container size
-
-        this.instances = [];
-        this.slices = [];
-
-        const width = $window.innerWidth - serviceTopologyConfig.widthMargin;
-        const height = $window.innerHeight - serviceTopologyConfig.heightMargin;
-
-        const treeLayout = d3.layout.tree()
-          .size([height, width]);
-
-        const svg = d3.select($element[0])
-          .append('svg')
-          .style('width', `${$window.innerWidth}px`)
-          .style('height', `${$window.innerHeight}px`)
-
-        const treeContainer = svg.append('g')
-          .attr('transform', 'translate(' + serviceTopologyConfig.widthMargin+ ',' + serviceTopologyConfig.heightMargin + ')');
-
-        //const resizeCanvas = () => {
-        //  var targetSize = svg.node().getBoundingClientRect();
-        //
-        //  d3.select(self.frameElement)
-        //    .attr('width', `${targetSize.width}px`)
-        //    .attr('height', `${targetSize.height}px`)
-        //};
-        //d3.select(window)
-        //  .on('load', () => {
-        //    resizeCanvas();
-        //  });
-        //d3.select(window)
-        //  .on('resize', () => {
-        //    resizeCanvas();
-        //    update(root);
-        //  });
-        var root;
-
-        const draw = (tree) => {
-          root = tree;
-          root.x0 = $window.innerHeight / 2;
-          root.y0 = 0;
-
-          TreeLayout.updateTree(treeContainer, treeLayout, root);
-        };
-
-        TreeLayout.drawLegend(svg);
-
-        var _this = this;
-
-        Subscribers.query().$promise
-        .then((subscribers) => {
-          this.subscribers = subscribers;
-          if(subscribers.length === 1){
-            this.selectedSubscriber = subscribers[0];
-            this.getServiceChain(this.selectedSubscriber);
-          }
-        });
-
-        this.getInstances = (slice) => {
-          Instances.query({slice: slice.id}).$promise
-          .then((instances) => {
-            this.selectedSlice = slice;
-            this.instances = instances;
-          })
-        };
-
-        // redraw when subrsbiber change
-        this.getServiceChain = (subscriber) => {
-          ServiceRelation.get(subscriber)
-            .then((tree) => {
-              draw(tree);
-            });
-        };
-      }
-    }
-  });
-
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/serviceTopology/src/templates/topology_canvas.tpl.html b/views/ngXosViews/serviceTopology/src/templates/topology_canvas.tpl.html
deleted file mode 100644
index aef5014..0000000
--- a/views/ngXosViews/serviceTopology/src/templates/topology_canvas.tpl.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="subscriber-select">
-    Select a subscriber:
-    <select class="form-control" ng-options="s as s.name for s in vm.subscribers" ng-model="vm.selectedSubscriber" ng-change="vm.getServiceChain(vm.selectedSubscriber)">
-        <option value="">Select a subscriber...</option>
-    </select>
-</div>
\ No newline at end of file
