diff --git a/node_modules/web3-provider-engine/dist/es5/subproviders/hooked-wallet.js b/node_modules/web3-provider-engine/dist/es5/subproviders/hooked-wallet.js
index 75576ec..2077f04 100644
--- a/node_modules/web3-provider-engine/dist/es5/subproviders/hooked-wallet.js
+++ b/node_modules/web3-provider-engine/dist/es5/subproviders/hooked-wallet.js
@@ -70,6 +70,7 @@ function HookedWalletSubprovider(opts) {
   if (opts.processMessage) self.processMessage = opts.processMessage;
   if (opts.processPersonalMessage) self.processPersonalMessage = opts.processPersonalMessage;
   if (opts.processTypedMessage) self.processTypedMessage = opts.processTypedMessage; // approval hooks
+  if (opts.processTypedMessageV3) self.processTypedMessageV3 = opts.processTypedMessageV3; // approval hooks
 
   self.approveTransaction = opts.approveTransaction || self.autoApprove;
   self.approveMessage = opts.approveMessage || self.autoApprove;
@@ -84,6 +85,7 @@ function HookedWalletSubprovider(opts) {
   if (opts.decryptMessage) self.decryptMessage = opts.decryptMessage || mustProvideInConstructor('decryptMessage');
   if (opts.encryptionPublicKey) self.encryptionPublicKey = opts.encryptionPublicKey || mustProvideInConstructor('encryptionPublicKey');
   if (opts.signTypedMessage) self.signTypedMessage = opts.signTypedMessage || mustProvideInConstructor('signTypedMessage');
+  if (opts.signTypedMessageV3) self.signTypedMessageV3 = opts.signTypedMessageV3 || mustProvideInConstructor('signTypedMessageV3');
   if (opts.recoverPersonalSignature) self.recoverPersonalSignature = opts.recoverPersonalSignature; // publish to network
 
   if (opts.publishTransaction) self.publishTransaction = opts.publishTransaction; // gas options
@@ -281,7 +283,9 @@ HookedWalletSubprovider.prototype.handleRequest = function (payload, next, end)
         waterfall([function (cb) {
           return self.validateTypedMessage(msgParams, cb);
         }, function (cb) {
-          return self.processTypedMessage(msgParams, cb);
+          return payload.method === 'eth_signTypedData'
+            ? self.processTypedMessage(msgParams, cb)
+            : self.processTypedMessageV3(msgParams, cb);
         }], end);
       }();
 
@@ -405,6 +409,19 @@ HookedWalletSubprovider.prototype.processTypedMessage = function (msgParams, cb)
 // approval
 //
 
+HookedWalletSubprovider.prototype.processTypedMessageV3 = function (msgParams, cb) {
+  var self = this;
+  waterfall([function (cb) {
+    return self.approveTypedMessage(msgParams, cb);
+  }, function (didApprove, cb) {
+    return self.checkApproval('message', didApprove, cb);
+  }, function (cb) {
+    return self.signTypedMessageV3(msgParams, cb);
+  }], cb);
+}; //
+// approval
+//
+
 
 HookedWalletSubprovider.prototype.autoApprove = function (txParams, cb) {
   cb(null, true);
diff --git a/node_modules/web3-provider-engine/index.js b/node_modules/web3-provider-engine/index.js
index 3a1b7d5..a4081c5 100644
--- a/node_modules/web3-provider-engine/index.js
+++ b/node_modules/web3-provider-engine/index.js
@@ -120,7 +120,7 @@ Web3ProviderEngine.prototype.sendAsync = function(payload, cb){
 
     if (Array.isArray(payload)) {
       // handle batch
-      map(payload, self._handleAsync.bind(self), cb)
+      map(payload, handleAsyncBatch.bind(self), cb)
     } else {
       // handle single
       self._handleAsync(payload, cb)
@@ -129,6 +129,11 @@ Web3ProviderEngine.prototype.sendAsync = function(payload, cb){
   })
 }
 
+function handleAsyncBatch(payload, finished) {
+  const self = this
+  const handleAsync = self._handleAsync.bind(self)
+  handleAsync(payload, finished, true)
+}
 // private
 
 Web3ProviderEngine.prototype._getBlockByNumberWithRetry = function(blockNumber, cb) {
@@ -176,7 +181,7 @@ Web3ProviderEngine.prototype._getBlockByNumber = function(blockNumber, cb) {
   })
 }
 
-Web3ProviderEngine.prototype._handleAsync = function(payload, finished) {
+Web3ProviderEngine.prototype._handleAsync = function(payload, finished, isBatch) {
   var self = this
   var currentProvider = -1
   var result = null
@@ -229,7 +234,7 @@ Web3ProviderEngine.prototype._handleAsync = function(payload, finished) {
           code: -32000
         }
         // respond with both error formats
-        finished(error, resultObj)
+        finished(isBatch ? null : error, resultObj)
       } else {
         finished(null, resultObj)
       }
