diff --git a/views/ngXosViews/diagnostic/package.json b/views/ngXosViews/diagnostic/package.json
index 5859db7..91845da 100644
--- a/views/ngXosViews/diagnostic/package.json
+++ b/views/ngXosViews/diagnostic/package.json
@@ -5,7 +5,7 @@
   "scripts": {
     "prestart": "npm install && bower install",
     "start": "gulp serve",
-    "dev": "NODE_ENV=local gulp serve",
+    "dev": "NODE_ENV=mock gulp serve",
     "prebuild": "npm install && bower install",
     "server": "easy-mocker -c ./mocks/diagnostic.conf.json -d ./mocks/data",
     "build": "gulp",
diff --git a/views/ngXosViews/mcordTopology/.bowerrc b/views/ngXosViews/mcordTopology/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/mcordTopology/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/.eslintrc b/views/ngXosViews/mcordTopology/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/mcordTopology/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/.gitignore b/views/ngXosViews/mcordTopology/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/mcordTopology/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/bower.json b/views/ngXosViews/mcordTopology/bower.json
deleted file mode 100644
index cb9b543..0000000
--- a/views/ngXosViews/mcordTopology/bower.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "name": "xos-mcordTopology",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <teo@onlab.us>"
-  ],
-  "description": "The mcordTopology view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "d3": "~3.5.16"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-resource": "1.4.7",
-    "ng-lodash": "0.3.0",
-    "bootstrap-css": "2.3.2"
-  }
-}
diff --git a/views/ngXosViews/mcordTopology/env/default.js b/views/ngXosViews/mcordTopology/env/default.js
deleted file mode 100644
index df86216..0000000
--- a/views/ngXosViews/mcordTopology/env/default.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// This is a default configuration for your development environment.
-// You can duplicate this configuration for any of your Backend Environments.
-// Different configurations are loaded setting a NODE_ENV variable that contain the config file name.
-// `NODE_ENV=local npm start`
-//
-// If xoscsrftoken or xossessionid are not specified the browser value are used
-// (works only for local environment as both application are served on the same domain)
-
-module.exports = {
-  host: 'http://clnode067.clemson.cloudlab.us:9999/',
-  xoscsrftoken: 'Pkq9PqoAsaMvrEiFAgxfw47IxTOtd0Y5',
-  xossessionid: 'qa1t49qeecdehofjkndqvxik71iwzfvf'
-};
diff --git a/views/ngXosViews/mcordTopology/env/mock.js b/views/ngXosViews/mcordTopology/env/mock.js
deleted file mode 100644
index 610ad78..0000000
--- a/views/ngXosViews/mcordTopology/env/mock.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  host: 'http://localhost:4000',
-  xoscsrftoken: 'Pkq9PqoAsaMvrEiFAgxfw47IxTOtd0Y5',
-  xossessionid: 'qa1t49qeecdehofjkndqvxik71iwzfvf'
-};
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/gulp/build.js b/views/ngXosViews/mcordTopology/gulp/build.js
deleted file mode 100644
index fb2cccb..0000000
--- a/views/ngXosViews/mcordTopology/gulp/build.js
+++ /dev/null
@@ -1,119 +0,0 @@
-'use strict';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-
-var TEMPLATE_FOOTER = `}]);
-angular.module('xos.mcordTopology').run(function($location){$location.path('/')});
-angular.bootstrap(angular.element('#xosMcordTopology'), ['xos.mcordTopology']);`;
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [options.dashboards + 'xosMcordTopology.html'],
-      {force: true}
-    );
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosMcordTopology.js'))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.mcordTopology',
-        root: 'templates/',
-        templateFooter: TEMPLATE_FOOTER
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', ['clean'], function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n.*)*\n<!-- endbower --><!-- endcss -->/, ''))
-      .pipe(replace(/<!-- bower:js -->(\n.*)*\n<!-- endbower --><!-- endjs -->/, ''))
-      .pipe(replace(/ng-app=".*"\s/, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'js/vendor/xosMcordTopologyVendor.js',
-            options.static + 'js/xosMcordTopology.js'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosMcordTopology.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosMcordTopologyVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'js/vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'copyHtml',
-      'cleanTmp'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/gulp/server.js b/views/ngXosViews/mcordTopology/gulp/server.js
deleted file mode 100644
index 7605294..0000000
--- a/views/ngXosViews/mcordTopology/gulp/server.js
+++ /dev/null
@@ -1,146 +0,0 @@
-'use strict';
-
-var gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-
-const environment = process.env.NODE_ENV;
-
-if (environment){
-  var conf = require(`../env/${environment}.js`);
-}
-else{
-  var conf = require('../env/default.js')
-}
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host || 'http://0.0.0.0:9999'
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  // open in browser with sync and proxy to 0.0.0.0
-  gulp.task('browser', function() {
-    browserSync.init({
-      // reloadDelay: 500,
-      // logLevel: 'debug',
-      // logConnections: true,
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/api': options.api,
-          '/xosHelpers/src': options.helpers
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/xos/') !== -1 ||
-            req.url.indexOf('/xoslib/') !== -1 ||
-            req.url.indexOf('/hpcapi/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.api + '*.js',
-            options.helpers + '**/*.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src(options.src + 'css/*.css'),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/mcordTopology/gulpfile.js b/views/ngXosViews/mcordTopology/gulpfile.js
deleted file mode 100644
index b2cdab8..0000000
--- a/views/ngXosViews/mcordTopology/gulpfile.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-
-var gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: '../../ngXosLib/xosHelpers/src/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/mcordTopology/karma.conf.js b/views/ngXosViews/mcordTopology/karma.conf.js
deleted file mode 100644
index 83d3f63..0000000
--- a/views/ngXosViews/mcordTopology/karma.conf.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      '../../static/js/xosApi.js',
-      '../../static/js/vendor/ngXosHelpers.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // web server port
-    port: 9876,
-
-
-    // enable / disable colors in the output (reporters and logs)
-    colors: true,
-
-
-    // level of logging
-    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
-    logLevel: config.LOG_INFO,
-
-
-    // enable / disable watching file and executing tests whenever any file changes
-    autoWatch: true,
-
-
-    // start these browsers
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/mcordTopology/mocks/data/instances.json b/views/ngXosViews/mcordTopology/mocks/data/instances.json
deleted file mode 100644
index 572c775..0000000
--- a/views/ngXosViews/mcordTopology/mocks/data/instances.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
-  {
-    "id": 1,
-    "humanReadableName": "BBU_service_instance-1",
-    "instance_id": "instance-00000001", 
-    "instance_uuid": "42b75cb7-7205-4a68-9100-b2c1e3ea69b5", 
-    "name": "BBU_service_instance-1", 
-    "instance_name": "mysite_BBU-1", 
-    "ip": "130.127.133.91"
-  },
-  {
-    "id": 2,
-    "humanReadableName": "BBU_service_instance-2",
-    "instance_id": "instance-00000002", 
-    "instance_uuid": "42b75cb7-7205-4a68-9200-b2c2e3ea69b5", 
-    "name": "BBU_service_instance-2", 
-    "instance_name": "mysite_BBU-2", 
-    "ip": "130.127.133.92"
-  },
-  {
-    "id": 5,
-    "humanReadableName": "vsg_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "vsg_service_instance-4", 
-    "instance_name": "mysite_vsg-4", 
-    "ip": "130.127.133.94"
-  },
-  {
-    "id": 6,
-    "humanReadableName": "MME_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "MME_service_instance-4", 
-    "instance_name": "mysite_MME-4", 
-    "ip": "130.127.133.94"
-  },
-  {
-    "id": 7,
-    "humanReadableName": "SGW_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "SGW_service_instance-4", 
-    "instance_name": "mysite_SGW-4", 
-    "ip": "130.127.133.94"
-  },
-  {
-    "id": 8,
-    "humanReadableName": "PGW_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "PGW_service_instance-4", 
-    "instance_name": "mysite_PGW-4", 
-    "ip": "130.127.133.94"
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/mocks/mcord.conf.json b/views/ngXosViews/mcordTopology/mocks/mcord.conf.json
deleted file mode 100644
index 7246775..0000000
--- a/views/ngXosViews/mcordTopology/mocks/mcord.conf.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
-  {
-    "url": "instances",
-    "base": "xos/",
-    "methods": ["GET", "POST"],
-    "param": "id"
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/package.json b/views/ngXosViews/mcordTopology/package.json
deleted file mode 100644
index b2606c2..0000000
--- a/views/ngXosViews/mcordTopology/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "name": "xos-mcordTopology",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "lint": "eslint src/js/",
-    "mocks": "easy-mocker -c ./mocks/mcord.conf.json -d ./mocks/data",
-    "dev": "NODE_ENV=mock gulp serve"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "MIT",
-  "dependencies": {},
-  "devDependencies": {
-    "browser-sync": "^2.9.11",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "lodash": "^3.10.1",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/mcordTopology/spec/sample.test.js b/views/ngXosViews/mcordTopology/spec/sample.test.js
deleted file mode 100644
index ecc17a0..0000000
--- a/views/ngXosViews/mcordTopology/spec/sample.test.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.mcordTopology'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/xos/users/?no_hyperlinks=1').respond([
-      {
-        email: 'teo@onlab.us',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  it('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('teo@onlab.us');
-    expect(isolatedScope.users[0].firstname).toEqual('Matteo');
-    expect(isolatedScope.users[0].lastname).toEqual('Scandolo');
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/css/dev.css b/views/ngXosViews/mcordTopology/src/css/dev.css
deleted file mode 100644
index 32d915d..0000000
--- a/views/ngXosViews/mcordTopology/src/css/dev.css
+++ /dev/null
@@ -1,7 +0,0 @@
-#xosMcordTopology{
-  position: absolute;
-  /*top: 100px;
-  left: 200px;*/
-  width: 100%;
-  height: 100%;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/css/mcord.css b/views/ngXosViews/mcordTopology/src/css/mcord.css
deleted file mode 100644
index 68cca28..0000000
--- a/views/ngXosViews/mcordTopology/src/css/mcord.css
+++ /dev/null
@@ -1,62 +0,0 @@
-[ui-view],
-m-cord-topology{
-  width: 100%;
-  height: 100%;
-  display: block;
-}
-
-line {
-  stroke: blue;
-  stroke-width: 1;
-}
-
-line.big{
-  stroke-width: 2;
-}
-
-circle,
-rect {
-  fill: #fff;
-  stroke-width: 1; 
-}
-
-.fabric {
-  stroke: none;
-  fill: #123456;
-  fill-rule: evenodd;
-}
-
-.fabric-container {
-  fill: transparent;
-  stroke: #000;
-  stroke-width: 1;
-}
-
-.bbu {
-  stroke: black;
-  fill: #FF7F0E;
-}
-
-.rru {
-  stroke: #000;
-  fill: #FFBB78;
-}
-
-.rru-shadow {
-  fill: #FFBB78;
-  opacity: .4
-}
-
-.MME, .SGW, .PGW {
-  fill: purple;
-  stroke: #000;
-}
-
-.bbu text, 
-.MME text,
-.SGW text,
-.PGW text {
-  font-size: 10px;
-  stroke-width: 0;
-  fill: #000;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/index.html b/views/ngXosViews/mcordTopology/src/index.html
deleted file mode 100644
index 691a869..0000000
--- a/views/ngXosViews/mcordTopology/src/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.css" />
-<!-- endbower --><!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/mcord.css">
-<!-- endinject -->
-
-<div ng-app="xos.mcordTopology" id="xosMcordTopology">
-    <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/ng-lodash/build/ng-lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.js"></script>
-<!-- endbower --><!-- endjs -->
-<!-- inject:js -->
-<script src="/xosHelpers/src/xosHelpers.module.js"></script>
-<script src="/xosHelpers/src/services/noHyperlinks.interceptor.js"></script>
-<script src="/xosHelpers/src/services/csrfToken.interceptor.js"></script>
-<script src="/xosHelpers/src/services/api.services.js"></script>
-<script src="/api/ng-xoslib.js"></script>
-<script src="/api/ng-xos.js"></script>
-<script src="/api/ng-hpcapi.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/static.data.js"></script>
-<script src="/.tmp/node_drawer.js"></script>
-<!-- endinject -->
diff --git a/views/ngXosViews/mcordTopology/src/js/main.js b/views/ngXosViews/mcordTopology/src/js/main.js
deleted file mode 100644
index bf57f1d..0000000
--- a/views/ngXosViews/mcordTopology/src/js/main.js
+++ /dev/null
@@ -1,296 +0,0 @@
-'use strict';
-
-angular.module('xos.mcordTopology', [
-  'ngResource',
-  'ngCookies',
-  'ngLodash',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('topology', {
-    url: '/',
-    template: '<m-cord-topology></m-cord-topology>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('mCordTopology', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    template: '',
-    controller: function($element, $interval, XosApi, lodash, TopologyElements, NodeDrawer){
-
-      const el = $element[0];
-
-      let nodes = [];
-      let links = [];
-
-      const filterBBU = (instances) => {
-        return lodash.filter(instances, i => i.name.indexOf('BBU') >= 0);
-      };
-
-      const filterOthers = (instances) => {
-        return lodash.filter(instances, i => {
-          return (i.name.indexOf('MME') >= 0)
-          || (i.name.indexOf('SGW') >= 0)
-          || (i.name.indexOf('PGW') >= 0)
-        });
-      };
-
-      // retrieving instances list
-      const getData = () => {
-
-        nodes = TopologyElements.nodes;
-        links = TopologyElements.links;
-
-        XosApi.Instance_List_GET()
-        .then((instances) => {
-          addBbuNodes(filterBBU(instances));
-          addOtherNodes(filterOthers(instances));
-
-          draw(svg, nodes, links);
-        })
-        .catch((e) => {
-          throw new Error(e);
-        });
-      };
-
-      const force = d3.layout.force();
-
-      // create svg elements
-      const svg = d3.select(el)
-        .append('svg')
-        .style('width', `${el.clientWidth}px`)
-        .style('height', `${el.clientHeight}px`);
-
-      const linkContainer = svg.append('g')
-        .attr({
-          class: 'link-container'
-        });
-
-      const nodeContainer = svg.append('g')
-        .attr({
-          class: 'node-container'
-        });
-
-      // replace human readable ids with d3 ids
-      // NOTE now ids are not manatined on update...
-      const buildLinks = (links, nodes) => {
-        return links.map((l) => {
-
-
-          let source = lodash.findIndex(nodes, {id: l.source});
-          let target = lodash.findIndex(nodes, {id: l.target});
-          // console.log(`link-${source}-${target}`, source, target);
-          return {
-            source: source,
-            target: target,
-            value: 1,
-            id: `link-${source}-${target}`,
-            type: l.source.indexOf('fabric') >= 0 ? 'big':'small'
-          };
-
-        });
-      };
-
-      // find fabric nodes and center horizontally
-      const positionFabricNodes = (nodes) => {
-        return lodash.map(nodes, n => {
-          if(n.type !== 'fabric'){
-            return n;
-          }
-
-          n.x = n.x * hStep;
-          n.y = n.y * vStep;
-
-          return n;
-        });
-      };
-
-      const addBbuNodes = (instances) => {
-
-        // calculate bbu hStep
-        let bbuHStep = ((el.clientWidth / 2) / (instances.length + 1));
-
-        // create nodes
-        let bbuNodes = instances.map((n, i) => {
-          return {
-            type: 'bbu',
-            name: n.name,
-            id: `bbu-${n.id}`,
-            fixed: true,
-            y: vStep * 3,
-            x: bbuHStep * (i + 1)
-          };
-        });
-
-        // create links
-        let bbuLinks = bbuNodes.map(n => {
-          return {
-            source: n.id,
-            target: 'fabric2'
-          };
-        });
-
-        // fake RRU nodes and links
-        instances.forEach((n, i) => {
-          bbuNodes.push({
-            type: 'rru',
-            name: 'rru',
-            id: `rru-${n.id}`,
-            fixed: true,
-            y: vStep * 4,
-            x: bbuHStep * (i + 1)
-          });
-
-          bbuLinks.push({
-            source: `rru-${n.id}`,
-            target: `bbu-${n.id}`
-          });
-        })
-
-        nodes = nodes.concat(bbuNodes);
-
-
-        links = links.concat(bbuLinks);
-      };
-
-      // add MME, PGW, SGW nodes
-      const addOtherNodes = (instances) => {
-        let hStep = ((el.clientWidth / 2) / (instances.length + 1));
-
-        // create nodes
-        let otherNodes = instances.map((n, i) => {
-          return {
-            type: n.name.substring(0, 3),
-            name: n.name,
-            id: `${n.name.substring(0, 3)}-${n.id}`,
-            fixed: true,
-            y: vStep * 3,
-            x: (el.clientWidth / 2) + (hStep * (i + 1))
-          };
-        });
-
-        // create links
-        let otherLinks = otherNodes.map(n => {
-          return {
-            source: n.id,
-            target: 'fabric4'
-          };
-        });
-
-
-        nodes = nodes.concat(otherNodes);
-        links = links.concat(otherLinks);
-      }
-
-      let hStep, vStep;
-
-      hStep = el.clientWidth / 3;
-      vStep = el.clientHeight / 5;
-
-      const draw = (svg, nodes, links) => {
-
-        hStep = el.clientWidth / 3;
-        vStep = el.clientHeight / 5;
-
-        links = buildLinks(links, nodes);
-
-        nodes = positionFabricNodes(nodes);
-
-
-        // start force layout
-        force
-          .nodes(nodes)
-          .links(links)
-          .size([el.clientWidth, el.clientHeight])
-          .charge(-20)
-          .chargeDistance(200)
-          .linkDistance(80)
-          .linkStrength(0.1)
-          .start();
-
-
-        const linkContainer = d3.select('.link-container');
-        const nodeContainer = d3.select('.node-container');
-
-        NodeDrawer.drawFabricBox(nodeContainer, hStep, vStep);
-
-        // draw links
-        var link = linkContainer.selectAll('.link')
-          .data(links, d => d.id);
-        
-        link.enter().append('line')
-          .attr({
-            // class: 'link',
-            id: d => d.id,
-            opacity: 0,
-            class: d => `link ${d.type}`
-          })
-          .transition()
-          .duration(1000)
-          // .delay((d, i) => 50 * i)
-          .attr({
-            opacity: 1
-          });
-
-        link.exit()
-        .remove();
-
-        //draw nodes
-        var node = nodeContainer.selectAll('.node')
-          .data(nodes, d => {
-            return d.id
-          });
-        
-        // append a group for any new node
-        var enter = node.enter()
-          .append('g', d => d.interfaceCfgIdentifier)
-          .attr({
-            class: d => `${d.type} node`,
-            transform: d => `translate(${d.x}, ${d.y})`
-          });
-
-        // draw nodes
-        NodeDrawer.drawBbus(enter.filter('.bbu'))
-        NodeDrawer.drawRrus(enter.filter('.rru'))
-        NodeDrawer.drawFabric(enter.filter('.fabric'))
-        NodeDrawer.drawOthers(enter.filter(d => {
-          return (
-            d.type  === 'MME' ||
-            d.type === 'SGW' ||
-            d.type === 'PGW'
-          )
-        }));
-
-        // remove nodes
-        var exit = node.exit();
-
-        NodeDrawer.removeElements(exit);
-
-        force.on('tick', function() {
-          link
-            .attr('x1', d => d.source.x )
-            .attr('y1', d => d.source.y )
-            .attr('x2', d => d.target.x )
-            .attr('y2', d => d.target.y );
-
-          node.attr('transform', (d) => `translate(${d.x},${d.y})`);
-        });
-      };
-      
-      $interval(() => {
-        getData();
-      }, 5000);
-      getData();
-
-      
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/js/node_drawer.js b/views/ngXosViews/mcordTopology/src/js/node_drawer.js
deleted file mode 100644
index 14bdf99..0000000
--- a/views/ngXosViews/mcordTopology/src/js/node_drawer.js
+++ /dev/null
@@ -1,167 +0,0 @@
-'use strict';
-
-angular.module('xos.mcordTopology')
-.service('NodeDrawer', function(TopologyElements){
-
-  const duration = 500;
-
-  let isFabricDrawed = false;
-
-  this.drawFabricBox = (svg, hStep, vStep) => {
-
-    if(isFabricDrawed){
-      return;
-    }
-
-    let fabric = svg.append('g')
-    .attr({
-      transform: `translate(${hStep - 25}, ${vStep - 25})`
-    });
-
-    fabric.append('rect')
-      .attr({
-        width: hStep + 50,
-        height: vStep + 50,
-        class: 'fabric-container'
-      });
-
-    fabric.append('text')
-    .text('Fabric')
-    .attr({
-      'text-anchor': 'middle',
-      x: ((hStep + 50) / 2),
-      y: -10
-    });
-
-    isFabricDrawed = true;
-  };
-
-  this.drawBbus = (nodes) => {
-
-    nodes.append('circle')
-      .attr({
-        class: d => d.type,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 15,
-        opacity: 1
-      });
-
-    nodes.append('text')
-    .attr({
-      'text-anchor': 'start',
-      y: 17,
-      x: 17,
-      opacity: 0
-    })
-    .text(d => `BBU ${d.name.substr(d.name.length - 1, 1)}`)
-    .transition()
-    .duration(duration * 2)
-    .attr({
-      opacity: 1
-    });
-  };
-
-  this.drawRrus = (nodes) => {
-
-    nodes.append('circle')
-      .attr({
-        class: d => `${d.type}-shadow`,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration * 2)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 30,
-        opacity: 1
-      });
-  
-    nodes.append('circle')
-      .attr({
-        class: d => d.type,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 10,
-        opacity: 1
-      });
-  };
-
-  this.drawFabric = (nodes) => {
-    nodes
-      .append('rect')
-      .attr({
-        width: 30,
-        height: 30,
-        x: -15,
-        y: -15
-      });
-
-    nodes
-      .append('path')
-      .attr({
-        class: d => d.type,
-        opacity: 0,
-        d: () => TopologyElements.icons.switch,
-        transform: `translate(-22, -22), scale(0.4)`
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        opacity: 1
-      });
-  };
-
-  this.drawOthers = (nodes) => {
-    nodes.append('circle')
-      .attr({
-        class: d => d.type,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 15,
-        opacity: 1
-      });
-
-    nodes.append('text')
-    .attr({
-      'text-anchor': 'start',
-      y: 17,
-      x: 17,
-      opacity: 0
-    })
-    .text(d => d.type)
-    .transition()
-    .duration(duration * 2)
-    .attr({
-      opacity: 1
-    });
-
-  };
-
-  this.removeElements = (nodes) => {
-    nodes
-    .transition()
-    .duration(duration)
-    .attr({
-      opacity: 0
-    })
-    .remove();
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/js/static.data.js b/views/ngXosViews/mcordTopology/src/js/static.data.js
deleted file mode 100644
index c38239d..0000000
--- a/views/ngXosViews/mcordTopology/src/js/static.data.js
+++ /dev/null
@@ -1,63 +0,0 @@
-'use strict';
-
-angular.module('xos.mcordTopology')
-.constant('TopologyElements', {
-  nodes: [
-    {
-      id: 'fabric1',
-      type: 'fabric',
-      name: 'fabric1',
-      fixed: true,
-      x: 1,
-      y: 1
-    },
-    {
-      id: 'fabric2',
-      type: 'fabric',
-      name: 'fabric2',
-      fixed: true,
-      x: 1,
-      y: 2
-    },
-    {
-      id: 'fabric3',
-      type: 'fabric',
-      name: 'fabric3',
-      fixed: true,
-      x: 2,
-      y: 1
-    },
-    {
-      id: 'fabric4',
-      type: 'fabric',
-      name: 'fabric4',
-      fixed: true,
-      x: 2,
-      y: 2
-    }
-  ],
-  links: [
-    {
-      source: 'fabric1',
-      target: 'fabric2'
-    },
-    {
-      source: 'fabric1',
-      target: 'fabric4'
-    },
-    {
-      source: 'fabric3',
-      target: 'fabric4'
-    },
-    {
-      source: 'fabric3',
-      target: 'fabric2'
-    }
-  ],
-  icons: {
-    switch: `M10,20a10,10,0,0,1,10-10h70a10,10,0,0,1,10,10v70a10,10,
-            0,0,1-10,10h-70a10,10,0,0,1-10-10zM60,26l12,0,0-8,18,13-18,13,0
-            -8-12,0zM60,60l12,0,0-8,18,13-18,13,0-8-12,0zM50,40l-12,0,0-8
-            -18,13,18,13,0-8,12,0zM50,74l-12,0,0-8-18,13,18,13,0-8,12,0z`,
-  }
-})
\ No newline at end of file
