diff --git a/xos/core/xoslib/.eslintignore b/xos/core/xoslib/.eslintignore
index be5c014..f848d64 100644
--- a/xos/core/xoslib/.eslintignore
+++ b/xos/core/xoslib/.eslintignore
@@ -1,4 +1,6 @@
 node_modules/**/*.js
+xos-builder/node_modules/**/*.js
 static/js/xsh/**/*.js
 static/js/vendor/**/*.js
-spec/helpers/*.js
\ No newline at end of file
+spec/helpers/*.js
+coverage/**/*
\ No newline at end of file
diff --git a/xos/core/xoslib/.eslintrc b/xos/core/xoslib/.eslintrc
index 3615cae..5c8b35d 100644
--- a/xos/core/xoslib/.eslintrc
+++ b/xos/core/xoslib/.eslintrc
@@ -15,7 +15,8 @@
     }],
     "valid-jsdoc": 2,
     "max-len": [1, 120, 4, {"ignoreComments": true, "ignoreUrls": true}],
-    brace-style: [2, "stroustrup"]
+    brace-style: [2, "stroustrup"],
+    space-before-blocks: [1, 'never']
   },
   "globals": {
     "$": false,
diff --git a/xos/core/xoslib/karma.conf.js b/xos/core/xoslib/karma.conf.js
index 752b994..0d0b15b 100644
--- a/xos/core/xoslib/karma.conf.js
+++ b/xos/core/xoslib/karma.conf.js
@@ -53,7 +53,7 @@
     exclude: [
       // '**/xos-utils.test.js', //skip this test, useful in dev, comment before commit
       // '**/xos-backbone.test.js',
-      //'**/xoslib/**/*.js'
+      // '**/xoslib/**/*.js'
     ],
 
 
diff --git a/xos/core/xoslib/spec/views/contentprovider.test.js b/xos/core/xoslib/spec/views/contentprovider.test.js
index 64b676a..6d9a9c2 100644
--- a/xos/core/xoslib/spec/views/contentprovider.test.js
+++ b/xos/core/xoslib/spec/views/contentprovider.test.js
@@ -10,29 +10,31 @@
   // preload Html Templates with ng-html2js
   beforeEach(module('templates'));
 
-  beforeEach(function() {
-    module(function($provide) {
+  beforeEach(function(){
+    module(function($provide){
       // mocking routeParams to pass 1 as id
-      $provide.provider('$routeParams', function() {
-        this.$get = function() {
+      $provide.provider('$routeParams', function(){
+        /* eslint-disable no-invalid-this*/
+        this.$get = function(){
           return {id: 1};
         };
+        /* eslint-enable no-invalid-this*/
       });
     });
   });
 
-  beforeEach(inject(function(_$location_, $httpBackend) {
+  beforeEach(inject(function(_$location_, $httpBackend){
     spyOn(_$location_, 'url');
     mockLocation = _$location_;
     httpBackend = $httpBackend;
     // Setting up mock request
-    $httpBackend.whenGET('/hpcapi/contentproviders/').respond(CPmock.CPlist);
-    $httpBackend.whenGET('/hpcapi/serviceproviders/').respond(CPmock.SPlist);
-    $httpBackend.whenDELETE('/hpcapi/contentproviders/1/').respond();
+    $httpBackend.whenGET('/hpcapi/contentproviders/?no_hyperlinks=1').respond(CPmock.CPlist);
+    $httpBackend.whenGET('/hpcapi/serviceproviders/?no_hyperlinks=1').respond(CPmock.SPlist);
+    $httpBackend.whenDELETE('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond();
   }));
 
   describe('the action directive', () => {
-    beforeEach(inject(function($compile, $rootScope) {
+    beforeEach(inject(function($compile, $rootScope){
       scope = $rootScope.$new();
 
       element = angular.element('<cp-actions id="\'1\'"></cp-actions>');
@@ -49,7 +51,7 @@
   });
 
   describe('the contentProvider list', () => {
-    beforeEach(inject(function($compile, $rootScope) {
+    beforeEach(inject(function($compile, $rootScope){
       scope = $rootScope.$new();
 
       element = angular.element('<content-provider-list></content-provider-list>');
@@ -73,26 +75,16 @@
 
   describe('the contentProviderDetail directive', () => {
 
-    beforeEach(inject(function($compile, $rootScope) {
+    beforeEach(inject(function($compile, $rootScope){
       scope = $rootScope.$new();
       element = angular.element('<content-provider-detail></content-provider-detail>');
       $compile(element)(scope);
-      httpBackend.expectGET('/hpcapi/contentproviders/1/').respond(CPmock.CPlist[0]);
+      httpBackend.expectGET('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
       scope.$digest();
       httpBackend.flush();
       isolatedScope = element.isolateScope().vm;
     }));
 
-    it('should select the active service provider', () => {
-      var res = isolatedScope.activeServiceProvide(1, 'http://0.0.0.0:9000/hpcapi/serviceproviders/1/');
-      expect(res).toBe(true);
-    });
-
-    it('should not select a non active service provider', () => {
-      var res = isolatedScope.activeServiceProvide(1, 'http://0.0.0.0:9000/hpcapi/serviceproviders/3/');
-      expect(res).toBe(false);
-    });
-
     describe('when an id is set in the route', () => {
 
       beforeEach(() => {
@@ -117,11 +109,11 @@
       scope = $rootScope.$new();
       element = angular.element('<content-provider-cdn></content-provider-cdn>');
       $compile(element)(scope);
-      httpBackend.expectGET('/hpcapi/contentproviders/1/').respond(CPmock.CPlist[0]);
-      httpBackend.expectGET('/hpcapi/cdnprefixs/?contentProvider=1').respond([CPmock.CDNlist[0]]);
-      httpBackend.expectGET('/hpcapi/cdnprefixs/').respond(CPmock.CDNlist);
-      httpBackend.whenPOST('/hpcapi/cdnprefixs/').respond(CPmock.CDNlist[0]);
-      httpBackend.whenDELETE('/hpcapi/cdnprefixs/5/').respond();
+      httpBackend.expectGET('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
+      // httpBackend.expectGET('/hpcapi/cdnprefixs/?no_hyperlinks=1&contentProvider=1').respond([CPmock.CDNlist[0]]);
+      httpBackend.expectGET('/hpcapi/cdnprefixs/?no_hyperlinks=1').respond(CPmock.CDNlist);
+      httpBackend.whenPOST('/hpcapi/cdnprefixs/?no_hyperlinks=1').respond(CPmock.CDNlist[0]);
+      httpBackend.whenDELETE('/hpcapi/cdnprefixs/5/?no_hyperlinks=1').respond();
       scope.$digest();
       httpBackend.flush();
       isolatedScope = element.isolateScope().vm;
@@ -150,10 +142,10 @@
       scope = $rootScope.$new();
       element = angular.element('<content-provider-server></content-provider-server>');
       $compile(element)(scope);
-      httpBackend.expectGET('/hpcapi/contentproviders/1/').respond(CPmock.CPlist[0]);
-      httpBackend.expectGET('/hpcapi/originservers/?contentProvider=1').respond(CPmock.OSlist);
-      httpBackend.whenPOST('/hpcapi/originservers/').respond(CPmock.OSlist[0]);
-      httpBackend.whenDELETE('/hpcapi/originservers/8/').respond();
+      httpBackend.expectGET('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
+      httpBackend.expectGET('/hpcapi/originservers/?no_hyperlinks=1&contentProvider=1').respond(CPmock.OSlist);
+      httpBackend.whenPOST('/hpcapi/originservers/?no_hyperlinks=1').respond(CPmock.OSlist[0]);
+      httpBackend.whenDELETE('/hpcapi/originservers/8/?no_hyperlinks=1').respond();
       scope.$digest();
       httpBackend.flush();
       isolatedScope = element.isolateScope().vm;
@@ -175,4 +167,49 @@
       expect(isolatedScope.cp_os.length).toBe(3);
     });
   });
+
+  describe('the contentProviderUsers directive', () => {
+    beforeEach(inject(($compile, $rootScope) => {
+      scope = $rootScope.$new();
+      element = angular.element('<content-provider-users></content-provider-users>');
+      $compile(element)(scope);
+      httpBackend.expectGET('/xos/users/?no_hyperlinks=1').respond(CPmock.UserList);
+      httpBackend.expectGET('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
+      httpBackend.whenPUT('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
+      scope.$digest();
+      httpBackend.flush();
+      isolatedScope = element.isolateScope().vm;
+    }));
+
+    it('should render one user', () => {
+      expect(isolatedScope.cp.users.length).toBe(1);
+      expect(typeof isolatedScope.cp.users[0]).toEqual('object');
+    });
+
+    it('should add a user', () => {
+      isolatedScope.addUserToCp({name: 'teo'});
+      expect(isolatedScope.cp.users.length).toBe(2);
+    });
+
+    it('should remove a user', () => {
+      isolatedScope.addUserToCp({name: 'teo'});
+      expect(isolatedScope.cp.users.length).toBe(2);
+      isolatedScope.removeUserFromCp({name: 'teo'});
+      expect(isolatedScope.cp.users.length).toBe(1);
+    });
+
+    it('should save and reformat users', () => {
+      // add a user
+      isolatedScope.cp.users.push(1);
+
+      //trigger save
+      isolatedScope.saveContentProvider(isolatedScope.cp);
+
+      httpBackend.flush();
+
+      // I'll get one as the BE is mocked, the important is to check the conversion
+      expect(isolatedScope.cp.users.length).toBe(1);
+      expect(typeof isolatedScope.cp.users[0]).toEqual('object');
+    });
+  });
 });
diff --git a/xos/core/xoslib/spec/views/mocks/contentProvider.mock.js b/xos/core/xoslib/spec/views/mocks/contentProvider.mock.js
index c0d1750..46a0b0e 100644
--- a/xos/core/xoslib/spec/views/mocks/contentProvider.mock.js
+++ b/xos/core/xoslib/spec/views/mocks/contentProvider.mock.js
@@ -1,4 +1,4 @@
-/* eslint-disable key-spacing */
+/* eslint-disable key-spacing, no-unused-vars */
 
 var CPmock = {
   CPlist: [
@@ -69,6 +69,7 @@
       'name':'on_lab_content',
       'enabled':true,
       'description':null,
+      users: [2],
       'serviceProvider':'http://0.0.0.0:9000/hpcapi/serviceproviders/1/'
     },
     {
@@ -281,7 +282,7 @@
       'no_sync':false,
       'cdn_prefix_id':null,
       'prefix':'onlab.vicci.org',
-      'contentProvider':'http://0.0.0.0:9000/hpcapi/contentproviders/1/',
+      'contentProvider':1,
       'description':null,
       'defaultOriginServer':'http://0.0.0.0:9000/hpcapi/originservers/2/',
       'enabled':true
@@ -354,7 +355,7 @@
       'no_sync':false,
       'cdn_prefix_id':null,
       'prefix':'downloads.onosproject.org',
-      'contentProvider':'http://0.0.0.0:9000/hpcapi/contentproviders/2/',
+      'contentProvider':2,
       'description':null,
       'defaultOriginServer':'http://0.0.0.0:9000/hpcapi/originservers/1/',
       'enabled':true
@@ -685,5 +686,225 @@
       'redirects':true,
       'description':null
     }
+  ],
+  UserList: [
+    {
+      'humanReadableName':'teo@onlab.us',
+      'validators':{
+        'policed':[
+          'notBlank'
+        ],
+        'site':[
+          'notBlank'
+        ],
+        'is_appuser':[
+
+        ],
+        'is_staff':[
+
+        ],
+        'timezone':[
+          'notBlank'
+        ],
+        'backend_status':[
+          'notBlank'
+        ],
+        'id':[
+
+        ],
+        'is_registering':[
+
+        ],
+        'last_login':[
+          'notBlank'
+        ],
+        'email':[
+          'notBlank'
+        ],
+        'username':[
+          'notBlank'
+        ],
+        'updated':[
+
+        ],
+        'login_page':[
+
+        ],
+        'firstname':[
+          'notBlank'
+        ],
+        'user_url':[
+          'url'
+        ],
+        'deleted':[
+
+        ],
+        'lastname':[
+          'notBlank'
+        ],
+        'is_active':[
+
+        ],
+        'phone':[
+
+        ],
+        'is_admin':[
+
+        ],
+        'password':[
+          'notBlank'
+        ],
+        'enacted':[
+          'notBlank'
+        ],
+        'public_key':[
+
+        ],
+        'is_readonly':[
+
+        ],
+        'created':[
+
+        ],
+        'write_protect':[
+
+        ]
+      },
+      'id':2,
+      'password':'pbkdf2_sha256$12000$2Uzp1YCyjEBO$uU2irK//ZpEZYOIgLzanuApFoPnwfG1jNol2jD273wQ=',
+      'last_login':'2015-10-26T14:11:27.625Z',
+      'email':'teo@onlab.us',
+      'username':'teo@onlab.us',
+      'firstname':'Matteo',
+      'lastname':'Scandolo',
+      'phone':'',
+      'user_url':null,
+      'site':1,
+      'public_key':'',
+      'is_active':true,
+      'is_admin':false,
+      'is_staff':true,
+      'is_readonly':false,
+      'is_registering':false,
+      'is_appuser':false,
+      'login_page':null,
+      'created':'2015-10-26T14:11:27.699Z',
+      'updated':'2015-10-26T14:11:27.699Z',
+      'enacted':null,
+      'policed':null,
+      'backend_status':'Provisioning in progress',
+      'deleted':false,
+      'write_protect':false,
+      'timezone':'America/New_York'
+    },
+    {
+      'humanReadableName':'padmin@vicci.org',
+      'validators':{
+        'policed':[
+          'notBlank'
+        ],
+        'site':[
+          'notBlank'
+        ],
+        'is_appuser':[
+
+        ],
+        'is_staff':[
+
+        ],
+        'timezone':[
+          'notBlank'
+        ],
+        'backend_status':[
+          'notBlank'
+        ],
+        'id':[
+
+        ],
+        'is_registering':[
+
+        ],
+        'last_login':[
+          'notBlank'
+        ],
+        'email':[
+          'notBlank'
+        ],
+        'username':[
+          'notBlank'
+        ],
+        'updated':[
+
+        ],
+        'login_page':[
+
+        ],
+        'firstname':[
+          'notBlank'
+        ],
+        'user_url':[
+          'url'
+        ],
+        'deleted':[
+
+        ],
+        'lastname':[
+          'notBlank'
+        ],
+        'is_active':[
+
+        ],
+        'phone':[
+
+        ],
+        'is_admin':[
+
+        ],
+        'password':[
+          'notBlank'
+        ],
+        'enacted':[
+          'notBlank'
+        ],
+        'public_key':[
+
+        ],
+        'is_readonly':[
+
+        ],
+        'created':[
+
+        ],
+        'write_protect':[
+
+        ]
+      },
+      'id':1,
+      'password':'pbkdf2_sha256$12000$Qufx9iqtaYma$xs0YurPOcj9qYQna/Qrb3K+im9Yr2XEVr0J4Kqek7AE=',
+      'last_login':'2015-10-27T10:07:09.065Z',
+      'email':'padmin@vicci.org',
+      'username':'padmin@vicci.org',
+      'firstname':'XOS',
+      'lastname':'admin',
+      'phone':null,
+      'user_url':null,
+      'site':1,
+      'public_key':null,
+      'is_active':true,
+      'is_admin':true,
+      'is_staff':true,
+      'is_readonly':false,
+      'is_registering':false,
+      'is_appuser':false,
+      'login_page':null,
+      'created':'2015-02-17T22:06:38.059Z',
+      'updated':'2015-10-27T09:00:44.672Z',
+      'enacted':null,
+      'policed':null,
+      'backend_status':'Provisioning in progress',
+      'deleted':false,
+      'write_protect':false,
+      'timezone':'America/New_York'
+    }
   ]
 };
\ No newline at end of file
diff --git a/xos/core/xoslib/spec/xoslib/xos-backbone.test.js b/xos/core/xoslib/spec/xoslib/xos-backbone.test.js
index c971af7..90d3c83 100644
--- a/xos/core/xoslib/spec/xoslib/xos-backbone.test.js
+++ b/xos/core/xoslib/spec/xoslib/xos-backbone.test.js
@@ -41,7 +41,7 @@
     var testLib;
 
     beforeEach(() => {
-      var TestLibDefinition = function() {
+      var TestLibDefinition = function(){
         /* eslint-disable no-invalid-this*/
         this.allCollectionNames = [];
         this.allCollections = [];
diff --git a/xos/core/xoslib/spec/xoslib/xos-helper.test.js b/xos/core/xoslib/spec/xoslib/xos-helper.test.js
index 9e3e33d..7c0a506 100644
--- a/xos/core/xoslib/spec/xoslib/xos-helper.test.js
+++ b/xos/core/xoslib/spec/xoslib/xos-helper.test.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-unused-vars*/
 'use strict';
 
 describe('The Xos Helper', () => {
@@ -16,7 +17,7 @@
       const err = {name: 'must start with mysite_'};
       var view;
       beforeEach(() => {
-        try {
+        try{
           f.set(`
             <script type="text/template" id="fake-template">
               <div>
@@ -39,9 +40,7 @@
 
         // view.onFormDataInvalid(err);
         // view().onFormDataInvalid(err)
-        
-        console.log(new view()); 
-        
+
         expect($('.alert').length).toBe(1);
       });
     });
diff --git a/xos/core/xoslib/spec/xoslib/xos-utils.test.js b/xos/core/xoslib/spec/xoslib/xos-utils.test.js
index fd0193e..52de8d8 100644
--- a/xos/core/xoslib/spec/xoslib/xos-utils.test.js
+++ b/xos/core/xoslib/spec/xoslib/xos-utils.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-describe('The XOS Lib Utilities', function() {
+describe('The XOS Lib Utilities', function(){
 
   var f;
 
@@ -9,7 +9,7 @@
     f.fixturesPath = 'base/spec/xoslib/fixtures/xos-utils';
   });
 
-  describe('The idInArray method', function() {
+  describe('The idInArray method', function(){
     it('should match a string ID', () => {
       let res = idInArray('1', [1, 2, 3]);
       expect(res).toBeTruthy();
@@ -169,7 +169,7 @@
 
     it('should set elements to same width', () => {
       make_same_width('.container', 'div');
-      $('.container div').each(function(index, item) {
+      $('.container div').each(function(index, item){
         expect($(item)).toHaveCss({width: '400px'});
       });
     });
diff --git a/xos/core/xoslib/spec/xoslib/xoslib.test.js b/xos/core/xoslib/spec/xoslib/xoslib.test.js
index 5227b80..97d85f9 100644
--- a/xos/core/xoslib/spec/xoslib/xoslib.test.js
+++ b/xos/core/xoslib/spec/xoslib/xoslib.test.js
@@ -1,3 +1,4 @@
+/* eslint-disable new-cap*/
 'use strict';
 
 describe('When XOS Lib is created', () => {
diff --git a/xos/core/xoslib/static/js/gentle.js b/xos/core/xoslib/static/js/gentle.js
index 008886a..a0d8dde 100644
--- a/xos/core/xoslib/static/js/gentle.js
+++ b/xos/core/xoslib/static/js/gentle.js
@@ -21,7 +21,7 @@
   childView: ContactManager.ContactItemView
 });
 
-ContactManager.on('start', function() {
+ContactManager.on('start', function(){
   var contacts = new ContactManager.ContactCollection([
     {
       firstName: 'Bob',
diff --git a/xos/core/xoslib/static/js/helloworld.js b/xos/core/xoslib/static/js/helloworld.js
index d34a968..166d183 100644
--- a/xos/core/xoslib/static/js/helloworld.js
+++ b/xos/core/xoslib/static/js/helloworld.js
@@ -1,4 +1,4 @@
-/* eslint-disable guard-for-in */
+/* eslint-disable guard-for-in, space-before-blocks */
 
 // helloworld.js
 function updateHelloWorldData() {
diff --git a/xos/core/xoslib/static/js/picker.js b/xos/core/xoslib/static/js/picker.js
index 35b6cd1..3303197 100644
--- a/xos/core/xoslib/static/js/picker.js
+++ b/xos/core/xoslib/static/js/picker.js
@@ -1,3 +1,5 @@
+/* eslint-disable space-before-blocks, no-unused-vars */
+
 function init_picker(selector, ordered) {
   //console.log("init_picker");
   //console.log($(selector));
@@ -31,7 +33,9 @@
       var newPos = to.find('option').index(this) - 1;
 
       if (newPos > -1) {
-        to.find('option').eq(newPos).before('<option value="' + $(this).val() + '" selected="selected">' + $(this).text() + '</option>');
+        to.find('option').eq(newPos).before(
+          '<option value="' + $(this).val() + '" selected="selected">' + $(this).text() + '</option>'
+        );
         $(this).remove();
       }
     });
@@ -43,7 +47,9 @@
       var newPos = to.find('option').index(this) + 1;
 
       if (newPos < countOptions) {
-        to.find('option').eq(newPos).after('<option value="' + $(this).val() + '" selected="selected">' + $(this).text() + '</option>');
+        to.find('option').eq(newPos).after(
+          '<option value="' + $(this).val() + '" selected="selected">' + $(this).text() + '</option>'
+        );
         $(this).remove();
       }
     });
diff --git a/xos/core/xoslib/static/js/xosContentProvider.js b/xos/core/xoslib/static/js/xosContentProvider.js
index 0c21fe3..98aaedd 100644
--- a/xos/core/xoslib/static/js/xosContentProvider.js
+++ b/xos/core/xoslib/static/js/xosContentProvider.js
@@ -14,7 +14,7 @@
   'ngCookies',
   'ngLodash'
 ])
-.config(function($interpolateProvider, $routeProvider, $resourceProvider) {
+.config(function($interpolateProvider, $routeProvider, $resourceProvider){
   $interpolateProvider.startSymbol('{$');
   $interpolateProvider.endSymbol('$}');
 
@@ -39,39 +39,45 @@
   })
   .otherwise('/');
 })
-.config(function($httpProvider) {
+.config(function($httpProvider){
 
   // add X-CSRFToken header for update, create, delete (!GET)
   $httpProvider.interceptors.push('SetCSRFToken');
 })
-.factory('SetCSRFToken', function($cookies) {
+.factory('SetCSRFToken', function($cookies){
   return {
-    request: function(request) {
-      if(request.method !== 'GET') {
+    request: function(request){
+
+      // if request is not HTML
+      if(request.url.indexOf('.html') === -1){
+        request.url += '?no_hyperlinks=1';
+      }
+
+      if(request.method !== 'GET'){
         request.headers['X-CSRFToken'] = $cookies.get('csrftoken');
       }
       return request;
     }
   };
 })
-.service('ContentProvider', function($resource, $q, User) {
+.service('ContentProvider', function($resource){
   return $resource('/hpcapi/contentproviders/:id/', {id: '@id'}, {
     'update': {method: 'PUT'}
   });
 })
-.service('ServiceProvider', function($resource) {
+.service('ServiceProvider', function($resource){
   return $resource('/hpcapi/serviceproviders/:id/', {id: '@id'});
 })
-.service('CdnPrefix', function($resource) {
+.service('CdnPrefix', function($resource){
   return $resource('/hpcapi/cdnprefixs/:id/', {id: '@id'});
 })
-.service('OriginServer', function($resource) {
+.service('OriginServer', function($resource){
   return $resource('/hpcapi/originservers/:id/', {id: '@id'});
 })
-.service('User', function($resource) {
+.service('User', function($resource){
   return $resource('/xos/users/:id/', {id: '@id'});
 })
-.directive('cpActions', function(ContentProvider, $location) {
+.directive('cpActions', function(ContentProvider, $location){
   return {
     restrict: 'E',
     scope: {
@@ -80,105 +86,94 @@
     bindToController: true,
     controllerAs: 'vm',
     templateUrl: '../../static/templates/contentProvider/cp_actions.html',
-    controller: function() {
-      this.deleteCp = function(id) {
+    controller: function(){
+      this.deleteCp = function(id){
         ContentProvider.delete({id: id}).$promise
-        .then(function() {
+        .then(function(){
           $location.url('/');
         });
       };
     }
   };
 })
-.directive('contentProviderList', function(ContentProvider, lodash) {
+.directive('contentProviderList', function(ContentProvider, lodash){
   return {
     restrict: 'E',
     controllerAs: 'vm',
     scope: {},
     templateUrl: '../../static/templates/contentProvider/cp_list.html',
-    controller: function() {
+    controller: function(){
       var _this = this;
 
       ContentProvider.query().$promise
-      .then(function(cp) {
+      .then(function(cp){
         _this.contentProviderList = cp;
       })
-      .catch(function(e) {
+      .catch(function(e){
         throw new Error(e);
       });
 
-      this.deleteCp = function(id) {
+      this.deleteCp = function(id){
         ContentProvider.delete({id: id}).$promise
-        .then(function() {
+        .then(function(){
           lodash.remove(_this.contentProviderList, {id: id});
         });
       };
     }
   };
 })
-.directive('contentProviderDetail', function(ContentProvider, ServiceProvider, $routeParams, $location) {
+.directive('contentProviderDetail', function(ContentProvider, ServiceProvider, $routeParams, $location){
   return {
     restrict: 'E',
     controllerAs: 'vm',
     scope: {},
     templateUrl: '../../static/templates/contentProvider/cp_detail.html',
-    controller: function() {
+    controller: function(){
       this.pageName = 'detail';
       var _this = this;
 
-      if($routeParams.id) {
+      if($routeParams.id){
         ContentProvider.get({id: $routeParams.id}).$promise
-        .then(function(cp) {
+        .then(function(cp){
           _this.cp = cp;
-        }).catch(function(e) {
+        }).catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
           };
         });
       }
-      else {
-        console.log('new');
+      else{
         _this.cp = new ContentProvider();
       }
 
       ServiceProvider.query().$promise
-      .then(function(sp) {
+      .then(function(sp){
         _this.sp = sp;
       });
 
-      // check if the list id match with item url
-      this.activeServiceProvide = function(id, SPurl) {
-        if(SPurl && SPurl.length > 0) {
-          // take the last 2 char and remove trailing /
-          return parseInt(SPurl.substr(SPurl.length - 2).replace('/','')) === id;
-        }
-        return false;
-      };
-
-      this.saveContentProvider = function(cp) {
+      this.saveContentProvider = function(cp){
         var p, isNew = false;
 
-        if(cp.id) {
+        if(cp.id){
           p = cp.$update();
         }
-        else {
+        else{
           isNew = true;
           cp.name = cp.humanReadableName;
-          console.log('save');
           p = cp.$save();
         }
 
-        p.then(function(res) {
+        p.then(function(res){
           _this.result = {
             status: 1,
             msg: 'Content Provider Saved'
           };
-          if(isNew) {
+          if(isNew){
             $location.url('contentProvider/' + res.id + '/');
           }
         })
-        .catch(function(e) {
+        .catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
@@ -188,22 +183,22 @@
     }
   };
 })
-.directive('contentProviderCdn', function($routeParams, CdnPrefix, ContentProvider, lodash) {
+.directive('contentProviderCdn', function($routeParams, CdnPrefix, ContentProvider, lodash){
   return{
     restrict: 'E',
     controllerAs: 'vm',
     scope: {},
     templateUrl: '../../static/templates/contentProvider/cp_cdn_prefix.html',
-    controller: function() {
+    controller: function(){
       var _this = this;
 
       this.pageName = 'cdn';
 
-      if($routeParams.id) {
+      if($routeParams.id){
         ContentProvider.get({id: $routeParams.id}).$promise
-        .then(function(cp) {
+        .then(function(cp){
           _this.cp = cp;
-        }).catch(function(e) {
+        }).catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
@@ -211,37 +206,28 @@
         });
       }
 
-      // TODO filter on client
-      CdnPrefix.query({contentProvider: $routeParams.id}).$promise
-      .then(function(cp_prf) {
-        _this.cp_prf = cp_prf;
-      }).catch(function(e) {
-        _this.result = {
-          status: 0,
-          msg: e.data.detail
-        };
-      });
-
       CdnPrefix.query().$promise
-      .then(function(prf) {
+      .then(function(prf){
         _this.prf = prf;
-      }).catch(function(e) {
+        // set the active CdnPrefix for this contentProvider
+        _this.cp_prf = lodash.where(prf, {contentProvider: parseInt($routeParams.id)});
+      }).catch(function(e){
         _this.result = {
           status: 0,
           msg: e.data.detail
         };
       });
 
-      this.addPrefix = function(prf) {
-        prf.contentProvider = '/hpcapi/contentproviders/' + $routeParams.id + '/';
+      this.addPrefix = function(prf){
+        prf.contentProvider = $routeParams.id;
 
         var item = new CdnPrefix(prf);
 
         item.$save()
-        .then(function(res) {
+        .then(function(res){
           _this.cp_prf.push(res);
         })
-        .catch(function(e) {
+        .catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
@@ -249,12 +235,12 @@
         });
       };
 
-      this.removePrefix = function(item) {
+      this.removePrefix = function(item){
         item.$delete()
-        .then(function() {
+        .then(function(){
           lodash.remove(_this.cp_prf, item);
         })
-        .catch(function(e) {
+        .catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
@@ -264,23 +250,23 @@
     }
   };
 })
-.directive('contentProviderServer', function($routeParams, OriginServer, ContentProvider, lodash) {
+.directive('contentProviderServer', function($routeParams, OriginServer, ContentProvider, lodash){
   return{
     restrict: 'E',
     controllerAs: 'vm',
     scope: {},
     templateUrl: '../../static/templates/contentProvider/cp_origin_server.html',
-    controller: function() {
+    controller: function(){
       this.pageName = 'server';
       this.protocols = {'http': 'HTTP', 'rtmp': 'RTMP', 'rtp': 'RTP','shout': 'SHOUTcast'};
 
       var _this = this;
 
-      if($routeParams.id) {
+      if($routeParams.id){
         ContentProvider.get({id: $routeParams.id}).$promise
-        .then(function(cp) {
+        .then(function(cp){
           _this.cp = cp;
-        }).catch(function(e) {
+        }).catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
@@ -288,28 +274,26 @@
         });
       }
 
-      // TODO filter on client
       OriginServer.query({contentProvider: $routeParams.id}).$promise
-      .then(function(cp_os) {
+      .then(function(cp_os){
         _this.cp_os = cp_os;
-      }).catch(function(e) {
+      }).catch(function(e){
         _this.result = {
           status: 0,
           msg: e.data.detail
         };
       });
 
-      // TODO everytime protocall error, ask Scott
-      this.addOrigin = function(os) {
-        os.contentProvider = '/hpcapi/contentproviders/' + $routeParams.id + '/';
+      this.addOrigin = function(os){
+        os.contentProvider = $routeParams.id;
 
         var item = new OriginServer(os);
 
         item.$save()
-        .then(function(res) {
+        .then(function(res){
           _this.cp_os.push(res);
         })
-        .catch(function(e) {
+        .catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
@@ -317,12 +301,12 @@
         });
       };
 
-      this.removeOrigin = function(item) {
+      this.removeOrigin = function(item){
         item.$delete()
-        .then(function() {
+        .then(function(){
           lodash.remove(_this.cp_os, item);
         })
-        .catch(function(e) {
+        .catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
@@ -332,36 +316,32 @@
     }
   };
 })
-.directive('contentProviderUsers', function($routeParams, ContentProvider, User, lodash, $q) {
+.directive('contentProviderUsers', function($routeParams, ContentProvider, User, lodash){
   return{
     restrict: 'E',
     controllerAs: 'vm',
+    scope: {},
     templateUrl: '../../static/templates/contentProvider/cp_user.html',
-    controller: function() {
+    controller: function(){
       var _this = this;
 
       this.pageName = 'user';
 
       this.cp_users = [];
 
-      if($routeParams.id) {
+      if($routeParams.id){
         User.query().$promise
-        .then(function(users) {
+        .then(function(users){
           _this.users = users;
           return ContentProvider.get({id: $routeParams.id}).$promise;
         })
-        .then(function(res) {
-          for(var i = 0; i < res.users.length; i++) {
-            var url = res.users[i];
-            var id = parseInt(url.substr(url.length - 2).replace('/',''));
-
-            res.users[i] = lodash.find(_this.users, {id: id});
-          }
+        .then(function(res){
+          res.users = _this.populateUser(res.users, _this.users);
           return res;
         })
-        .then(function(cp) {
+        .then(function(cp){
           _this.cp = cp;
-        }).catch(function(e) {
+        }).catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
@@ -369,25 +349,38 @@
         });
       }
 
-      this.addUserToCp = function(user) {
+      this.populateUser = function(ids, list){
+        for(var i = 0; i < ids.length; i++){
+          ids[i] = lodash.find(list, {id: ids[i]});
+        }
+        return ids;
+      };
+
+      this.addUserToCp = function(user){
         _this.cp.users.push(user);
       };
 
-      this.removeUserFromCp = function(user) {
+      this.removeUserFromCp = function(user){
         lodash.remove(_this.cp.users, user);
       };
 
-      this.saveContentProvider = function(cp) {
+      this.saveContentProvider = function(cp){
+
+        // flatten the user to id of array
+        cp.users = lodash.pluck(cp.users, 'id');
 
         cp.$update()
-        .then(function() {
+        .then(function(res){
+
+          _this.cp.users = _this.populateUser(res.users, _this.users);
+
           _this.result = {
             status: 1,
             msg: 'Content Provider Saved'
           };
 
         })
-        .catch(function(e) {
+        .catch(function(e){
           _this.result = {
             status: 0,
             msg: e.data.detail
diff --git a/xos/core/xoslib/static/js/xosDeveloper.js b/xos/core/xoslib/static/js/xosDeveloper.js
index e4e5afb..c1af537 100644
--- a/xos/core/xoslib/static/js/xosDeveloper.js
+++ b/xos/core/xoslib/static/js/xosDeveloper.js
@@ -1,4 +1,4 @@
-/* eslint-disable guard-for-in, no-undef*/
+/* eslint-disable guard-for-in, no-undef, space-before-blocks*/
 /* This is an example that uses xoslib + marionette to display the developer
    view.
 
@@ -42,7 +42,7 @@
   attachHtml: function(compositeView, childView, index) {
     // The REST API will let admin users see everything. For the developer
     // view we still want to hide slices we are not members of.
-    if(childView.model.get('sliceInfo').roles.length == 0) {
+    if(childView.model.get('sliceInfo').roles.length === 0) {
       return;
     }
     DeveloperApp.SliceListView.__super__.attachHtml(compositeView, childView, index);
diff --git a/xos/core/xoslib/static/js/xosDeveloper_datatables.js b/xos/core/xoslib/static/js/xosDeveloper_datatables.js
index fc0153b..e3df4c3 100644
--- a/xos/core/xoslib/static/js/xosDeveloper_datatables.js
+++ b/xos/core/xoslib/static/js/xosDeveloper_datatables.js
@@ -1,4 +1,4 @@
-/* eslint-disable guard-for-in, no-undef, indent*/
+/* eslint-disable guard-for-in, no-undef, indent, space-before-blocks*/
 
 // TODO write test and then fix lint errors
 
@@ -9,7 +9,9 @@
 */
 
 function updateSliceTable(data) {
-    $('#developerView').html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamicusersliceinfo"></table>');
+    $('#developerView').html(
+        '<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamicusersliceinfo"></table>'
+    );
     var actualEntries = [];
 
     for (rowkey in data.models) {
diff --git a/xos/core/xoslib/static/js/xosTenant.js b/xos/core/xoslib/static/js/xosTenant.js
index f933c89..0bd3604 100644
--- a/xos/core/xoslib/static/js/xosTenant.js
+++ b/xos/core/xoslib/static/js/xosTenant.js
@@ -1,6 +1,6 @@
 
 /* globals XOSModel, XOSCollection */
-/* eslint-disable no-undef, guard-for-in, new-cap */
+/* eslint-disable no-undef, guard-for-in, new-cap, space-before-blocks, no-unused-vars, no-alert, eqeqeq */
 
 XOSTenantSite = XOSModel.extend({
   listFields: ['name', 'allocated'],
diff --git a/xos/core/xoslib/static/js/xoslib/xos-defaults.js b/xos/core/xoslib/static/js/xoslib/xos-defaults.js
index 06ee0d9..4ce5f6b 100644
--- a/xos/core/xoslib/static/js/xoslib/xos-defaults.js
+++ b/xos/core/xoslib/static/js/xoslib/xos-defaults.js
@@ -1,7 +1,7 @@
 /* eslint-disable quotes, no-undef, max-len, new-cap*/
 /* eslint indent: [2, 2]*/
 console.warn('**** XOS DEFAULT ****');
-function xos_get_defaults() {
+function xos_get_defaults(){
   this.account = {"updated": null, "policed": null, "created": null, "deleted": false, "site": null, "lazy_blocked": false, "backend_register": "{}", "write_protect": false, "backend_status": "0 - Provisioning in progress", "no_sync": false, "enacted": null};
   this.charge = {"updated": null, "slice": null, "date": null, "policed": null, "created": null, "deleted": false, "object": null, "account": null, "lazy_blocked": false, "backend_register": "{}", "write_protect": false, "amount": 0.0, "state": "pending", "invoice": null, "coreHours": 0.0, "backend_status": "0 - Provisioning in progress", "kind": "besteffort", "no_sync": false, "enacted": null};
   this.coarseTenant = {"subscriber_service": null, "connect_method": "na", "updated": null, "backend_status": "0 - Provisioning in progress", "policed": null, "created": null, "deleted": false, "service_specific_attribute": null, "kind": "coarse", "lazy_blocked": false, "backend_register": "{}", "write_protect": false, "enacted": null, "service_specific_id": null, "subscriber_tenant": null, "subscriber_root": null, "subscriber_user": null, "no_sync": false, "provider_service": null};
diff --git a/xos/core/xoslib/static/js/xoslib/xos-util.js b/xos/core/xoslib/static/js/xoslib/xos-util.js
index 66c01ce..2b574e7 100644
--- a/xos/core/xoslib/static/js/xoslib/xos-util.js
+++ b/xos/core/xoslib/static/js/xoslib/xos-util.js
@@ -1,4 +1,4 @@
-/* eslint-disable indent*/
+/* eslint-disable indent, space-before-blocks, no-unused-vars*/
 ////////////////////////////
 // misc utility functions //
 ////////////////////////////
@@ -79,7 +79,9 @@
     /* eslint-disable default-case */
     switch (validatorName) {
     case 'url':
+        /* eslint-disable max-len*/
         if (! /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value)) {
+        /* eslint-enable max-len*/
             return 'must be a valid url';
         }
         break;
diff --git a/xos/core/xoslib/static/js/xoslib/xos-validators.js b/xos/core/xoslib/static/js/xoslib/xos-validators.js
index f762ef2..aa8e544 100644
--- a/xos/core/xoslib/static/js/xoslib/xos-validators.js
+++ b/xos/core/xoslib/static/js/xoslib/xos-validators.js
@@ -6,7 +6,7 @@
 
 /* eslint-disable quotes, no-undef, max-len, new-cap*/
 /* eslint indent: [2, 2]*/
-function xos_get_validators() {
+function xos_get_validators(){
   this.account = {"updated": [], "policed": [], "created": [], "deleted": [], "site": ["notBlank"], "lazy_blocked": [], "backend_register": ["notBlank"], "write_protect": [], "backend_status": ["notBlank"], "id": [], "no_sync": [], "enacted": []};
   this.charge = {"updated": [], "slice": [], "policed": [], "created": [], "deleted": [], "amount": ["notBlank"], "object": ["notBlank"], "account": ["notBlank"], "kind": ["notBlank"], "lazy_blocked": [], "backend_register": ["notBlank"], "write_protect": [], "state": ["notBlank"], "coreHours": ["notBlank"], "invoice": [], "date": ["notBlank"], "backend_status": ["notBlank"], "id": [], "no_sync": [], "enacted": []};
   this.coarseTenant = {"subscriber_service": [], "connect_method": ["notBlank"], "updated": [], "policed": [], "created": [], "deleted": [], "service_specific_attribute": [], "kind": ["notBlank"], "lazy_blocked": [], "backend_register": ["notBlank"], "write_protect": [], "subscriber_user": [], "provider_service": ["notBlank"], "service_specific_id": [], "subscriber_tenant": [], "subscriber_root": [], "backend_status": ["notBlank"], "id": [], "no_sync": [], "enacted": []};
diff --git a/xos/core/xoslib/static/templates/contentProvider/cp_cdn_prefix.html b/xos/core/xoslib/static/templates/contentProvider/cp_cdn_prefix.html
index 7367f30..cc39aab 100644
--- a/xos/core/xoslib/static/templates/contentProvider/cp_cdn_prefix.html
+++ b/xos/core/xoslib/static/templates/contentProvider/cp_cdn_prefix.html
@@ -18,7 +18,7 @@
           {{item.humanReadableName}}
         </div>
         <div class="span6">
-          <!-- TODO shoe the name instead that url -->
+          <!-- TODO show the name instead that id -->
           {{item.defaultOriginServer}}
         </div>
         <div class="span2">
@@ -38,7 +38,7 @@
         <div class="span6">
           <label>Default Origin Server</label>
           <select ng-model="vm.new_prf.defaultOriginServer" style="max-width: 100%">
-            <option ng-repeat="prf in vm.prf" ng-value="'/hpcapi/originservers/' + prf.id + '/'">{$ prf.humanReadableName $}</option>
+            <option ng-repeat="prf in vm.prf" ng-value="prf.id">{$ prf.humanReadableName $}</option>
           </select>
         </div>
         <div class="span2 text-right">
diff --git a/xos/core/xoslib/static/templates/contentProvider/cp_detail.html b/xos/core/xoslib/static/templates/contentProvider/cp_detail.html
index 7fab7f2..0c11329 100644
--- a/xos/core/xoslib/static/templates/contentProvider/cp_detail.html
+++ b/xos/core/xoslib/static/templates/contentProvider/cp_detail.html
@@ -35,9 +35,7 @@
         <div class="row-fluid">
           <div class="span12">
             <label>Service provider</label>
-            <select ng-model="vm.cp.serviceProvider" required>
-              <option ng-repeat="sp in vm.sp" ng-value="'/hpcapi/serviceproviders/' + sp.id + '/'" ng-selected="vm.activeServiceProvide(sp.id, vm.cp.serviceProvider)">{$ sp.humanReadableName $}</option>
-            </select>
+            <select required ng-model="vm.cp.serviceProvider" ng-options="sp.id as sp.humanReadableName for sp in vm.sp"></select>
           </div>
         </div>
         <div class="row-fluid">
diff --git a/xos/core/xoslib/static/templates/contentProvider/cp_user.html b/xos/core/xoslib/static/templates/contentProvider/cp_user.html
index a8d12f6..b35c2e9 100644
--- a/xos/core/xoslib/static/templates/contentProvider/cp_user.html
+++ b/xos/core/xoslib/static/templates/contentProvider/cp_user.html
@@ -38,11 +38,14 @@
           <select ng-model="vm.user" ng-options="u as u.username for u in vm.users" ng-change="vm.addUserToCp(vm.user)"></select>
         </div>  
         <div class="span4 text-right">
-          <button class="btn btn-success margin-wells" disabled="disabled">
+          <button class="btn btn-success margin-wells">
             Save
           </button>
         </div>
       </div>
     </form>
+    <div class="alert" ng-show="vm.result" ng-class="{'alert-success': vm.result.status === 1,'alert-error': vm.result.status === 0}">
+      {$ vm.result.msg $}
+    </div>
   </div>
 </div>
\ No newline at end of file
