diff --git a/README.md b/README.md
index 4ffda9e8da122fd9c4a6a2b8b4819d42d7a2a8ce..16cc2b11af6879cbf908ae94a35cc04ff2770022 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
 This is the Ethereum compatible JavaScript API using `Promise`s
 which implements the [Generic JSON RPC](https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC) spec. It's available on npm as a node module and also for bower and component as an embeddable js
 
-[![Build Status][1]][2] [![dependency status][3]][4] [![dev dependency status][5]][6]
+[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![dependency status][dep-image]][dep-url] [![dev dependency status][dep-dev-image]][dep-dev-url]
 
 [![browser support](https://ci.testling.com/cubedro/ethereum.js.png)](https://ci.testling.com/cubedro/ethereum.js)
 
@@ -69,9 +69,11 @@ go get github.com/ethereum/go-ethereum/ethereum
 ethereum -ws -loglevel=4
 ```
 
-[1]: https://travis-ci.org/cubedro/ethereum.js.svg
-[2]: https://travis-ci.org/cubedro/ethereum.js
-[3]: https://david-dm.org/cubedro/ethereum.js.svg
-[4]: https://david-dm.org/cubedro/ethereum.js
-[5]: https://david-dm.org/cubedro/ethereum.js/dev-status.svg
-[6]: https://david-dm.org/cubedro/ethereum.js#info=devDependencies
\ No newline at end of file
+[npm-image]: https://badge.fury.io/js/ethereum.js.png
+[npm-url]: https://npmjs.org/package/ethereum.js
+[travis-image]: https://travis-ci.org/cubedro/ethereum.js.svg
+[travis-url]: https://travis-ci.org/cubedro/ethereum.js
+[dep-image]: https://david-dm.org/cubedro/ethereum.js.svg
+[dep-url]: https://david-dm.org/cubedro/ethereum.js
+[dep-dev-image]: https://david-dm.org/cubedro/ethereum.js/dev-status.svg
+[dep-dev-url]: https://david-dm.org/cubedro/ethereum.js#info=devDependencies
\ No newline at end of file
diff --git a/lib/httprpc.js b/lib/httprpc.js
index c1ee0f02af6e3a88174bf08b995abbf17b06fed3..99f02b532730e50e71479f1e7aef33f9893bef58 100644
--- a/lib/httprpc.js
+++ b/lib/httprpc.js
@@ -45,7 +45,8 @@ if(process.env.NODE_ENV !== "build") {
 
         return {
             _id: object.id,
-            data: object.result
+            data: object.result,
+            error: object.error
         };
     }
 
@@ -75,7 +76,7 @@ if(process.env.NODE_ENV !== "build") {
         var self = this;
         this.sendRequest(payload, function (request) {
             var parsed = JSON.parse(request.responseText);
-            if (parsed.result instanceof Array ? parsed.result.length === 0 : !parsed.result) {
+            if (parsed.error || (parsed.result instanceof Array ? parsed.result.length === 0 : !parsed.result)) {
                 return;
             }
             self.handlers.forEach(function (handler) {
diff --git a/lib/main.js b/lib/main.js
index 08eb722e24329084a05e0aa9aa000103a5130f69..95581c2bed6bcbffcd43dfddfe61788e17cfdc72 100644
--- a/lib/main.js
+++ b/lib/main.js
@@ -155,15 +155,15 @@
                     return {call: call, args: args};
                 }).then(function (request) {
                     return new Promise(function (resolve, reject) {
-                        web3.provider.send(request, function (result) {
-                            if (result || typeof result === "boolean") {
+                        web3.provider.send(request, function (err, result) {
+                            if (!err) {
                                 resolve(result);
                                 return;
                             }
-                            reject(result);
+                            reject(err);
                         });
                     });
-                }).catch(function( err) {
+                }).catch(function(err) {
                     console.error(err);
                 });
             };
@@ -175,8 +175,12 @@
             var proto = {};
             proto.get = function () {
                 return new Promise(function(resolve, reject) {
-                    web3.provider.send({call: property.getter}, function(result) {
-                        resolve(result);
+                    web3.provider.send({call: property.getter}, function(err, result) {
+                        if (!err) {
+                            resolve(result);
+                            return;
+                        }
+                        reject(err);
                     });
                 });
             };
@@ -184,12 +188,12 @@
                 proto.set = function (val) {
                     return flattenPromise([val]).then(function (args) {
                         return new Promise(function (resolve) {
-                            web3.provider.send({call: property.setter, args: args}, function (result) {
-                                if (result) {
+                            web3.provider.send({call: property.setter, args: args}, function (err, result) {
+                                if (!err) {
                                     resolve(result);
-                                } else {
-                                    reject(result);
+                                    return;
                                 }
+                                reject(err);
                             });
                         });
                     }).catch(function (err) {
@@ -440,7 +444,7 @@
         if(data._id) {
             var cb = web3._callbacks[data._id];
             if (cb) {
-                cb.call(this, data.data);
+                cb.call(this, data.error, data.data)
                 delete web3._callbacks[data._id];
             }
         }