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
