incremental
diff --git a/static/js/base64.js b/static/js/base64.js
new file mode 100644
index 0000000..db1ebcf
--- /dev/null
+++ b/static/js/base64.js
@@ -0,0 +1,84 @@
+angular.module('bmcApp').factory('Base64', function() {
+      /* jshint ignore:start */
+
+      var keyStr =
+          'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+      return {
+        encode: function(input) {
+          var output = "";
+          var chr1, chr2, chr3 = "";
+          var enc1, enc2, enc3, enc4 = "";
+          var i = 0;
+
+          do {
+            chr1 = input.charCodeAt(i++);
+            chr2 = input.charCodeAt(i++);
+            chr3 = input.charCodeAt(i++);
+
+            enc1 = chr1 >> 2;
+            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+            enc4 = chr3 & 63;
+
+            if (isNaN(chr2)) {
+              enc3 = enc4 = 64;
+            } else if (isNaN(chr3)) {
+              enc4 = 64;
+            }
+
+            output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
+                keyStr.charAt(enc3) + keyStr.charAt(enc4);
+            chr1 = chr2 = chr3 = "";
+            enc1 = enc2 = enc3 = enc4 = "";
+          } while (i < input.length);
+
+          return output;
+        },
+
+        decode: function(input) {
+          var output = "";
+          var chr1, chr2, chr3 = "";
+          var enc1, enc2, enc3, enc4 = "";
+          var i = 0;
+
+          // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
+          var base64test = /[^A-Za-z0-9\+\/\=]/g;
+          if (base64test.exec(input)) {
+            window.alert(
+                "There were invalid base64 characters in the input text.\n" +
+                "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
+                "Expect errors in decoding.");
+          }
+          input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+          do {
+            enc1 = keyStr.indexOf(input.charAt(i++));
+            enc2 = keyStr.indexOf(input.charAt(i++));
+            enc3 = keyStr.indexOf(input.charAt(i++));
+            enc4 = keyStr.indexOf(input.charAt(i++));
+
+            chr1 = (enc1 << 2) | (enc2 >> 4);
+            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+            chr3 = ((enc3 & 3) << 6) | enc4;
+
+            output = output + String.fromCharCode(chr1);
+
+            if (enc3 != 64) {
+              output = output + String.fromCharCode(chr2);
+            }
+            if (enc4 != 64) {
+              output = output + String.fromCharCode(chr3);
+            }
+
+            chr1 = chr2 = chr3 = "";
+            enc1 = enc2 = enc3 = enc4 = "";
+
+          } while (i < input.length);
+
+          return output;
+        }
+      };
+
+      /* jshint ignore:end */
+    });
\ No newline at end of file
diff --git a/static/js/bmcApp.js b/static/js/bmcApp.js
index 64a480a..d4282ba 100644
--- a/static/js/bmcApp.js
+++ b/static/js/bmcApp.js
@@ -11,9 +11,9 @@
 ]);
 
 
-app.controller('MainCtrl', function($scope) {
+app.controller('MainCtrl', ['$scope', function($scope) {
 
-});
+}]);
 
 app.service('loginInterceptor', ["$injector",
   function($injector) {
@@ -37,7 +37,7 @@
           }
           AuthenticationService.ClearCredentials(invalidate_reason);
         }
-
+        return response;
     };
 }])
 
@@ -45,7 +45,7 @@
     $httpProvider.interceptors.push('loginInterceptor');
 }]);
 
-app.directive('windowSize', function ($window) {
+app.directive('windowSize', ['$window', function ($window) {
   return function (scope, element) {
     var w = angular.element($window);
     scope.getWindowDimensions = function () {
@@ -69,7 +69,7 @@
         scope.$apply();
     });
   }
-});
+}]);
 
 app.run(['$rootScope', '$cookieStore', '$state', '$resource', 'AuthenticationService',
   function($rootScope, $cookieStore, $state, $resource, AuthenticationService) {
@@ -103,7 +103,7 @@
       // nested list with just some random string data
       .state('login', {
         url: '/login',
-        templateUrl: 'static/login.html',
+        templateUrl: 'static/partial-login.html',
         controller: 'LoginController',
       })
       // systeminfo view ========================================
@@ -120,6 +120,9 @@
       .state(
           'kvm', {url: '/kvm', templateUrl: 'static/partial-kvm.html'})
 
+      .state(
+          'ipmi', {url: '/ipmi', templateUrl: 'static/partial-ipmi.html'})
+
       // ABOUT PAGE AND MULTIPLE NAMED VIEWS =================================
       .state('about', {url: '/about', templateUrl: 'static/partial-fruinfo.html'})
 
@@ -192,89 +195,4 @@
             service.logoutreason = "";
             return service;
           }
-        ])
-
-    .factory('Base64', function() {
-      /* jshint ignore:start */
-
-      var keyStr =
-          'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
-
-      return {
-        encode: function(input) {
-          var output = "";
-          var chr1, chr2, chr3 = "";
-          var enc1, enc2, enc3, enc4 = "";
-          var i = 0;
-
-          do {
-            chr1 = input.charCodeAt(i++);
-            chr2 = input.charCodeAt(i++);
-            chr3 = input.charCodeAt(i++);
-
-            enc1 = chr1 >> 2;
-            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
-            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
-            enc4 = chr3 & 63;
-
-            if (isNaN(chr2)) {
-              enc3 = enc4 = 64;
-            } else if (isNaN(chr3)) {
-              enc4 = 64;
-            }
-
-            output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
-                keyStr.charAt(enc3) + keyStr.charAt(enc4);
-            chr1 = chr2 = chr3 = "";
-            enc1 = enc2 = enc3 = enc4 = "";
-          } while (i < input.length);
-
-          return output;
-        },
-
-        decode: function(input) {
-          var output = "";
-          var chr1, chr2, chr3 = "";
-          var enc1, enc2, enc3, enc4 = "";
-          var i = 0;
-
-          // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
-          var base64test = /[^A-Za-z0-9\+\/\=]/g;
-          if (base64test.exec(input)) {
-            window.alert(
-                "There were invalid base64 characters in the input text.\n" +
-                "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
-                "Expect errors in decoding.");
-          }
-          input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
-
-          do {
-            enc1 = keyStr.indexOf(input.charAt(i++));
-            enc2 = keyStr.indexOf(input.charAt(i++));
-            enc3 = keyStr.indexOf(input.charAt(i++));
-            enc4 = keyStr.indexOf(input.charAt(i++));
-
-            chr1 = (enc1 << 2) | (enc2 >> 4);
-            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
-            chr3 = ((enc3 & 3) << 6) | enc4;
-
-            output = output + String.fromCharCode(chr1);
-
-            if (enc3 != 64) {
-              output = output + String.fromCharCode(chr2);
-            }
-            if (enc4 != 64) {
-              output = output + String.fromCharCode(chr3);
-            }
-
-            chr1 = chr2 = chr3 = "";
-            enc1 = enc2 = enc3 = enc4 = "";
-
-          } while (i < input.length);
-
-          return output;
-        }
-      };
-
-      /* jshint ignore:end */
-    });
+        ]);
diff --git a/static/js/ipmiController.js b/static/js/ipmiController.js
new file mode 100644
index 0000000..ac90b6b
--- /dev/null
+++ b/static/js/ipmiController.js
@@ -0,0 +1,33 @@
+angular.module('bmcApp').factory('IPMIData', [
+  '$websocket', '$location',
+  function($websocket, $location) {
+
+    var host = $location.host();
+    var port = $location.port();
+    var protocol = "ws://";
+    if ($location.protocol() === 'https') {
+      protocol = 'wss://';
+    }
+    // Open a WebSocket connection
+    var dataStream = $websocket(protocol + host + port + "/ipmiws");
+    var blob = new Blob([0x06, 0x00, 0xff, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x20, 0x18, 0xc8, 0x81, 0x04, 0x38, 0x8e, 0x04, 0xb1]);
+    dataStream.send(blob); 
+    
+    dataStream.onMessage(function(message) {
+      collection.push(JSON.parse(message.data));
+    });
+
+    var methods = {
+
+      get : function() { 
+          var blob = new Blob([0x06, 0x00, 0xff, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x20, 0x18, 0xc8, 0x81, 0x04, 0x38, 0x8e, 0x04, 0xb1]);
+          dataStream.send(blob); 
+      }
+    };
+
+    return methods;
+  }
+]);
+angular.module('bmcApp').controller('ipmiController', [
+  '$scope', 'IPMIData', function($scope, IPMIData) { $scope.IPMIData = IPMIData; }
+]);
\ No newline at end of file
diff --git a/static/js/kvm-controller.js b/static/js/kvmController.js
similarity index 94%
rename from static/js/kvm-controller.js
rename to static/js/kvmController.js
index 87427b6..b8b442e 100644
--- a/static/js/kvm-controller.js
+++ b/static/js/kvmController.js
@@ -1,4 +1,6 @@
-angular.module('bmcApp').controller('KvmController', function($scope, $location, $window) {
+angular.module('bmcApp').controller('KvmController', 
+['$scope', '$location', '$window',
+function($scope, $location, $window) {
 
 
     /*jslint white: false */
@@ -8,7 +10,7 @@
     var rfb;
     var host = $location.host();
     var port = $location.port();
-    var encrypt = $location.protocol() === 'https:';
+    var encrypt = $location.protocol() === 'https';
     var password = "";
     var token = "1234";
     var path = "kvmws";
@@ -88,4 +90,4 @@
             UIresize();
         }, 500);
     }; 
-});
\ No newline at end of file
+}]);
\ No newline at end of file
diff --git a/static/js/logincontroller.js b/static/js/loginController.js
similarity index 100%
rename from static/js/logincontroller.js
rename to static/js/loginController.js
diff --git a/static/js/selController.js b/static/js/selController.js
index 06c1abb..78d90d4 100644
--- a/static/js/selController.js
+++ b/static/js/selController.js
@@ -765,7 +765,7 @@
 }
 
 
-angular.module('bmcApp').controller('selController', function($scope) {
+angular.module('bmcApp').controller('selController', ['$scope', function($scope) {
 
     var sdr_promise = Restangular.all('sdrentries').getList();
     var sel_promise = Restangular.all('selentries').getList();
@@ -890,4 +890,4 @@
     $scope.uncheckAll = function () {
         $scope.selectedColumns["controller"] = [];
     };
-});
\ No newline at end of file
+}]);
\ No newline at end of file
diff --git a/static/js/versionController.js b/static/js/versionController.js
index c104602..65d9f49 100644
--- a/static/js/versionController.js
+++ b/static/js/versionController.js
@@ -1,4 +1,6 @@
-angular.module('bmcApp').controller('versionController', function($scope, $resource) {
+angular.module('bmcApp').controller('versionController', [
+    '$scope', '$resource',
+    function($scope, $resource) {
 
 
     var systeminfo = $resource("/systeminfo");
@@ -16,4 +18,4 @@
 
 
 
-});
\ No newline at end of file
+}]);
\ No newline at end of file