diff --git a/theme/mirantis.js b/theme/mirantis.js
index 3b3a34a..88945bd 100644
--- a/theme/mirantis.js
+++ b/theme/mirantis.js
@@ -1,45 +1,56 @@
 function DOMReady(fn) {
-  if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading"){
-    fn();
-  } else {
-    document.addEventListener('DOMContentLoaded', fn);
-  }
+    if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading") {
+        fn();
+    } else {
+        document.addEventListener('DOMContentLoaded', fn);
+    }
 }
+
 function addScript(src, callback, async) {
-  var s = document.createElement('script');
-  s.setAttribute('src', src);
-  s.onload=callback;
-  if(async) s.async = true
-  document.body.appendChild(s);
+    var s = document.createElement('script');
+    s.setAttribute('src', src);
+    s.onload = callback;
+    if (async) s.async = true
+    document.body.appendChild(s);
 }
 
-DOMReady(function(){
-  // init ansi colors
-  addScript("/userContent/theme/js/ansi_up.js", (function(contentSelector){
-    var ansiUp = new AnsiUp
-     ,  $console = document.querySelector(contentSelector)
-     ,  entities = {
-        'amp': '&',
-        'apos': '\'',
-        '#x27': '\'',
-        '#x2F': '/',
-        '#39': '\'',
-        '#47': '/',
-        'lt': '<',
-        'gt': '>',
-        'nbsp': ' ',
-        'quot': '"'
-        }
-     , decodeHTMLEntities = function (text) {
-          return text.replace(/&([^;]+);/gm, function (match, entity) {
-            return entities[entity] || match
-          })
-        }
-     , colorizeFn = function(){
-        $console.innerHTML = decodeHTMLEntities(ansiUp.ansi_to_html($console.innerHTML));
-     };
+DOMReady(function() {
+    var consoleOutputSelector = ".console-output";
+    if (document.querySelector(consoleOutputSelector)) {
+        // init ansi colors
+        addScript("/userContent/theme/js/ansi_up.js", function() {
+            var ansiUp = new AnsiUp,
+                $console = document.querySelector(consoleOutputSelector),
+                entities = {
+                    'amp': '&',
+                    'apos': '\'',
+                    '#x27': '\'',
+                    '#x2F': '/',
+                    '#39': '\'',
+                    '#47': '/',
+                    'lt': '<',
+                    'gt': '>',
+                    'nbsp': ' ',
+                    'quot': '"'
+                },
+                decodeHTMLEntities = function(text) {
+                    return text.replace(/&([^;]+);/gm, function(match, entity) {
+                        return entities[entity] || match
+                    })
+                },
+                colorizeFn = function() {
+                    $console.innerHTML = decodeHTMLEntities(ansiUp.ansi_to_html($console.innerHTML));
+                };
 
-     colorizeFn();
-     $console.addEventListener('change', colorizeFn, false);
-  }).bind(null,".console-output"), true);
+            colorizeFn();
+            // create prototype.js global ajax handle responder
+            Ajax.Responders.register({
+                onComplete: function(req, res) {
+                    if (req.body.indexOf("start=") != -1 && res.status==200 && res.responseText != "") {
+                        colorizeFn();
+                    }
+                }
+            });
+        }, true);
+    }
 });
\ No newline at end of file
