diff --git a/lib/Local.js b/lib/Local.js
index 7486bc7..98cf766 100644
--- a/lib/Local.js
+++ b/lib/Local.js
@@ -45,12 +45,24 @@ function Local(){
       const obj = childProcess.spawnSync(that.binaryPath, that.getBinaryArgs());
       this.tunnel = {pid: obj.pid};
       var data = {};
-      if(obj.stdout.length > 0)
-        data = JSON.parse(obj.stdout);
-      else if(obj.stderr.length > 0)
-        data = JSON.parse(obj.stderr);
-      else
+      if(obj.stdout.length > 0){
+        try{
+          data = JSON.parse(obj.stdout);
+        }catch(error){
+          data = obj.stdout;
+        }
+      } else if(obj.stderr.length > 0){
+        try{
+          data = JSON.parse(obj.stderr);
+        }catch(error){
+          data = obj.stderr;
+        }
+      } else {
         return new LocalError('No output received');
+      }
+      if(typeof data === 'string'){
+        return new LocalError('Malformed output received');
+      }
       if(data['state'] != 'connected'){
         return new LocalError(data['message']['message']);
       } else {
@@ -93,21 +105,31 @@ function Local(){
             that.retriesLeft -= 1;
             fs.unlinkSync(that.binaryPath);
             delete(that.binaryPath);
-            that.start(options, callback);
-            return;
+            return that.start(options, callback);
           } else {
-            callback(new LocalError(error.toString()));
+            return callback(new LocalError(error.toString()));
           }
         }
 
         var data = {};
-        if(stdout)
-          data = JSON.parse(stdout);
-        else if(stderr)
-          data = JSON.parse(stderr);
-        else
-          callback(new LocalError('No output received'));
-
+        if(stdout){
+          try{
+            data = JSON.parse(stdout);
+          }catch(error){
+            data = stdout;
+          }
+        } else if(stderr){
+          try{
+            data = JSON.parse(stderr);
+          }catch(error){
+            data = stderr;
+          }
+        } else {
+          return callback(new LocalError('No output received'));
+        }
+        if(typeof data === 'string'){
+          return callback(new LocalError('Malformed output received'));
+        }
         if(data['state'] != 'connected'){
           callback(new LocalError(data['message']['message']));
         } else {
@@ -126,7 +148,7 @@ function Local(){
   this.stop = function (callback) {
     if(!this.pid) return callback();
     this.killAllProcesses(function(error){
-      if(error) callback(new LocalError(error.toString()));
+      if(error) return callback(new LocalError(error.toString()));
       callback();
     });
   };
@@ -316,6 +338,7 @@ function Local(){
 
   this.killAllProcesses = function(callback){
     psTree(this.pid, (err, children) => {
+      if(err) return callback(err);
       var childPids = children.map(val => val.PID);
       var killChecker = setInterval(() => {
         if(childPids.length === 0) {