diff --git a/jsre/pp_js.go b/jsre/pp_js.go
index 3352f23ce096b5385005dcd8b689368e7aa32c23..0b22afe6d3758c77150e926f98f47d16890a74d9 100644
--- a/jsre/pp_js.go
+++ b/jsre/pp_js.go
@@ -23,18 +23,28 @@ function pp(object, indent) {
             }
         }
         str += " ]";
+    } else if (object instanceof Error) {
+        str += "\033[31m" + "Error";
+    } else if (isBigNumber(object)) {
+        str += "\033[32m'" + object.toString(10) + "'";
     } else if(typeof(object) === "object") {
         str += "{\n";
-	indent += "  ";
-        var last = Object.keys(object).pop()
-        for(var k in object) {
-            str += indent + k + ": " + pp(object[k], indent);
+        indent += "  ";
+        var last = Object.getOwnPropertyNames(object).pop()
+        Object.getOwnPropertyNames(object).forEach(function (k) {
+            str += indent + k + ": ";
+            try {
+                str += pp(object[k], indent);
+            } catch (e) {
+                str += pp(e, indent);
+            }
 
             if(k !== last) {
                 str += ",";
             }
-	    str += "\n";
-        }
+
+            str += "\n";
+        });
         str += indent.substr(2, indent.length) + "}";
     } else if(typeof(object) === "string") {
         str += "\033[32m'" + object + "'";
@@ -43,7 +53,7 @@ function pp(object, indent) {
     } else if(typeof(object) === "number") {
         str += "\033[31m" + object;
     } else if(typeof(object) === "function") {
-	str += "\033[35m[Function]";
+        str += "\033[35m[Function]";
     } else {
         str += object;
     }
@@ -53,6 +63,11 @@ function pp(object, indent) {
     return str;
 }
 
+var isBigNumber = function (object) {
+    return typeof BigNumber !== 'undefined' && object instanceof BigNumber;
+};
+
+
 function prettyPrint(/* */) {
     var args = arguments;
     var ret = "";