diff --git a/app/users/controllers/user-accounts-controller.js b/app/users/controllers/user-accounts-controller.js
index 2cccbd7..2d65d8a 100644
--- a/app/users/controllers/user-accounts-controller.js
+++ b/app/users/controllers/user-accounts-controller.js
@@ -6,57 +6,56 @@
  * @name userAccountsController
  */
 
-window.angular && (function (angular) {
-    'use strict';
+window.angular && (function(angular) {
+  'use strict';
 
-    angular
-        .module('app.users')
-        .controller('userAccountsController', [
-            '$scope',
-            '$window',
-            'APIUtils',
-            'dataService',
-            function($scope, $window, APIUtils, dataService){
-                $scope.dataService = dataService;
-                $scope.state = "none";
-                $scope.errorMsg = "";
+  angular
+    .module('app.users')
+    .controller('userAccountsController', [
+      '$scope',
+      '$window',
+      'APIUtils',
+      'dataService',
+      function($scope, $window, APIUtils, dataService) {
+        $scope.dataService = dataService;
+        $scope.state = 'none';
+        $scope.errorMsg = '';
 
-                $scope.changePassword = function(oldPassword, newPassword, confirmNewPassword){
-                    var user = $scope.dataService.getUser();
-                    if(!oldPassword || !newPassword || !confirmNewPassword ){
-                        $scope.state = "error";
-                        $scope.errorMsg = "Field is required!";
-                        return false;
-                    }
-                    if (newPassword !== confirmNewPassword){
-                        $scope.state = "error";
-                        $scope.errorMsg = "New passwords do not match!";
-                        return false;
-                    }
-                    if (newPassword === oldPassword){
-                        $scope.state = "error";
-                        $scope.errorMsg = "New password and old password match!";
-                        return false;
-                    }
+        $scope.changePassword = function(oldPassword, newPassword, confirmNewPassword) {
+          var user = $scope.dataService.getUser();
+          if (!oldPassword || !newPassword || !confirmNewPassword) {
+            $scope.state = 'error';
+            $scope.errorMsg = 'Field is required!';
+            return false;
+          }
+          if (newPassword !== confirmNewPassword) {
+            $scope.state = 'error';
+            $scope.errorMsg = 'New passwords do not match!';
+            return false;
+          }
+          if (newPassword === oldPassword) {
+            $scope.state = 'error';
+            $scope.errorMsg = 'New password and old password match!';
+            return false;
+          }
 
-                    // Verify the oldPassword is correct
-                    APIUtils.testPassword(user, oldPassword).then(function(state){
-                        APIUtils.changePassword(user, newPassword).then(function(response){
-                            // Clear the textboxes on a success
-                            $scope.passwordVerify = '';
-                            $scope.password = '';
-                            $scope.oldPassword = '';
-                            $scope.state = "success";
-                        }, function(error){
-                            $scope.state = "error";
-                            $scope.errorMsg = "Error changing password!";
-                        });
-                    }, function(error){
-                        $scope.state = "error";
-                        $scope.errorMsg = "Old password is not correct!";
-                    });
-                }
-            }
-        ]
-    );
+          // Verify the oldPassword is correct
+          APIUtils.testPassword(user, oldPassword).then(function(state) {
+            APIUtils.changePassword(user, newPassword).then(function(response) {
+              // Clear the textboxes on a success
+              $scope.passwordVerify = '';
+              $scope.password = '';
+              $scope.oldPassword = '';
+              $scope.state = 'success';
+            }, function(error) {
+              $scope.state = 'error';
+              $scope.errorMsg = 'Error changing password!';
+            });
+          }, function(error) {
+            $scope.state = 'error';
+            $scope.errorMsg = 'Old password is not correct!';
+          });
+        };
+      }
+    ]);
 })(angular);
