diff --git a/views/ngXosViews/subscriberPortal/src/app/fw/services/helpers.js b/views/ngXosViews/subscriberPortal/src/app/fw/services/helpers.js
new file mode 100644
index 0000000..80f30b1
--- /dev/null
+++ b/views/ngXosViews/subscriberPortal/src/app/fw/services/helpers.js
@@ -0,0 +1,13 @@
+(function () {
+  "use strict";
+
+  angular.module('cordGui')
+  .service('Helpers', function(){
+    this.randomDate = function(start, end) {
+      return new Date(
+        start.getTime() + Math.random() * (end.getTime() - start.getTime())
+      );
+    }
+  });
+
+}());
\ No newline at end of file
diff --git a/views/ngXosViews/subscriberPortal/src/app/fw/services/rest.js b/views/ngXosViews/subscriberPortal/src/app/fw/services/rest.js
new file mode 100644
index 0000000..7ca2546
--- /dev/null
+++ b/views/ngXosViews/subscriberPortal/src/app/fw/services/rest.js
@@ -0,0 +1,15 @@
+"use strict";
+
+angular.module('cordRest', [])
+  .service('Subscribers', function($resource, cordConfig){
+    return $resource(cordConfig.url + '/xoslib/rs/subscriber');
+  })
+  .service('SubscriberUsers', function($resource, cordConfig){
+    // NOTE SubscriberId should ne retrieved from login information
+    return $resource(cordConfig.url + '/xoslib/rs/subscriber/:subscriberId/users/:id', {}, {
+      query: {
+        method: 'GET',
+        isArray: false
+      }
+    });
+  });
\ No newline at end of file
diff --git a/views/ngXosViews/subscriberPortal/src/app/view/home/home.js b/views/ngXosViews/subscriberPortal/src/app/view/home/home.js
index 8e009d9..60c3a94 100644
--- a/views/ngXosViews/subscriberPortal/src/app/view/home/home.js
+++ b/views/ngXosViews/subscriberPortal/src/app/view/home/home.js
@@ -15,46 +15,50 @@
  */
 
 (function () {
-    'use strict';
+  'use strict';
 
-    var urlSuffix = '/rs/dashboard';
+  var urlSuffix = '/rs/dashboard';
 
-    function randomDate(start, end) {
-        return new Date(
-            start.getTime() + Math.random() * (end.getTime() - start.getTime())
-        );
-    }
+  function randomDate(start, end) {
+    return new Date(
+      start.getTime() + Math.random() * (end.getTime() - start.getTime())
+    );
+  }
 
-    angular.module('cordHome', [])
-        .controller('CordHomeCtrl', ['$log', '$scope', '$resource', '$filter',
-            function ($log, $scope, $resource, $filter) {
-                var DashboardData, resource;
-                $scope.page.curr = 'dashboard';
+  angular.module('cordHome', [])
+    .controller('CordHomeCtrl', [
+      '$log', '$scope', '$resource', '$filter', 'cordConfig', 'SubscriberUsers', 'Helpers',
+      function ($log, $scope, $resource, $filter, cordConfig, SubscriberUsers, Helpers) {
+        var DashboardData, resource;
+        $scope.page.curr = 'dashboard';
 
-                DashboardData = $resource($scope.shared.url + urlSuffix);
-                resource = DashboardData.get({},
-                    // success
-                    function () {
-                        $scope.bundle_name = resource.bundle_name;
-                        $scope.bundle_desc = resource.bundle_desc;
-                        $scope.users = resource.users;
+        // NOTE subscriberId should be retrieved by login
+        SubscriberUsers.query({subscriberId: 1}).$promise
+        .then(function(res){
+          $scope.bundle_name = cordConfig.bundles[0].name;
+          $scope.bundle_desc = cordConfig.bundles[0].desc;
 
-                        if ($.isEmptyObject($scope.shared.userActivity)) {
-                            $scope.users.forEach(function (user) {
-                                var date = randomDate(new Date(2015, 0, 1),
-                                    new Date());
+          // NOTE the loops creates data that are not available in xos should we move them in a service? Should we define a small backend to store this infos?
 
-                                $scope.shared.userActivity[user.id] =
-                                    $filter('date')(date, 'mediumTime');
-                            });
-                        }
-                    },
-                    // error
-                    function () {
-                        $log.error('Problem with resource', resource);
-                    });
-                $log.debug('Resource received:', resource);
+          // add an icon to the user
+          res.users.map(function(user){
+            user['icon_id'] = 'mom';
+            return user;
+          });
 
-                $log.debug('Cord Home Ctrl has been created.');
-        }]);
+          // add a random login date to the user
+          res.users.forEach(function(user){
+            if(!angular.isDefined(cordConfig.userActivity[user.id])){
+              var date = randomDate(new Date(2015, 0, 1), new Date());
+              cordConfig.userActivity[user.id] = $filter('date')(date, 'mediumTime');
+            }
+          });
+          $scope.users = res.users;
+        })
+        .catch(function(){
+          $log.error('Problem with resource', resource);
+        });
+
+        $log.debug('Cord Home Ctrl has been created.');
+      }]);
 }());
diff --git a/views/ngXosViews/subscriberPortal/src/app/view/user/user.js b/views/ngXosViews/subscriberPortal/src/app/view/user/user.js
index 971838c..4d69269 100644
--- a/views/ngXosViews/subscriberPortal/src/app/view/user/user.js
+++ b/views/ngXosViews/subscriberPortal/src/app/view/user/user.js
@@ -15,166 +15,159 @@
  */
 
 (function () {
-    'use strict';
+  'use strict';
 
-    var bundleUrlSuffix = '/rs/bundle',
-        userUrlSuffix = '/rs/users',
-        family = 'family',
-        url_filter = 'url_filter';
+  var bundleUrlSuffix = '/rs/bundle',
+    userUrlSuffix = '/rs/users',
+    family = 'family',
+    url_filter = 'url_filter';
 
-    function randomDate(start, end) {
-        return new Date(
-          start.getTime() + Math.random() * (end.getTime() - start.getTime())
-        );
-    }
+  function randomDate(start, end) {
+    return new Date(
+      start.getTime() + Math.random() * (end.getTime() - start.getTime())
+    );
+  }
 
-    angular.module('cordUser', [])
-        .controller('CordUserCtrl', ['$log', '$scope', '$resource', '$timeout', '$filter',
-            function ($log, $scope, $resource, $timeout, $filter) {
-                var BundleData, bundleResource;
-                $scope.page.curr = 'user';
-                $scope.isFamily = false;
-                $scope.newLevels = {};
-                $scope.showCheck = false;
-                $scope.ratingsShown = false;
+  angular.module('cordUser', [])
+    .controller('CordUserCtrl', ['$log', '$scope', '$resource', '$timeout', '$filter', 'SubscriberUsers', 'cordConfig',
+      function ($log, $scope, $resource, $timeout, $filter, SubscriberUsers, cordConfig) {
+        var BundleData, bundleResource;
+        $scope.page.curr = 'user';
+        $scope.isFamily = false;
+        $scope.newLevels = {};
+        $scope.showCheck = false;
+        $scope.ratingsShown = false;
 
-                // === Get data functions ---
+        // === Get data functions ---
 
-                BundleData = $resource($scope.shared.url + bundleUrlSuffix);
-                bundleResource = BundleData.get({},
-                    // success
-                    function () {
-                        var result;
-                        $scope.isFamily = (bundleResource.bundle.id === family);
-                        if ($scope.isFamily) {
-                            result = $.grep(
-                                bundleResource.bundle.functions,
-                                function (elem) {
-                                    if (elem.id === url_filter) { return true; }
-                                }
-                            );
-                            $scope.levels = result[0].params.levels;
-                        }
-                    },
-                    // error
-                    function () {
-                        $log.error('Problem with resource', bundleResource);
-                    }
-                );
-
-                function getUsers(url) {
-                    var UserData, userResource;
-                    UserData = $resource(url);
-                    userResource = UserData.get({},
-                        // success
-                        function () {
-                            $scope.users = userResource.users;
-                            if ($.isEmptyObject($scope.shared.userActivity)) {
-                                $scope.users.forEach(function (user) {
-                                    var date = randomDate(new Date(2015, 0, 1),
-                                      new Date());
-
-                                    $scope.shared.userActivity[user.id] =
-                                      $filter('date')(date, 'mediumTime');
-                                });
-                            }
-                        },
-                        // error
-                        function () {
-                            $log.error('Problem with resource', userResource);
-                        }
-                    );
+        // NOTE subscriberId should be retrieved by login
+        SubscriberUsers.query({subscriberId: 1}).$promise
+          .then(function(res){
+            $scope.isFamily = cordConfig.bundles[0].id === 'family';
+            // if bundle is family search for url_filter level
+            if ($scope.isFamily) {
+              angular.forEach(cordConfig.bundles[0].functions, function(fn){
+                if(fn.id === 'url_filter'){
+                  $scope.levels = fn.params.levels;
                 }
+              });
+            }
 
-                getUsers($scope.shared.url + userUrlSuffix);
+            // NOTE the loops creates data that are not available in xos should we move them in a service? Should we define a small backend to store this infos?
 
-                // === Form functions ---
-
-                function levelUrl(id, level) {
-                    return $scope.shared.url +
-                        userUrlSuffix + '/' + id + '/apply/url_filter/level/' + level;
+            // add an icon to the user
+            res.users.map(function(user){
+              user['icon_id'] = 'mom';
+              // NOTE mock data, waiting for #CORD-516
+              var levels = ['R', 'PG', 'PG-13'];
+              user.profile = {
+                url_filter: {
+                  level: levels[Math.floor(Math.random() * levels.length)]
                 }
+              };
+              return user;
+            });
 
-                $scope.applyChanges = function (changeLevels) {
-                    var requests = [];
+            // add a random login date to the user
+            res.users.forEach(function(user){
+              if(!angular.isDefined(cordConfig.userActivity[user.id])){
+                var date = randomDate(new Date(2015, 0, 1), new Date());
+                cordConfig.userActivity[user.id] = $filter('date')(date, 'mediumTime');
+              }
+            });
+            $scope.users = res.users;
+          })
+          .catch(function () {
+            $log.error('Problem with resource', bundleResource);
+          });
 
-                    if ($scope.users) {
-                        $.each($scope.users, function (index, user) {
-                            var id = user.id,
-                                level = user.profile.url_filter.level;
-                            if ($scope.newLevels[id] !== level) {
-                                requests.push(levelUrl(id, $scope.newLevels[id]));
-                            }
-                        });
+        // === Form functions ---
 
-                        $.each(requests, function (index, req) {
-                            getUsers(req);
-                        });
-                    }
-                    changeLevels.$setPristine();
-                    $scope.showCheck = true;
-                    $timeout(function () {
-                        $scope.showCheck = false;
-                    }, 3000);
-                };
+        function levelUrl(id, level) {
+          return $scope.shared.url +
+            userUrlSuffix + '/' + id + '/apply/url_filter/level/' + level;
+        }
 
-                $scope.cancelChanges = function (changeLevels) {
-                    if ($scope.users) {
-                        $.each($scope.users, function (index, user) {
-                            $scope.newLevels[user.id] = user.profile.url_filter.level;
-                        });
-                    }
-                    changeLevels.$setPristine();
-                    $scope.showCheck = false;
-                };
+        $scope.applyChanges = function (changeLevels) {
+          var requests = [];
 
-                $scope.showRatings = function () {
-                    $scope.ratingsShown = !$scope.ratingsShown;
-                };
+          if ($scope.users) {
+            $.each($scope.users, function (index, user) {
+              var id = user.id,
+                level = user.profile.url_filter.level;
+              if ($scope.newLevels[id] !== level) {
+                requests.push(levelUrl(id, $scope.newLevels[id]));
+              }
+            });
 
-            $log.debug('Cord User Ctrl has been created.');
-        }])
+            $.each(requests, function (index, req) {
+              getUsers(req);
+            });
+          }
+          changeLevels.$setPristine();
+          $scope.showCheck = true;
+          $timeout(function () {
+            $scope.showCheck = false;
+          }, 3000);
+        };
 
-        .directive('ratingsPanel', ['$log', function ($log) {
-            return  {
-                templateUrl: 'app/view/user/ratingPanel.html',
-                link: function (scope, elem, attrs) {
-                    function fillSubMap(order, bool) {
-                        var result = {};
-                        $.each(order, function (index, cat) {
-                            result[cat] = bool;
-                        });
-                        return result;
-                    }
-                    function processSubMap(prhbSites) {
-                        var result = {};
-                        $.each(prhbSites, function (index, cat) {
-                            result[cat] = true;
-                        });
-                        return result;
-                    }
+        $scope.cancelChanges = function (changeLevels) {
+          if ($scope.users) {
+            $.each($scope.users, function (index, user) {
+              $scope.newLevels[user.id] = user.profile.url_filter.level;
+            });
+          }
+          changeLevels.$setPristine();
+          $scope.showCheck = false;
+        };
 
-                    function preprocess(data, order) {
-                        return {
-                            ALL: fillSubMap(order, false),
-                            G: processSubMap(data.G),
-                            PG: processSubMap(data.PG),
-                            PG_13: processSubMap(data.PG_13),
-                            R: processSubMap(data.R),
-                            NONE: fillSubMap(order, true)
-                        };
-                    }
+        $scope.showRatings = function () {
+          $scope.ratingsShown = !$scope.ratingsShown;
+        };
 
-                    $.getJSON('/app/data/pc_cats.json', function (data) {
-                        scope.level_order = data.level_order;
-                        scope.category_order = data.category_order;
-                        scope.prohibitedSites = preprocess(
-                            data.prohibited, data.category_order
-                        );
-                        scope.$apply();
-                    });
-                }
+        $log.debug('Cord User Ctrl has been created.');
+      }])
+
+    .directive('ratingsPanel', ['$log', function ($log) {
+      return  {
+        templateUrl: 'app/view/user/ratingPanel.html',
+        link: function (scope, elem, attrs) {
+          function fillSubMap(order, bool) {
+            var result = {};
+            $.each(order, function (index, cat) {
+              result[cat] = bool;
+            });
+            return result;
+          }
+          function processSubMap(prhbSites) {
+            var result = {};
+            $.each(prhbSites, function (index, cat) {
+              result[cat] = true;
+            });
+            return result;
+          }
+
+          function preprocess(data, order) {
+            return {
+              ALL: fillSubMap(order, false),
+              G: processSubMap(data.G),
+              PG: processSubMap(data.PG),
+              PG_13: processSubMap(data.PG_13),
+              R: processSubMap(data.R),
+              NONE: fillSubMap(order, true)
             };
-        }]);
+          }
+
+          $.getJSON('/app/data/pc_cats.json', function (data) {
+            scope.level_order = data.level_order;
+            scope.category_order = data.category_order;
+            scope.prohibitedSites = preprocess(
+              data.prohibited, data.category_order
+            );
+            scope.$apply();
+          });
+        }
+      };
+    }]);
 
 }());
diff --git a/views/ngXosViews/subscriberPortal/src/cord.js b/views/ngXosViews/subscriberPortal/src/cord.js
index 889341e..0b4d853 100644
--- a/views/ngXosViews/subscriberPortal/src/cord.js
+++ b/views/ngXosViews/subscriberPortal/src/cord.js
@@ -21,6 +21,7 @@
       'ngRoute',
       'ngResource',
       'ngAnimate',
+      'cordRest',
       'cordMast',
       'cordFoot',
       'cordNav',
@@ -57,12 +58,68 @@
           redirectTo: '/login'
         });
     }])
-    .controller('CordCtrl', ['$scope', '$location',
-      function ($scope, $location) {
+    .controller('CordCtrl', ['$scope', '$location', 'cordConfig',
+      function ($scope, $location, cordConfig) {
         $scope.shared = {
-          url: 'http://' + $location.host() + ':' + $location.port(),
-          userActivity: {}
+          url: 'http://' + $location.host() + ':' + $location.port()
         };
+        $scope.shared.userActivity = cordConfig.userActivity;
         $scope.page = {};
-      }]);
+      }])
+    .constant('cordConfig', {
+      url: '',
+      userActivity: {}, //check if really needed
+      bundles: [
+        {
+          "id": "family",
+          "name": "Family Bundle",
+          "desc": "Description for family bundle",
+          "functions": [
+            {
+              "id": "internet",
+              "name": "Internet",
+              "desc": "Basic internet connectivity.",
+              "params": {}
+            },
+            {
+              "id": "firewall",
+              "name": "Firewall",
+              "desc": "Normal firewall protection.",
+              "params": {}
+            },
+            {
+              "id": "url_filter",
+              "name": "Parental Control",
+              "desc": "Variable levels of URL filtering.",
+              "params": {
+                "level": "PG",
+                "levels": [ "PG", "PG-13", "R" ]
+              }
+            }
+          ]
+        },
+        {
+          "id": "basic",
+          "name": "Basic Bundle",
+          "desc": "Description for basic bundle",
+          "functions": [
+            {
+              "id": "internet",
+              "name": "Internet",
+              "desc": "Basic internet connectivity.",
+              "params": {}
+            },
+            {
+              "id": "firewall",
+              "name": "Firewall",
+              "desc": "Normal firewall protection.",
+              "params": {}
+            }
+          ]
+        }
+      ]
+    })
+    .run(function($location, cordConfig){
+      cordConfig.url = 'http://' + $location.host() + ':' + $location.port();
+    });
 }());
diff --git a/views/ngXosViews/subscriberPortal/src/index.html b/views/ngXosViews/subscriberPortal/src/index.html
index 61f7507..1d2e1e1 100644
--- a/views/ngXosViews/subscriberPortal/src/index.html
+++ b/views/ngXosViews/subscriberPortal/src/index.html
@@ -29,6 +29,8 @@
     <script src="bower_components/jquery/dist/jquery.js"></script>
 
     <script src="cord.js"></script>
+    <script src="app/fw/services/rest.js"></script>
+    <script src="app/fw/services/helpers.js"></script>
     <link rel="stylesheet" href="app/view/common/common.css">
 
     <script src="app/fw/mast/mast.js"></script>
