diff --git a/app/templates/bower.json b/app/templates/bower.json
index 4b604d2c..00b4456d 100644
--- a/app/templates/bower.json
+++ b/app/templates/bower.json
@@ -3,19 +3,19 @@
   "version": "0.0.0",
   "dependencies": {
     "jquery": "~2.1.4",
-    "angular": "~1.4.4",
+    "angular": "~1.5.x",
     "angular-bootstrap": "^1.1",
-    "angular-cookies": "~1.4.4",
-    "angular-highlightjs": "~0.4.3",
-    "angular-mocks": "~1.4.4",
-    "angular-ui-router": "~0.2.15",
+    "angular-cookies": "~1.5.x",
+    "angular-highlightjs": "^0.6.1",
+    "angular-mocks": "~1.5.x",
+    "angular-ui-router": "^1.0.0",
     "angular-ui-tinymce": "~0.0.9",
-    "angular-animate": "~1.4.4",
+    "angular-animate": "~1.5.x",
     "ngtoast": "^2.0.0",
     "angular-x2js": "https://github.com/janmichaelyu/angular-x2js.git",
     "bootstrap": "~3.3.5",
     "font-awesome": "~4.6.0",
-    "highlightjs":"~8.7.0",
+    "highlightjs": "~8.7.0",
     "lodash": "~3.10.1",
     "ml-search-ng": "~0.2.0",
     "ml-utils": "withjam/ml-utils",
@@ -27,16 +27,19 @@
   },
   "overrides": {
     "angular-highlightjs": {
-      "dependencies": {"angular" : ">1.0.8", "highlightjs":"~8.7.0"}
+      "dependencies": {
+        "angular": ">1.0.8",
+        "highlightjs": "~8.7.0"
+      }
     }
   },
   "devDependencies": {
-    "angular-mocks": "~1.4.4",
+    "angular-mocks": "~1.5.x",
     "sinon": "http://sinonjs.org/releases/sinon-1.16.1.js",
     "bardjs": "~0.1.8"
   },
   "private": true,
   "resolutions": {
-    "angular": "~1.4.4"
+    "angular": "~1.5.x"
   }
 }
diff --git a/app/templates/ui/app/create/create.component.js b/app/templates/ui/app/create/create.component.js
new file mode 100644
index 00000000..e0722f6b
--- /dev/null
+++ b/app/templates/ui/app/create/create.component.js
@@ -0,0 +1,11 @@
+(function() {
+  'use strict';
+
+  angular.module('app.create')
+    .component('create', {
+      bindings: {},
+      controller: 'CreateCtrl',
+      templateUrl: 'app/create/create.html'
+    });
+
+}());
diff --git a/app/templates/ui/app/create/create.html b/app/templates/ui/app/create/create.html
index e2f6fdf6..fb76e3cc 100644
--- a/app/templates/ui/app/create/create.html
+++ b/app/templates/ui/app/create/create.html
@@ -1,4 +1,4 @@
-
+
   
     
     Create a Document
@@ -7,97 +7,97 @@ 
Create a Document
     
     
     
     
     
     
     
     
     
     
     
     
     
     
 
     
   
  
diff --git a/app/templates/ui/app/detail/detail.component.js b/app/templates/ui/app/detail/detail.component.js
new file mode 100644
index 00000000..c83cc426
--- /dev/null
+++ b/app/templates/ui/app/detail/detail.component.js
@@ -0,0 +1,13 @@
+(function() {
+  'use strict';
+
+  angular.module('app.detail')
+    .component('detail', {
+      bindings: {
+        doc: '<'
+      },
+      controller: 'DetailCtrl',
+      templateUrl: 'app/detail/detail.html'
+    });
+
+}());
diff --git a/app/templates/ui/app/detail/detail.controller.js b/app/templates/ui/app/detail/detail.controller.js
index 0be9d3bd..733438ee 100644
--- a/app/templates/ui/app/detail/detail.controller.js
+++ b/app/templates/ui/app/detail/detail.controller.js
@@ -1,14 +1,16 @@
 /* global X2JS,vkbeautify */
-(function () {
+(function() {
   'use strict';
   angular.module('app.detail')
-  .controller('DetailCtrl', DetailCtrl);
+    .controller('DetailCtrl', DetailCtrl);
 
-  DetailCtrl.$inject = ['doc', '$stateParams'];
-  function DetailCtrl(doc, $stateParams) {
+  DetailCtrl.$inject = ['$stateParams'];
+
+  function DetailCtrl($stateParams) {
     var ctrl = this;
 
     var uri = $stateParams.uri;
+    var doc = this.doc;
 
     var contentType = doc.headers('content-type');
 
@@ -27,20 +29,26 @@
       /* jscs: enable */
     } else if (contentType.lastIndexOf('text/plain', 0) === 0) {
       ctrl.xml = doc.data;
-      ctrl.json = {'Document' : doc.data};
+      ctrl.json = {
+        'Document': doc.data
+      };
       ctrl.type = 'text';
-    } else if (contentType.lastIndexOf('application', 0) === 0 ) {
+    } else if (contentType.lastIndexOf('application', 0) === 0) {
       ctrl.xml = 'Binary object';
-      ctrl.json = {'Document type' : 'Binary object'};
+      ctrl.json = {
+        'Document type': 'Binary object'
+      };
       ctrl.type = 'binary';
     } else {
       ctrl.xml = 'Error occured determining document type.';
-      ctrl.json = {'Error' : 'Error occured determining document type.'};
+      ctrl.json = {
+        'Error': 'Error occured determining document type.'
+      };
     }
 
     angular.extend(ctrl, {
-      doc : doc.data,
-      uri : uri
+      doc: doc.data,
+      uri: uri
     });
   }
 }());
diff --git a/app/templates/ui/app/detail/detail.controller.spec.js b/app/templates/ui/app/detail/detail.controller.spec.js
index e2997317..7d30b6cf 100644
--- a/app/templates/ui/app/detail/detail.controller.spec.js
+++ b/app/templates/ui/app/detail/detail.controller.spec.js
@@ -1,8 +1,8 @@
 /* jshint -W117, -W030 */
-(function () {
+(function() {
   'use strict';
 
-  describe('Controller: DetailCtrl', function () {
+  describe('Controller: DetailCtrl', function() {
 
     var controller;
     var doc;
@@ -12,20 +12,24 @@
       bard.inject('$controller', '$rootScope');
     });
 
-    beforeEach(function () {
+    beforeEach(function() {
       // stub the document
-      var headers = function() { return 'application/json'; };
+      var headers = function() {
+        return 'application/json';
+      };
       doc = {
         headers: headers,
         data: {
           name: 'hi'
         }
       };
-      controller = $controller('DetailCtrl', { doc: doc });
+      controller = $controller('DetailCtrl', {}, {
+        doc: doc
+      });
       $rootScope.$apply();
     });
 
-    it('should be created successfully', function () {
+    it('should be created successfully', function() {
       expect(controller).to.be.defined;
     });
 
diff --git a/app/templates/ui/app/detail/detail.html b/app/templates/ui/app/detail/detail.html
index b5de742e..ea4766d7 100644
--- a/app/templates/ui/app/detail/detail.html
+++ b/app/templates/ui/app/detail/detail.html
@@ -2,24 +2,24 @@
   
     
       
-        {{ctrl.type | uppercase}}
+        {{$ctrl.type | uppercase}}
         
       
-      
+      
         JSON
         
-          
+          
         
       
-      
+      
         XML
         
-          
{{ctrl.xml}}
+          
{{$ctrl.xml}}
          
       
     
@@ -29,7 +29,7 @@
     
    
diff --git a/app/templates/ui/app/detail/similar-directive.html b/app/templates/ui/app/detail/similar-component.html
similarity index 74%
rename from app/templates/ui/app/detail/similar-directive.html
rename to app/templates/ui/app/detail/similar-component.html
index 901f0846..2f70fdbd 100644
--- a/app/templates/ui/app/detail/similar-directive.html
+++ b/app/templates/ui/app/detail/similar-component.html
@@ -1,8 +1,8 @@
 
\ No newline at end of file
+
 
diff --git a/app/templates/ui/app/detail/similar-component.js b/app/templates/ui/app/detail/similar-component.js
new file mode 100644
index 00000000..9c099a60
--- /dev/null
+++ b/app/templates/ui/app/detail/similar-component.js
@@ -0,0 +1,31 @@
+(function() {
+
+  'use strict';
+
+  angular.module('app.similar')
+    .component('mlSimilar', {
+      bindings: {
+        uri: '@',
+        limit: '@'
+      },
+      controller: MlSimilar,
+      templateUrl: 'app/detail/similar-component.html'
+    });
+
+  MlSimilar.$inject = ['MLRest'];
+
+  function MlSimilar(mlRest) {
+    var ctrl = this;
+
+    mlRest.extension('extsimilar', {
+      method: 'GET',
+      params: {
+        'rs:uri': ctrl.uri,
+        'rs:limit': ctrl.limit ? ctrl.limit : 10
+      }
+    }).then(function(response) {
+      ctrl.similar = response.data.similar;
+    });
+  }
+
+}());
diff --git a/app/templates/ui/app/detail/similar-directive.js b/app/templates/ui/app/detail/similar-directive.js
deleted file mode 100644
index 53a956ea..00000000
--- a/app/templates/ui/app/detail/similar-directive.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function () {
-
-  'use strict';
-
-  angular.module('app.similar')
-    .directive('mlSimilar', mlSimilar);
-
-  mlSimilar.$inject = ['MLRest'];
-
-  function mlSimilar(mlRest) {
-    return {
-      restrict: 'E',
-      templateUrl: 'app/detail/similar-directive.html',
-      scope: { uri: '@', limit: '@' },
-      link: function(scope, iElement, iAttrs, ctrl) {
-        mlRest.extension('extsimilar',
-          {
-            method: 'GET',
-            params:
-              {
-                'rs:uri': scope.uri,
-                'rs:limit': scope.limit ? scope.limit : 10
-              }
-          })
-          .then(function(response) {
-            scope.similar = response.data.similar;
-          });
-      }
-    };
-  }
-
-}());
diff --git a/app/templates/ui/app/login/login-dir.html b/app/templates/ui/app/login/login-component.html
similarity index 60%
rename from app/templates/ui/app/login/login-dir.html
rename to app/templates/ui/app/login/login-component.html
index ba640235..a491de73 100644
--- a/app/templates/ui/app/login/login-dir.html
+++ b/app/templates/ui/app/login/login-component.html
@@ -1,13 +1,13 @@
 
diff --git a/app/templates/ui/app/login/login-full.component.js b/app/templates/ui/app/login/login-full.component.js
new file mode 100644
index 00000000..235da5ad
--- /dev/null
+++ b/app/templates/ui/app/login/login-full.component.js
@@ -0,0 +1,11 @@
+(function() {
+  'use strict';
+
+  angular.module('app.login')
+    .component('loginFull', {
+      bindings: {},
+      controller: 'LoginFullCtrl',
+      templateUrl: 'app/login/login-full.html'
+    });
+
+}());
diff --git a/app/templates/ui/app/login/login-full.html b/app/templates/ui/app/login/login-full.html
index f7301298..38265c9e 100644
--- a/app/templates/ui/app/login/login-full.html
+++ b/app/templates/ui/app/login/login-full.html
@@ -1,7 +1,7 @@
 
diff --git a/app/templates/ui/app/login/login.component.js b/app/templates/ui/app/login/login.component.js
new file mode 100644
index 00000000..c882c2d6
--- /dev/null
+++ b/app/templates/ui/app/login/login.component.js
@@ -0,0 +1,16 @@
+(function() {
+
+  'use strict';
+
+  angular.module('app.login')
+    .component('login', {
+      bindings: {
+        showCancel: '=',
+        mode: '@',
+        callback: '&'
+      },
+      controller: 'LoginCtrl',
+      templateUrl: 'app/login/login-component.html',
+    });
+
+}());
diff --git a/app/templates/ui/app/login/login.controller.js b/app/templates/ui/app/login/login.controller.js
index b96c33ed..858d8e7f 100644
--- a/app/templates/ui/app/login/login.controller.js
+++ b/app/templates/ui/app/login/login.controller.js
@@ -1,4 +1,4 @@
-(function () {
+(function() {
   'use strict';
 
   angular.module('app.login')
@@ -6,6 +6,7 @@
     .controller('LoginFullCtrl', LoginFullCtrl);
 
   LoginCtrl.$inject = ['$scope', 'loginService'];
+
   function LoginCtrl($scope, loginService) {
     var ctrl = this;
     angular.extend(ctrl, {
@@ -34,13 +35,16 @@
     }
 
     function callback(user) {
-      if ($scope.callback && !loginService.loginError()) {
-        $scope.callback({user: user});
+      if (ctrl.callback && !loginService.loginError()) {
+        ctrl.callback({
+          user: user
+        });
       }
     }
   }
 
   LoginFullCtrl.$inject = ['$state', '$stateParams'];
+
   function LoginFullCtrl($state, $stateParams) {
     var ctrl = this;
     angular.extend(ctrl, {
diff --git a/app/templates/ui/app/login/login.directive.js b/app/templates/ui/app/login/login.directive.js
deleted file mode 100644
index 7087b564..00000000
--- a/app/templates/ui/app/login/login.directive.js
+++ /dev/null
@@ -1,23 +0,0 @@
-(function () {
-
-  'use strict';
-
-  angular.module('app.login')
-    .directive('login', LoginDirective);
-
-  function LoginDirective() {
-    return {
-      restrict: 'EA',
-      controller: 'LoginCtrl',
-      controllerAs: 'ctrl',
-      replace: true,
-      scope: {
-        showCancel: '=',
-        mode: '@',
-        callback: '&'
-      },
-      templateUrl: 'app/login/login-dir.html'
-    };
-  }
-
-}());
diff --git a/app/templates/ui/app/login/login.module.js b/app/templates/ui/app/login/login.module.js
index cba9264f..6a7e97b9 100644
--- a/app/templates/ui/app/login/login.module.js
+++ b/app/templates/ui/app/login/login.module.js
@@ -1,4 +1,6 @@
-(function () {
+(function() {
   'use strict';
-  angular.module('app.login', ['app.messageBoard', 'ml.common', 'ui.bootstrap', 'ui.router']);
+  angular.module('app.login', ['app.messageBoard', 'ml.common', 'ui.bootstrap',
+    'ui.router', 'app.user'
+  ]);
 }());
diff --git a/app/templates/ui/app/login/login.service.js b/app/templates/ui/app/login/login.service.js
index ad932cdb..a2ae4299 100644
--- a/app/templates/ui/app/login/login.service.js
+++ b/app/templates/ui/app/login/login.service.js
@@ -1,13 +1,15 @@
-(function () {
+(function() {
   'use strict';
 
   angular.module('app.login')
     .factory('loginService', LoginService);
 
   LoginService.$inject = ['$http', '$uibModal', '$q', '$rootScope', '$state',
-    '$stateParams', 'messageBoardService'];
+    '$stateParams', 'messageBoardService', '$transitions', 'userService'
+  ];
+
   function LoginService($http, $uibModal, $q, $rootScope, $state,
-    $stateParams, messageBoardService) {
+    $stateParams, messageBoardService, $transitions, userService) {
 
     var service = {};
     var _loginMode = 'full'; // 'modal', 'top-right', or 'full'
@@ -17,7 +19,6 @@
     var _isAuthenticated;
     var _userPrefix = '';
     var _protectedRoutes = [];
-    var deregisterLoginSuccess;
 
     function loginMode(mode) {
       if (mode === undefined) {
@@ -47,9 +48,7 @@
         }
         if (response.data.authenticated === false) {
           _isAuthenticated = false;
-        }
-        else
-        {
+        } else {
           loginSuccess(response);
         }
         return service.isAuthenticated();
@@ -59,7 +58,7 @@
     function loginSuccess(response) {
       _loginError = null;
       _isAuthenticated = true;
-      $rootScope.$broadcast('loginService:login-success', response.data);
+      userService.updateUser(response);
     }
 
     function login(username, password) {
@@ -72,6 +71,7 @@
       }, failLogin);
     }
 
+    //loginPrompt not used for transition events atm due to weird state.go behaviour
     function loginPrompt() {
       var d = $q.defer();
       if (_loginMode === 'modal') {
@@ -95,27 +95,28 @@
           keyboard: false
         });
       } else if (_loginMode === 'top-right') {
-        messageBoardService.message({title: 'Please sign-in to see content.'});
+        messageBoardService.message({
+          title: 'Please sign-in to see content.'
+        });
         var deregisterMsgBoard = $rootScope.$on('loginService:login-success', function(e, user) {
           messageBoardService.message(null);
           d.resolve(user);
           deregisterMsgBoard();
         });
       } else {
-        $state.go('root.login',
-          {
-            'state': _toStateName || $state.current.name,
-            'params': JSON.stringify((_toStateParams || $stateParams))
-          }).then(function() {
-            d.reject();
-          });
+        $state.go('root.login', {
+          'state': _toStateName || $state.current.name,
+          'params': JSON.stringify((_toStateParams || $stateParams))
+        }).then(function() {
+          d.reject();
+        });
       }
       return d.promise;
     }
 
     function logout() {
       return $http.get('/api/user/logout').then(function(response) {
-        $rootScope.$broadcast('loginService:logout-success', response);
+        userService.logOut();
         _loginError = null;
         _isAuthenticated = false;
         $state.reload();
@@ -138,45 +139,34 @@
       return _protectedRoutes.indexOf(route) > -1;
     }
 
-    function blockRoute(event, next, nextParams) {
-      event.preventDefault();
-      service.loginPrompt();
-      if (_loginMode !== 'full') {
-        if (deregisterLoginSuccess) {
-          deregisterLoginSuccess();
-          deregisterLoginSuccess = null;
-        }
-        deregisterLoginSuccess = $rootScope.$on('loginService:login-success', function() {
-          deregisterLoginSuccess();
-          deregisterLoginSuccess = null;
-          $state.go(next.name, nextParams);
-        });
-      }
-    }
+    $transitions.onStart({
+      to: '*.*'
+    }, function($transition$) {
 
-    $rootScope.$on('$stateChangeStart', function(event, next, nextParams) {
-      if (next.name !== 'root.login') {
-        _toStateName = next.name;
-        _toStateParams = nextParams;
+      if ($transition$.$to().name !== 'root.login') {
+        _toStateName = $transition$.$to().name;
+        _toStateParams = $transition$.$to().params;
       }
 
-      if (routeIsProtected(next.name)) {
+      if (routeIsProtected($transition$.$to().name)) {
         var auth = service.getAuthenticatedStatus();
-
         if (angular.isFunction(auth.then)) {
-          auth.then(function() {
+          return auth.then(function() {
             if (!service.isAuthenticated()) {
-              //this does NOT block requests in a timely fashion...
-              blockRoute(event, next, nextParams);
+              return $state.target('root.login', {
+                'state': _toStateName || $state.current.name,
+                'params': JSON.stringify((_toStateParams || $stateParams))
+              });
             }
           });
-        }
-        else {
+        } else {
           if (!auth) {
-            blockRoute(event, next, nextParams);
+            return $state.target('root.login', {
+              'state': _toStateName || $state.current.name,
+              'params': JSON.stringify((_toStateParams || $stateParams))
+            });
           }
         }
-
       }
     });
 
@@ -189,6 +179,7 @@
       login: login,
       logout: logout,
       loginPrompt: loginPrompt,
+      loginSuccess: loginSuccess,
       loginError: loginError,
       loginMode: loginMode,
       isAuthenticated: isAuthenticated,
diff --git a/app/templates/ui/app/login/login.service.spec.js b/app/templates/ui/app/login/login.service.spec.js
index a6e7c547..0aa76ad5 100644
--- a/app/templates/ui/app/login/login.service.spec.js
+++ b/app/templates/ui/app/login/login.service.spec.js
@@ -1,8 +1,8 @@
 /* jshint -W117, -W030 */
-(function () {
+(function() {
   'use strict';
 
-  describe('Service: loginService', function () {
+  describe('Service: loginService', function() {
 
     var service;
     var modalOpened = false;
@@ -23,9 +23,15 @@
       });
 
       bard.mockService($state, {
-        current: { name: 'root.search', params: {} },
+        current: {
+          name: 'root.search',
+          params: {}
+        },
         go: function(stateName, stateParams) {
-          this.current = { name: stateName, params: stateParams };
+          this.current = {
+            name: stateName,
+            params: stateParams
+          };
           return $q.when();
         }
       });
@@ -33,19 +39,21 @@
       bard.mockService($uibModal, {
         open: function() {
           modalOpened = true;
-          return { result: angular.noop };
+          return {
+            result: angular.noop
+          };
         }
       });
 
     });
 
-    beforeEach(inject(function (_loginService_) {
+    beforeEach(inject(function(_loginService_) {
       service = _loginService_;
 
       modalOpened = false;
     }));
 
-    it('should be defined', function () {
+    it('should be defined', function() {
       expect(service).to.be.defined;
     });
 
@@ -68,7 +76,7 @@
     });
   });
 
-  describe('Service: loginService - should be authenticated if logged in already', function () {
+  describe('Service: loginService - should be authenticated if logged in already', function() {
 
     var service;
     var modalOpened = false;
@@ -81,7 +89,8 @@
 
     beforeEach(function() {
       bard.appModule('app.login');
-      bard.inject('$q', '$http', '$uibModal', '$rootScope', '$state', '$stateParams');
+      bard.inject('$q', '$http', '$uibModal', '$rootScope', '$state', '$stateParams',
+        '$transitions', 'userService');
 
       bard.mockService($http, {
         _default: $q.when([]),
@@ -89,9 +98,15 @@
       });
 
       bard.mockService($state, {
-        current: { name: 'root.search', params: {} },
+        current: {
+          name: 'root.search',
+          params: {}
+        },
         go: function(stateName, stateParams) {
-          this.current = { name: stateName, params: stateParams };
+          this.current = {
+            name: stateName,
+            params: stateParams
+          };
           return $q.when();
         }
       });
@@ -99,13 +114,15 @@
       bard.mockService($uibModal, {
         open: function() {
           modalOpened = true;
-          return { result: angular.noop };
+          return {
+            result: angular.noop
+          };
         }
       });
 
     });
 
-    beforeEach(inject(function (_loginService_) {
+    beforeEach(inject(function(_loginService_) {
       service = _loginService_;
 
       modalOpened = false;
@@ -116,7 +133,7 @@
       $rootScope.$apply();
     }));
 
-    it('should be defined', function () {
+    it('should be defined', function() {
       expect(service).to.be.defined;
     });
 
diff --git a/app/templates/ui/app/message-board/message-board-component.html b/app/templates/ui/app/message-board/message-board-component.html
new file mode 100644
index 00000000..484e518f
--- /dev/null
+++ b/app/templates/ui/app/message-board/message-board-component.html
@@ -0,0 +1,4 @@
+
+  
{{$ctrl.msg.title || $ctrl.msg}}
+  
{{$ctrl.msg.body}}
+
diff --git a/app/templates/ui/app/message-board/message-board-dir.html b/app/templates/ui/app/message-board/message-board-dir.html
deleted file mode 100644
index 13d1c899..00000000
--- a/app/templates/ui/app/message-board/message-board-dir.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-  
{{msg.title || msg}}
-  
{{msg.body}}
-
diff --git a/app/templates/ui/app/message-board/message-board.directive.js b/app/templates/ui/app/message-board/message-board.component.js
similarity index 57%
rename from app/templates/ui/app/message-board/message-board.directive.js
rename to app/templates/ui/app/message-board/message-board.component.js
index 9407d98d..422ed524 100644
--- a/app/templates/ui/app/message-board/message-board.directive.js
+++ b/app/templates/ui/app/message-board/message-board.component.js
@@ -1,23 +1,15 @@
-(function () {
+(function() {
 
   'use strict';
 
   angular.module('app.messageBoard')
-    .directive('messageBoard', MessageBoardDirective)
-    .controller('MessageBoardController', MessageBoardController);
-
-  function MessageBoardDirective() {
-    return {
-      restrict: 'E',
-      controller: 'MessageBoardController',
-      controllerAs: 'ctrl',
-      replace: true,
-      scope: {
+    .component('messageBoard', {
+      bindings: {
         msg: '='
       },
-      templateUrl: 'app/message-board/message-board-dir.html'
-    };
-  }
+      controller: MessageBoardController,
+      templateUrl: 'app/message-board/message-board-component.html',
+    });
 
   MessageBoardController.$inject = ['$scope'];
 
diff --git a/app/templates/ui/app/root/root.component.js b/app/templates/ui/app/root/root.component.js
new file mode 100644
index 00000000..094df9a2
--- /dev/null
+++ b/app/templates/ui/app/root/root.component.js
@@ -0,0 +1,11 @@
+(function() {
+  'use strict';
+
+  angular.module('app.root')
+    .component('root', {
+      bindings: {},
+      controller: 'RootCtrl',
+      templateUrl: 'app/root/root.html'
+    });
+
+}());
diff --git a/app/templates/ui/app/root/root.controller.js b/app/templates/ui/app/root/root.controller.js
index d1770458..73e78301 100644
--- a/app/templates/ui/app/root/root.controller.js
+++ b/app/templates/ui/app/root/root.controller.js
@@ -1,16 +1,18 @@
-(function () {
+(function() {
   'use strict';
 
   angular.module('app.root')
     .controller('RootCtrl', RootCtrl);
 
-  RootCtrl.$inject = ['messageBoardService', 'userService', '$scope'];
+  RootCtrl.$inject = ['messageBoardService', 'userService', 'loginService', '$scope'];
 
-  function RootCtrl(messageBoardService, userService, $scope) {
+  function RootCtrl(messageBoardService, userService, loginService, $scope) {
     var ctrl = this;
     ctrl.currentYear = new Date().getUTCFullYear();
     ctrl.messageBoardService = messageBoardService;
 
+    loginService.getAuthenticatedStatus();
+
     $scope.$watch(userService.currentUser, function(newValue) {
       ctrl.currentUser = newValue;
     });
diff --git a/app/templates/ui/app/root/root.html b/app/templates/ui/app/root/root.html
index be7b94f5..5d565410 100644
--- a/app/templates/ui/app/root/root.html
+++ b/app/templates/ui/app/root/root.html
@@ -15,7 +15,7 @@
       
       
      
@@ -23,8 +23,8 @@