diff --git a/static/CMakeLists.txt b/static/CMakeLists.txt
index 58bfdbb..b7371d1 100644
--- a/static/CMakeLists.txt
+++ b/static/CMakeLists.txt
@@ -1,15 +1,3 @@
-set(HTML_ASSETS
-    hello.html
-    login.html
-    partial-eventlog.html
-    partial-fruinfo.html
-    partial-home-list.html
-    partial-kvm.html
-    partial-systeminfo.html
-    websocket.html
-)
-
-
 set(JAVASCRIPT_ASSETS
     js/selController.js
     js/lodash.core.js
@@ -19,6 +7,7 @@
     js/angular-ui-router.js
     js/restangular.js
     js/kvm-controller.js
+    js/logincontroller.js
     js/angular-resource.js
     js/angular-sanitize.js
     js/bmcApp.js
@@ -54,29 +43,65 @@
     css/font-awesome.css
     css/bootstrap-theme.css
     css/prettify.css
-    noVNC/tests/viewport.css
     noVNC/include/base.css
     noVNC/include/blue.css
     noVNC/include/black.css
 )
 
+set(HTML_ASSETS
+    index.html
+    login.html
+    partial-eventlog.html
+    partial-fruinfo.html
+    partial-home-list.html
+    partial-kvm.html
+    partial-systeminfo.html
+    websocket.html
+)
+
+set(IMG_ASSETS
+    img/logo.png
+)
+
 set(STATIC_ASSETS_OUT "")
 foreach(JAVASCRIPT_ASSET ${JAVASCRIPT_ASSETS})
-    set(OUTPUT_FILENAME ${CMAKE_CURRENT_BINARY_DIR}/${JAVASCRIPT_ASSET})
-    get_filename_component(FOLDERNAME ${OUTPUT_FILENAME} DIRECTORY)
-    file(MAKE_DIRECTORY "${FOLDERNAME}")
-    # TODO only minify if not a debug build
-    add_custom_command(OUTPUT ${OUTPUT_FILENAME} 
-        COMMAND closure-compiler --language_in=ECMASCRIPT5
-        --js  "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}"
-        --js_output_file "${CMAKE_CURRENT_BINARY_DIR}/${JAVASCRIPT_ASSET}"
+    # if it's a debug build, don't minify
+    if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+        list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET})
+    else()
+        set(OUTPUT_FILENAME ${CMAKE_CURRENT_BINARY_DIR}/${JAVASCRIPT_ASSET})
+        get_filename_component(FOLDERNAME ${OUTPUT_FILENAME} DIRECTORY)
+        file(MAKE_DIRECTORY "${FOLDERNAME}")
+        # TODO only minify if not a debug build
+        add_custom_command(OUTPUT ${OUTPUT_FILENAME} 
+            COMMAND closure-compiler --language_in=ECMASCRIPT5
+            --js  "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}"
+            --js_output_file "${CMAKE_CURRENT_BINARY_DIR}/${JAVASCRIPT_ASSET}"
 
-        DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}"
-        COMMENT "Minifying ${JAVASCRIPT_ASSET}"
-    )
-    list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_BINARY_DIR}/${JAVASCRIPT_ASSET})
+            DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}"
+            COMMENT "Minifying ${JAVASCRIPT_ASSET}"
+        )
+        list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_BINARY_DIR}/${JAVASCRIPT_ASSET})
+    endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
 endforeach(JAVASCRIPT_ASSET)
 
+# for now CSS is included as is
+foreach(CSS_ASSET ${CSS_ASSETS})
+    list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${CSS_ASSET})
+endforeach(CSS_ASSET)
+
+# for now HTML is included as is
+foreach(HTML_ASSET ${HTML_ASSETS})
+    list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${HTML_ASSET})
+endforeach(HTML_ASSET)
+
+# for now IMG is included as is
+foreach(IMG_ASSET ${IMG_ASSETS})
+    list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${IMG_ASSET})
+endforeach(IMG_ASSET)
+
+message(STATIC_ASSETS_OUT ${CMAKE_CURRENT_BINARY_DIR}/${STATIC_ASSETS_OUT})
+
 add_custom_target(minifyjs ALL DEPENDS ${STATIC_ASSETS_OUT})
 
 set(CXX_STATIC_ASSETS_OUTPUT_FILE ${CMAKE_BINARY_DIR}/generated/webassets.cpp)
diff --git a/static/hello.html b/static/index.html
similarity index 95%
rename from static/hello.html
rename to static/index.html
index c536317..14b22df 100644
--- a/static/hello.html
+++ b/static/index.html
@@ -7,7 +7,7 @@
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <title>Integrated BMC Console</title>
 
-    <link href="css/bootstrap.min.css" rel="stylesheet">
+    <link href="css/bootstrap.css" rel="stylesheet">
     <link href="css/font-awesome.css" rel="stylesheet" >  
     <link href="css/intel.css" rel="stylesheet">
 
@@ -18,15 +18,16 @@
     <script src="js/angular-sanitize.js"></script>
     <script src="js/angular-cookies.js"></script>
     <script src="js/angular-resource.js"></script>
-    <script src="js/angular-ui-router.min.js"></script>
-    <script src="js/lodash.min.js"></script>
-    <script src="js/restangular.min.js"></script>
+    <script src="js/angular-ui-router.js"></script>
+    <script src="js/lodash.core.js"></script>
+    <script src="js/restangular.js"></script>
     <script src="js/ui-bootstrap-tpls-2.1.3.js"></script>
     <script src="js/bmcApp.js"></script>
     <script src="js/versionController.js"></script>
     <script src="js/selController.js"></script>
+    <script src="js/logincontroller.js"></script>
     <script src="js/kvm-controller.js"></script>
-    <script src="js/angular-websocket.min.js"></script>
+    <script src="js/angular-websocket.js"></script>
     <script src="js/kvm-controller.js"></script>
     <script src="noVNC/include/util.js"></script>
 
diff --git a/static/js/bmcApp.js b/static/js/bmcApp.js
index dfd4d4b..7392c47 100644
--- a/static/js/bmcApp.js
+++ b/static/js/bmcApp.js
@@ -130,42 +130,6 @@
 angular
     .module('Authentication')
 
-    .controller('LoginController', [
-      '$scope', '$rootScope', '$location', '$state', 'AuthenticationService',
-      function($scope, $rootScope, $location, $state, AuthenticationService) {
-        $scope.logoutreason = AuthenticationService.logoutreason;
-
-        $scope.login = function() {
-          $scope.dataLoading = true;
-          AuthenticationService.Login(
-              $scope.username, $scope.password,
-              function(response) {
-                AuthenticationService.SetCredentials(
-                    $scope.username, response.token);
-                if (typeof $state.after_login_state === "undefined") {
-                  $state.after_login_state = "systeminfo";
-                }
-                $state.go($state.after_login_state);
-                delete $state.after_login_state;
-
-              },
-              function(response) {
-                if (response.status === 401) {
-                  // reset login status
-                  AuthenticationService.ClearCredentials(
-                      "Username or Password is incorrect");
-                }
-                $scope.logoutreason = AuthenticationService.logoutreason;
-                $scope.error = response.message;
-                $scope.dataLoading = false;
-              });
-        };
-      }
-    ]);
-
-angular
-    .module('Authentication')
-
     .factory(
         'AuthenticationService',
         [
diff --git a/static/js/logincontroller.js b/static/js/logincontroller.js
new file mode 100644
index 0000000..d0b7a7f
--- /dev/null
+++ b/static/js/logincontroller.js
@@ -0,0 +1,32 @@
+angular.module('Authentication').controller('LoginController', [
+    '$scope', '$rootScope', '$location', '$state', 'AuthenticationService',
+    function($scope, $rootScope, $location, $state, AuthenticationService) {
+    $scope.logoutreason = AuthenticationService.logoutreason;
+
+    $scope.login = function() {
+        $scope.dataLoading = true;
+        AuthenticationService.Login(
+            $scope.username, $scope.password,
+            function(response) {
+            AuthenticationService.SetCredentials(
+                $scope.username, response.token);
+            if (typeof $state.after_login_state === "undefined") {
+                $state.after_login_state = "systeminfo";
+            }
+            $state.go($state.after_login_state);
+            delete $state.after_login_state;
+
+            },
+            function(response) {
+            if (response.status === 401) {
+                // reset login status
+                AuthenticationService.ClearCredentials(
+                    "Username or Password is incorrect");
+            }
+            $scope.logoutreason = AuthenticationService.logoutreason;
+            $scope.error = response.message;
+            $scope.dataLoading = false;
+            });
+    };
+    }
+]);
\ No newline at end of file
diff --git a/static/js/run_prettify.js b/static/js/run_prettify.js
index 1aab571..8204930 100644
--- a/static/js/run_prettify.js
+++ b/static/js/run_prettify.js
@@ -31,7 +31,7 @@
 (function(){function ba(g){function k(){try{M.doScroll("left")}catch(g){t.setTimeout(k,50);return}z("poll")}function z(k){if("readystatechange"!=k.type||"complete"==A.readyState)("load"==k.type?t:A)[B](p+k.type,z,!1),!q&&(q=!0)&&g.call(t,k.type||k)}var Y=A.addEventListener,q=!1,C=!0,x=Y?"addEventListener":"attachEvent",B=Y?"removeEventListener":"detachEvent",p=Y?"":"on";if("complete"==A.readyState)g.call(t,"lazy");else{if(A.createEventObject&&M.doScroll){try{C=!t.frameElement}catch(da){}C&&k()}A[x](p+
 "DOMContentLoaded",z,!1);A[x](p+"readystatechange",z,!1);t[x](p+"load",z,!1)}}function U(){V&&ba(function(){var g=N.length;ca(g?function(){for(var k=0;k<g;++k)(function(g){t.setTimeout(function(){t.exports[N[g]].apply(t,arguments)},0)})(k)}:void 0)})}for(var t=window,A=document,M=A.documentElement,O=A.head||A.getElementsByTagName("head")[0]||M,B="",F=A.getElementsByTagName("script"),q=F.length;0<=--q;){var P=F[q],Z=P.src.match(/^[^?#]*\/run_prettify\.js(\?[^#]*)?(?:#.*)?$/);if(Z){B=Z[1]||"";P.parentNode.removeChild(P);
 break}}var V=!0,H=[],Q=[],N=[];B.replace(/[?&]([^&=]+)=([^&]+)/g,function(g,k,z){z=decodeURIComponent(z);k=decodeURIComponent(k);"autorun"==k?V=!/^[0fn]/i.test(z):"lang"==k?H.push(z):"skin"==k?Q.push(z):"callback"==k&&N.push(z)});q=0;for(B=H.length;q<B;++q)(function(){var g=A.createElement("script");g.onload=g.onerror=g.onreadystatechange=function(){!g||g.readyState&&!/loaded|complete/.test(g.readyState)||(g.onerror=g.onload=g.onreadystatechange=null,--T,T||t.setTimeout(U,0),g.parentNode&&g.parentNode.removeChild(g),
-g=null)};g.type="text/javascript";g.src="../static/css/loader/lang-"+encodeURIComponent(H[q])+".js";O.insertBefore(g,O.firstChild)})(H[q]);for(var T=H.length,F=[],q=0,B=Q.length;q<B;++q)F.push("https://cdn.rawgit.com/google/code-prettify/master/loader/skins/"+encodeURIComponent(Q[q])+".css");F.push("../static/css/prettify.css");(function(g){function k(q){if(q!==z){var t=A.createElement("link");t.rel="stylesheet";t.type=
+g=null)};g.type="text/javascript";g.src="../css/loader/lang-"+encodeURIComponent(H[q])+".js";O.insertBefore(g,O.firstChild)})(H[q]);for(var T=H.length,F=[],q=0,B=Q.length;q<B;++q)F.push("https://cdn.rawgit.com/google/code-prettify/master/loader/skins/"+encodeURIComponent(Q[q])+".css");F.push("../css/prettify.css");(function(g){function k(q){if(q!==z){var t=A.createElement("link");t.rel="stylesheet";t.type=
 "text/css";q+1<z&&(t.error=t.onerror=function(){k(q+1)});t.href=g[q];O.appendChild(t)}}var z=g.length;k(0)})(F);var ca=function(){window.PR_SHOULD_USE_CONTINUATION=!0;var g;(function(){function k(a){function d(e){var b=e.charCodeAt(0);if(92!==b)return b;var a=e.charAt(1);return(b=W[a])?b:"0"<=a&&"7">=a?parseInt(e.substring(1),8):"u"===a||"x"===a?parseInt(e.substring(2),16):e.charCodeAt(1)}function f(e){if(32>e)return(16>e?"\\x0":"\\x")+e.toString(16);e=String.fromCharCode(e);return"\\"===e||"-"===
 e||"]"===e||"^"===e?"\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\u[0-9A-Fa-f]{4}|\\x[0-9A-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\s\S]|-|[^-\\]/g);e=[];var a="^"===b[0],c=["["];a&&c.push("^");for(var a=a?1:0,h=b.length;a<h;++a){var l=b[a];if(/\\[bdsw]/i.test(l))c.push(l);else{var l=d(l),n;a+2<h&&"-"===b[a+1]?(n=d(b[a+2]),a+=2):n=l;e.push([l,n]);65>n||122<l||(65>n||90<l||e.push([Math.max(65,l)|32,Math.min(n,90)|32]),97>n||122<l||e.push([Math.max(97,l)&-33,Math.min(n,122)&-33]))}}e.sort(function(e,
 a){return e[0]-a[0]||a[1]-e[1]});b=[];h=[];for(a=0;a<e.length;++a)l=e[a],l[0]<=h[1]+1?h[1]=Math.max(h[1],l[1]):b.push(h=l);for(a=0;a<b.length;++a)l=b[a],c.push(f(l[0])),l[1]>l[0]&&(l[1]+1>l[0]&&c.push("-"),c.push(f(l[1])));c.push("]");return c.join("")}function g(e){for(var a=e.source.match(/(?:\[(?:[^\x5C\x5D]|\\[\s\S])*\]|\\u[A-Fa-f0-9]{4}|\\x[A-Fa-f0-9]{2}|\\[0-9]+|\\[^ux0-9]|\(\?[:!=]|[\(\)\^]|[^\x5B\x5C\(\)\^]+)/g),c=a.length,d=[],h=0,l=0;h<c;++h){var n=a[h];"("===n?++l:"\\"===n.charAt(0)&&(n=
