diff --git a/js/menus/SetupCommMenuView.js b/js/menus/SetupCommMenuView.js
index 99db91db484239c7539985d41de1be627bac7fb4..b02de02a6335a399c9d4828bace6e7ba077be676 100644
--- a/js/menus/SetupCommMenuView.js
+++ b/js/menus/SetupCommMenuView.js
@@ -14,7 +14,8 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
             "click #serialFlushBuffer":                         "_flushBuffer",
             "click #nodeSetupInstructions":                     "_setupInstructions",
             "click #refreshPorts":                              "_refreshPorts",
-            "change #seriallTestMessage":                       "_sendTestMessage"
+            "change #seriallTestMessage":                       "_sendTestMessage",
+            "click #reconnectToNode":                           "_reconnectToNode"
         },
 
 
@@ -70,6 +71,10 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
             })
         },
 
+        _reconnectToNode: function(){
+            serialComm.attemptToConnectToNode();
+        },
+
         _makeTemplateJSON: function(){
             return _.extend(this.model.toJSON(), serialComm.toJSON(), {allBaudRates: [300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200]});
         },
@@ -99,12 +104,13 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
                     </ul>\
                 </div>\
             &nbsp;&nbsp;<a href="#" id="refreshPorts" class="btn btn-lg btn-default btn-icon"><img src="assets/imgs/refreshIcon.png"></a><br/><br/>\
-        Incoming: &nbsp;&nbsp;<pre id="incomingSerialMessage"></pre><br/>\
+        Incoming: &nbsp;&nbsp;<pre id="incomingSerialMessage"></pre><br/><br/>\
         <input id="seriallTestMessage" value="<%= testMessage %>" placeholder="Send Message" class="form-control fullWidth unresponsiveInput" type="text"><br/><br/>\
         <a href="#" id="serialFlushBuffer" class="btn btn-block btn-lg btn-danger">Flush Buffer</a><br/>\
         <% }else{ %>\
         No node server found.<br/><br/>\
         <a href="#" id="nodeSetupInstructions" class="btn btn-block btn-lg btn-default">Setup Instructions</a><br/>\
+        <a href="#" id="reconnectToNode" class="btn btn-block btn-lg btn-success">Reconnect</a><br/>\
         <% } %>\
             '),
 
diff --git a/js/models/SerialComm.js b/js/models/SerialComm.js
index 41d9a45ad9a318594e50334fc1e4a17dfedfdd5d..e880a6c0dc301b65880180d0d33f5175325bcd60 100644
--- a/js/models/SerialComm.js
+++ b/js/models/SerialComm.js
@@ -4,8 +4,6 @@
 
 define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
 
-    var socket = io.connect('http://localhost:8080');
-
     var SerialComm = Backbone.Model.extend({
 
         defaults: {
@@ -20,23 +18,37 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
         },
 
         initialize: function(){
+            this.attemptToConnectToNode();
+        },
+
+        attemptToConnectToNode: function(){
+            if (!this.get("connected")) {
+                this.socket = io.connect('http://localhost:8080', {'forceNew':true});
+                addEventHandlers(this.socket);
+            }
+        },
+
+        connectionFailed: function(){
+            this.set("connected", false);
+            this.socket.disconnect();
+            this.socket = null;
         },
 
         refreshPorts: function(){
-            socket.emit('refreshPorts');
+            this.socket.emit('refreshPorts');
         },
 
         send: function(data){
-            socket.emit("dataOut", data);
+            this.socket.emit("dataOut", data);
         },
 
         flushBuffer: function(){
-            socket.emit("flush");
+            this.socket.emit("flush");
         },
 
         changeProperty: function(property, value){//portName, baudRate
             if (property === null || property === undefined || value === null || value === undefined) return;
-            socket.emit(property, value);//always pass user interaction on
+            this.socket.emit(property, value);//always pass user interaction on
             this.set(property, value);
         }
 
@@ -44,41 +56,50 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
 
     var serialComm = new SerialComm();
 
-    socket.on('connected', function(data){
-        serialComm.set("connected", true, {silent:true});
-        _.each(_.keys(data), function(key){
-            if (data[key] !== null) serialComm.set(key, data[key], {silent:true});
+    function addEventHandlers(socket){
+
+        socket.on('connected', function(data){
+            serialComm.set("connected", true, {silent:true});
+            _.each(_.keys(data), function(key){
+                if (data[key] !== null) serialComm.set(key, data[key], {silent:true});
+            });
+            serialComm.trigger("change");
         });
-        serialComm.trigger("change");
-    });
 
-    socket.on('disconnected', function(){//todo this never happens
-        serialComm.set("connected", false);
-    });
+        socket.on('dataIn', function(data){
+            serialComm.set("lastMessageReceived", data, {silent:true});
+            serialComm.trigger("change:lastMessageReceived");
+        });
 
-    socket.on('dataIn', function(data){
-        serialComm.set("lastMessageReceived", data, {silent:true});
-        serialComm.trigger("change:lastMessageReceived");
-    });
+        socket.on('portConnected', function(data){
+            console.log("connected port " + data.portName + " at " + data.baudRate);
+            serialComm.set("baudRate", data.baudRate);
+            serialComm.set("portName", data.portName)
+            serialComm.set("portConnected", true);
+            serialComm.set("error", false);
+        });
 
-    socket.on('portConnected', function(data){
-        console.log("connected port " + data.portName + " at " + data.baudRate);
-        serialComm.set("baudRate", data.baudRate);
-        serialComm.set("portName", data.portName)
-        serialComm.set("portConnected", true);
-        serialComm.set("error", false);
-    });
+        socket.on('portDisconnected', function(data){
+            console.log("disconnected port " + data.portName + " at " + data.baudRate);
+            if (serialComm.get("baudRate") != data.baudRate) return;
+            if (serialComm.get("portName") != data.portName) return;
+            serialComm.set("portConnected", false);
+        });
+
+        socket.on("errorMsg", function(error){
+            serialComm.set("error", error);
+        });
+
+        socket.on("error", function(error){
+            console.warn(error);
+        });
+
+        socket.on("connect_error", function(){
+            serialComm.connectionFailed();
+        });
+    }
 
-    socket.on('portDisconnected', function(data){
-        console.log("disconnected port " + data.portName + " at " + data.baudRate);
-        if (serialComm.get("baudRate") != data.baudRate) return;
-        if (serialComm.get("portName") != data.portName) return;
-        serialComm.set("portConnected", false);
-    });
 
-    socket.on("errorMsg", function(error){
-        serialComm.set("error", error);
-    });