diff --git a/http.js b/http.js
index 4f6296d0841e81fc138fbc00aadf7ae6df04afa7..ff8335657091f2785e38a148a3a5f61809c5d795 100644
--- a/http.js
+++ b/http.js
@@ -16,10 +16,10 @@
     function formatJsonRpcMessage(message) {    
         var object = JSON.parse(message);
        
-        return JSON.stringify({
+        return {
             _id: object.id,
             data: object.result
-        });
+        };
     };
 
     HttpProvider.prototype.send = function (payload) {
diff --git a/main.js b/main.js
index bc6163f35a0316e31ad01807f7530d305c7e48b1..1a5afeb561385f94b537714eaf27b8532d457c6d 100644
--- a/main.js
+++ b/main.js
@@ -489,8 +489,7 @@
         }
     });
 
-    function messageHandler(ev) {
-        var data = JSON.parse(ev)
+    function messageHandler(data) {
 
         if(data._event !== undefined) {
             web3.trigger(data._event, data.data);
diff --git a/qt.js b/qt.js
index 39c0a89a9cb43435ec68520dbc8dd75d81c4ff44..1b146c30dc74b93aa4e1735d7990f5d739550c10 100644
--- a/qt.js
+++ b/qt.js
@@ -1,12 +1,22 @@
 (function() {
-    var QtProvider = function() {};
+    var QtProvider = function() {
+        this.handlers = [];
+        
+        var self = this;
+        navigator.qt.onmessage = function (message) {
+            self.handlers.forEach(function (handler) {
+                handler.call(self, JSON.parse(message));
+            });
+        }
+    };
+
     QtProvider.prototype.send = function(payload) {
         navigator.qt.postData(JSON.stringify(payload));
     };
 
     Object.defineProperty(QtProvider.prototype, "onmessage", {
         set: function(handler) {
-            navigator.qt.onmessage = handler;
+            this.handlers.push(handler);
         },
     }); 
 
diff --git a/websocket.js b/websocket.js
index 297690b332e0870cd18bed5cf6fa679fb0d3fc0c..732a086f294ac7def12c28f44262a8777cdfa32a 100644
--- a/websocket.js
+++ b/websocket.js
@@ -11,7 +11,7 @@
         var self = this;
         this.ws.onmessage = function(event) {
             for(var i = 0; i < self.handlers.length; i++) {
-                self.handlers[i].call(self, event.data, event)
+                self.handlers[i].call(self, JSON.parse(event.data), event)
             }
         };