diff --git a/static/CMakeLists.txt b/static/CMakeLists.txt
index 45795ef..7353ccc 100644
--- a/static/CMakeLists.txt
+++ b/static/CMakeLists.txt
@@ -16,26 +16,21 @@
     js/run_prettify.js
     js/angular.js
     js/versionController.js
-    noVNC/utils/parse.js
-    //noVNC/utils/inflator.partial.js
-    //noVNC/karma.conf.js
-    noVNC/include/inflator.js
-    noVNC/include/keysym.js
-    noVNC/include/chrome-app/tcp-client.js
-    noVNC/include/ui.js
-    noVNC/include/keysymdef.js
-    noVNC/include/websock.js
-    noVNC/include/util.js
-    noVNC/include/base64.js
-    noVNC/include/logo.js
-    noVNC/include/input.js
-    noVNC/include/rfb.js
-    noVNC/include/des.js
-    noVNC/include/playback.js
-    noVNC/include/xtscancodes.js
-    noVNC/include/keyboard.js
-    noVNC/include/webutil.js
-    noVNC/include/display.js
+    noVNC/core/inflator.js
+    noVNC/core/input/xtscancodes.js
+    noVNC/core/input/util.js
+    noVNC/core/input/devices.js
+    noVNC/core/input/keysym.js
+    noVNC/core/input/keysymdef.js
+    noVNC/core/websock.js
+    noVNC/core/util.js
+    noVNC/core/base64.js
+    noVNC/core/rfb.js
+    noVNC/core/des.js
+    noVNC/core/display.js
+    noVNC/app/ui.js
+    noVNC/app/webutil.js
+
 )
 
 set(CSS_ASSETS
@@ -44,9 +39,8 @@
     css/font-awesome.css
     css/bootstrap-theme.css
     css/prettify.css
-    //noVNC/include/base.css
-    //noVNC/include/blue.css
-    //noVNC/include/black.css
+    noVNC/app/styles/base.css
+    noVNC/app/styles/auto.css
 )
 
 set(HTML_ASSETS
diff --git a/static/index.html b/static/index.html
index 94bbf63..9f08b37 100644
--- a/static/index.html
+++ b/static/index.html
@@ -31,20 +31,21 @@
     <script src="static/js/loginController.js"></script>
     <script src="static/js/kvmController.js"></script>
     <script src="static/js/ipmiController.js"></script>
-    
-    <script src="static/noVNC/include/util.js"></script>
-    <script src="static/noVNC/include/webutil.js"></script>
-    <script src="static/noVNC/include/base64.js"></script>
-    <script src="static/noVNC/include/websock.js"></script>
-    <script src="static/noVNC/include/des.js"></script>
-    <script src="static/noVNC/include/keysymdef.js"></script>
-    <script src="static/noVNC/include/xtscancodes.js"></script>
-    <script src="static/noVNC/include/keyboard.js"></script>
-    <script src="static/noVNC/include/input.js"></script>
-    <script src="static/noVNC/include/display.js"></script>
-    <script src="static/noVNC/include/inflator.js"></script>
-    <script src="static/noVNC/include/rfb.js"></script>
-    <script src="static/noVNC/include/keysym.js"></script>
+ 
+    <script src="static/noVNC/core/util.js"></script>
+    <script src="static/noVNC/app/webutil.js"></script>  
+
+    <script src="static/noVNC/core/base64.js"></script>
+    <script src="static/noVNC/core/websock.js"></script>
+    <script src="static/noVNC/core/des.js"></script>
+    <script src="static/noVNC/core/input/keysymdef.js"></script>
+    <script src="static/noVNC/core/input/xtscancodes.js"></script>
+    <script src="static/noVNC/core/input/util.js"></script>
+    <script src="static/noVNC/core/input/devices.js"></script>
+    <script src="static/noVNC/core/display.js"></script>
+    <script src="static/noVNC/core/inflator.js"></script>
+    <script src="static/noVNC/core/rfb.js"></script>
+    <script src="static/noVNC/core/input/keysym.js"></script> 
 
     <script type="text/javascript">
         var INCLUDE_URI= "static/noVNC/include/";
diff --git a/static/js/kvmController.js b/static/js/kvmController.js
index b8b442e..d10a223 100644
--- a/static/js/kvmController.js
+++ b/static/js/kvmController.js
@@ -1,12 +1,14 @@
+"use strict";
 angular.module('bmcApp').controller('KvmController', 
 ['$scope', '$location', '$window',
 function($scope, $location, $window) {
 
-
     /*jslint white: false */
     /*global window, $, Util, RFB, */
-    "use strict";
 
+    var desktopName;
+
+    WebUtil.init_logging(WebUtil.getConfigVar('logging', 'debug'));
     var rfb;
     var host = $location.host();
     var port = $location.port();
@@ -22,12 +24,13 @@
                         'onUpdateState':  updateState,
                         //'onXvpInit':    xvpInit,
                         'onFBUComplete': FBUComplete,
-                        'resize': true});
+                        'onDesktopName': updateDesktopName
+                        });
         rfb.connect(host, port, password, path);
     } catch (exc) {
         updateState(null, 'fatal', null, 'Unable to create RFB client -- ' + exc);
         return; // don't continue trying to connect
-    }
+    };
 
     
 
@@ -45,40 +48,58 @@
             if (innerW !== undefined && innerH !== undefined)
                 rfb.requestDesktopSize(innerW, innerH - controlbarH - padding);
         }
-    }
+    };
+    function updateDesktopName(rfb, name) {
+        desktopName = name;
+    };
     function FBUComplete(rfb, fbu) {
         UIresize();
         rfb.set_onFBUComplete(function() { });
-    }
+    };
     function sendCtrlAltDel() {
         rfb.sendCtrlAltDel();
         return false;
-    }
+    };
 
-    function updateState(rfb, state, oldstate, msg) {
-        var s, sb, cad, level;
-        s = angular.element(document.querySelector('#noVNC_status'))[0];
-        sb = angular.element(document.querySelector('#noVNC_status_bar'))[0];
+    function status(text, level) {
+        switch (level) {
+            case 'normal':
+            case 'warn':
+            case 'error':
+                break;
+            default:
+                level = "warn";
+        }
+        angular.element(document.querySelector('#noVNC_status'))[0].textContent = text;
+        angular.element(document.querySelector('#noVNC_status_bar'))[0].setAttribute("class", "noVNC_status_" + level);
+    };
+
+    function updateState(rfb, state, oldstate) {
         switch (state) {
-            case 'failed':       level = "error";  break;
-            case 'fatal':        level = "error";  break;
-            case 'normal':       level = "normal"; break;
-            case 'disconnected': level = "normal"; break;
-            case 'loaded':       level = "normal"; break;
-            default:             level = "warn";   break;
+            case 'connecting':
+                status("Connecting", "normal");
+                break;
+            case 'connected':
+                if (rfb && rfb.get_encrypt()) {
+                    status("Connected (encrypted) to " +
+                            desktopName, "normal");
+                } else {
+                    status("Connected (unencrypted) to " +
+                            desktopName, "normal");
+                }
+                break;
+            case 'disconnecting':
+                status("Disconnecting", "normal");
+                break;
+            case 'disconnected':
+                status("Disconnected", "normal");
+                break;
+            default:
+                status(state, "warn");
+                break;
         }
 
-        if (typeof(msg) !== 'undefined') {
-            // at this point, it's possible the window has already been destroyed, so make sure
-            // the handles exist before writing.
-            if (typeof(sb) !== 'undefined'){
-                sb.setAttribute("class", "noVNC_status_" + level);
-            }
-            if (typeof(sb) !== 'undefined'){
-                s.innerHTML = msg;
-            }
-        }
-    }
+    };
 
     var resizeTimeout;
     $window.onresize = function () {
diff --git a/static/noVNC b/static/noVNC
index 7a16304..b56d975 160000
--- a/static/noVNC
+++ b/static/noVNC
@@ -1 +1 @@
-Subproject commit 7a16304e52b3fbd466337601f05a7def2493c563
+Subproject commit b56d97524807b125d047730331031ddd00f9c61f
