diff --git a/views/ngXosViews/tenant/src/js/main.js b/views/ngXosViews/tenant/src/js/main.js
new file mode 100644
index 0000000..105e54e
--- /dev/null
+++ b/views/ngXosViews/tenant/src/js/main.js
@@ -0,0 +1,547 @@
+'use strict';
+
+angular.module('xos.tenant', [
+  'ngResource',
+  'ngCookies',
+  'ui.router',
+  'xos.helpers'
+])
+.config(($stateProvider) => {
+  $stateProvider
+  .state('user-list', {
+    url: '/',
+    template: '<users-list></users-list>'
+  })
+    .state('site', {
+      url:'/site/:id',
+      template:'<site-detail></site-detail>'
+
+    })
+    .state('createslice', {
+      url:'/site/:site/slice/',
+      template:'<create-slice></create-slice>'
+
+    })
+    .state('editslice', {
+      url:'/site/:site/slice/:id?',
+      template:'<edit-slice></edit-slice>'
+
+    });;
+
+})
+.config(function($httpProvider){
+  $httpProvider.interceptors.push('NoHyperlinks');
+})
+.directive('usersList', function(){
+  return {
+    //sites : {},
+    restrict: 'E',
+    scope: {},
+    bindToController: true,
+    controllerAs: 'vm',
+    templateUrl: 'templates/users-list.tpl.html',
+    controller: function(Sites,SlicesPlus){
+
+
+
+      this.tableConfig = {
+        columns: [
+          {
+            label: 'Site1',
+            prop: 'name',
+            link: item => `/#/site/${item.id}`
+          },
+          {
+            label: 'Allocated',
+            prop: 'instance_total'
+          },
+          {
+            label: 'Ready',
+            prop: 'instance_total_ready'
+          }
+        ]
+      };
+
+      var sites;
+      // retrieving user list
+      Sites.query().$promise
+      .then((users) => {
+        this.sites = users;
+        return  SlicesPlus.query().$promise
+      })
+      .then((users) => {
+        this.slices = users;
+        //console.log(this.sites,this.slices);
+        this.site_list = this.returnData(this.sites,this.slices);
+      })
+      .catch((e) => {
+        throw new Error(e);
+      });
+      //console.log(sites);
+
+
+       this.returnData = (sites,slices) => {
+        //console.log(sites,slices);
+        //console.log(sites.length)
+        var i,j=0;
+        var site_list=[];
+        var slice_list = [];
+
+        for(i = 0; i<sites.length; i++){
+          var instance_t = 0;
+          var instance_t_r = 0;
+          for(j=0;j<slices.length;j++){
+           if (sites[i].id != null && slices[j].site !=null && sites[i].id == slices[j].site){
+             console.log(sites[i].id,slices[j].id);
+             instance_t = instance_t + slices[j].instance_total;
+             instance_t_r = instance_t_r + slices[j].instance_total_ready;
+           }
+          }
+          var data_sites = {
+             'id': sites[i].id,
+               'name': sites[i].name,
+               'instance_total' :instance_t,
+               'instance_total_ready' : instance_t_r
+          };
+          //console.log(sites[i].id);
+          site_list.push(data_sites);
+        }
+        return site_list
+        //this.site_list = site_list;
+      }
+    }
+  };
+})
+.directive('siteDetail', function(){
+  return {
+    restrict: 'E',
+    scope: {},
+    bindToController: true,
+    controllerAs: 'sl',
+    templateUrl: 'templates/slicelist.html',
+    controller: function(SlicesPlus,$stateParams){
+      console.log($stateParams);
+        this.siteId = $stateParams.id;
+      this.tableConfig = {
+        columns: [
+          {
+            label: 'Slice List',
+            prop: 'name',
+            link: item => `/#/site/${item.site}/slice/${item.id}`
+          },
+          {
+            label: 'Allocated',
+            prop: 'instance_total'
+          },
+          {
+            label: 'Ready',
+            prop: 'instance_total_ready'
+          }
+        ]
+      };
+
+      // retrieving user list
+      SlicesPlus.query({
+        site:$stateParams.id
+      }).$promise
+      .then((users) => {
+        this.users = users;
+      })
+      .catch((e) => {
+        throw new Error(e);
+      });
+    }
+  };
+})
+.directive('createSlice', function(){
+  return {
+    //sites : {},
+    restrict: 'E',
+    scope: {},
+    bindToController: true,
+    controllerAs: 'cs',
+    templateUrl: 'templates/createslice.html',
+    controller: function(Slices,SlicesPlus,$stateParams){
+      //var sites;
+      //console.log(this.users.name);
+
+      //console.log(this.config);
+      this.config = {
+      exclude: ['password', 'last_login'],
+      formName: 'SliceDetails',
+      actions: [
+        {
+          label: 'Save',
+          icon: 'ok', // refers to bootstraps glyphicon
+          cb: (user) => { // receive the model
+            console.log(user);
+          },
+          class: 'success'
+        },{
+          label: 'Save and continue editing',
+          icon: 'ok', // refers to bootstraps glyphicon
+          cb: (user) => { // receive the model
+            console.log(user);
+          },
+          class: 'primary'
+        },{
+          label: 'Save and add another',
+          icon: 'ok', // refers to bootstraps glyphicon
+          cb: (user) => { // receive the model
+            console.log(user);
+          },
+          class: 'primary'
+        }
+      ],
+      fields:
+        {
+           site_select : {
+              label:'Site',
+              type:'select',
+              validators:{ required: true,},
+              hint : 'The Site this Slice belongs to',
+              options:[
+                  {
+                  id:0,
+                  label:"---Site---"
+                  },
+                  {
+                  id:1,
+                  label:"---Site1---"
+                  }],
+
+            },
+          first_name: {
+            label:'Name',
+            type: 'string',
+                hint: 'The Name of the Slice',
+            validators: {
+              required: true
+            }
+          },
+          service_class : {
+              label:'ServiceClass',
+              type:'select',
+              validators:{ required: true,},
+              hint : 'The Site this Slice belongs to',
+              options:[
+                  {
+                  id:0,
+                  label:"Best effort"
+                  },
+                  ],
+            },
+          enabled: {
+            label: 'Enabled',
+            type : 'boolean',
+            hint:'Status for this Slice'
+          },
+          description: {
+            label: 'Description',
+            type : 'string',
+            hint:'High level description of the slice and expected activities',
+            validators: {
+              required: false,
+              minlength: 10
+            }
+          },
+          service : {
+              label:'Service',
+              type:'select',
+              validators:{ required: false,},
+              options:[
+                  {
+                  id:0,
+                  label:"--------"
+                  },
+                  ],
+            },
+          slice_url: {
+            label: 'Slice url',
+            type : 'string',
+            validators: {
+              required: false,
+              minlength: 10
+            }
+          },
+          max_instances: {
+            type: 'Max Instances',
+            validators: {
+              required: false,
+              min: 0
+            }
+          },
+          default_isolation : {
+              label:'Default Isolation',
+              type:'select',
+              validators:{ required: false,},
+              options:[
+                  {
+                  id:0,
+                  label:"Virtual Machine"
+                  },{
+                  id:1,
+                  label:"Container"
+                  },{
+                  id:2,
+                  label:"Container in VM"
+                  },
+                  ],
+          },
+          default_image : {
+              label:'Default image',
+              type:'select',
+              validators:{ required: false,},
+              options:[
+                  {
+                  id:0,
+                  label:"trusty-server-multi-nic"
+                  },
+                  ],
+          },
+          network : {
+              label:'Network',
+              type:'select',
+              validators:{ required: false,},
+              options:[
+                  {
+                  id:0,
+                  label:"Default"
+                  },
+                  {
+                  id:1,
+                  label:"Host"
+                  },
+                  {
+                  id:2,
+                  label:"Bridged"
+                  },
+                  {
+                  id:3,
+                  label:"No Automatic Networks"
+                  },
+                  ],
+          },
+
+      }
+    };
+
+      var data;
+      // retrieving user list
+
+
+      //Slices.get({id :$stateParams.id}).$promise
+      //.then((users) => {
+      //  this.users = users;
+      //    //console.log(users.name);
+      //    data = users;
+      //})
+      //.catch((e) => {
+      //  throw new Error(e);
+      //});
+
+      //console.log(this.users);
+//console.log(this.config.fields.site_select.options);
+    this.model = {
+      };
+    }
+  };
+})
+.directive('editSlice', function(){
+  return {
+    //sites : {},
+    restrict: 'E',
+    scope: {},
+    bindToController: true,
+    controllerAs: 'cs',
+    templateUrl: 'templates/createslice.html',
+    controller: function(Slices,SlicesPlus,$stateParams){
+      //var sites;
+      //console.log(this.users.name);
+
+      //console.log(this.config);
+      this.config = {
+      exclude: ['password', 'last_login'],
+      formName: 'SliceDetails',
+      actions: [
+        {
+          label: 'Save',
+          icon: 'ok', // refers to bootstraps glyphicon
+          cb: (user) => { // receive the model
+            console.log(user);
+          },
+          class: 'success'
+        },{
+          label: 'Save and continue editing',
+          icon: 'ok', // refers to bootstraps glyphicon
+          cb: (user) => { // receive the model
+            console.log(user);
+          },
+          class: 'primary'
+        },{
+          label: 'Save and add another',
+          icon: 'ok', // refers to bootstraps glyphicon
+          cb: (user) => { // receive the model
+            console.log(user);
+          },
+          class: 'primary'
+        }
+      ],
+      fields:
+        {
+           site_select : {
+              label:'Site',
+              type:'select',
+              validators:{ required: true,},
+              hint : 'The Site this Slice belongs to',
+              options:[
+                  {
+                  id:0,
+                  label:"---Site---"
+                  },
+                  {
+                  id:1,
+                  label:"---Site1---"
+                  }],
+
+            },
+          first_name: {
+            label:'Name',
+            type: 'string',
+                hint: 'The Name of the Slice',
+            validators: {
+              required: true
+            }
+          },
+          service_class : {
+              label:'ServiceClass',
+              type:'select',
+              validators:{ required: true,},
+              hint : 'The Site this Slice belongs to',
+              options:[
+                  {
+                  id:0,
+                  label:"Best effort"
+                  },
+                  ],
+            },
+          enabled: {
+            label: 'Enabled',
+            type : 'boolean',
+            hint:'Status for this Slice'
+          },
+          description: {
+            label: 'Description',
+            type : 'string',
+            hint:'High level description of the slice and expected activities',
+            validators: {
+              required: false,
+              minlength: 10
+            }
+          },
+          service : {
+              label:'Service',
+              type:'select',
+              validators:{ required: false,},
+              options:[
+                  {
+                  id:0,
+                  label:"--------"
+                  },
+                  ],
+            },
+          slice_url: {
+            label: 'Slice url',
+            type : 'string',
+            validators: {
+              required: false,
+              minlength: 10
+            }
+          },
+          max_instances: {
+            type: 'Max Instances',
+            validators: {
+              required: false,
+              min: 0
+            }
+          },
+          default_isolation : {
+              label:'Default Isolation',
+              type:'select',
+              validators:{ required: false,},
+              options:[
+                  {
+                  id:0,
+                  label:"Virtual Machine"
+                  },{
+                  id:1,
+                  label:"Container"
+                  },{
+                  id:2,
+                  label:"Container in VM"
+                  },
+                  ],
+          },
+          default_image : {
+              label:'Default image',
+              type:'select',
+              validators:{ required: false,},
+              options:[
+                  {
+                  id:0,
+                  label:"trusty-server-multi-nic"
+                  },
+                  ],
+          },
+          network : {
+              label:'Network',
+              type:'select',
+              validators:{ required: false,},
+              options:[
+                  {
+                  id:0,
+                  label:"Default"
+                  },
+                  {
+                  id:1,
+                  label:"Host"
+                  },
+                  {
+                  id:2,
+                  label:"Bridged"
+                  },
+                  {
+                  id:3,
+                  label:"No Automatic Networks"
+                  },
+                  ],
+          },
+
+      }
+    };
+
+      var data;
+      // retrieving user list
+
+
+      Slices.get({id :$stateParams.id}).$promise
+      .then((users) => {
+        this.users = users;
+          //console.log(users.name);
+          data = users;
+      })
+      .catch((e) => {
+        throw new Error(e);
+      });
+
+      //console.log(this.users);
+//console.log(this.config.fields.site_select.options);
+    this.model = {
+        first_name : "Teo"
+      };
+    }
+  };
+});
+
+
+
