diff --git a/lib/SauceBrowser.js b/lib/SauceBrowser.js
index <HASH>..<HASH> 100644
--- a/lib/SauceBrowser.js
+++ b/lib/SauceBrowser.js
@@ -10,6 +10,7 @@ function SauceBrowser(conf, opt) {
     };
 
     var self = this;
+    self._retries = 0;
     self._conf = conf;
     self._opt = opt;
     self._opt.tunnel = true;
@@ -122,9 +123,11 @@ SauceBrowser.prototype.shutdown = function(err) {
     if (err) {
         // if the environment can't be set up, we should retry since Zuul will
         // never try to initialize environments that don't exist
-        if (~err.message.indexOf('Error response status: 13')
-                || ~err.message.indexOf('The environment you requested was unavailable')
-                || (err.message == 'Not JSON response' && ~err.data.indexOf('not in progress'))) {
+        if (self._retries < 3
+                && (~err.message.indexOf('Error response status: 13')
+                    || ~err.message.indexOf('The environment you requested was unavailable')
+                    || (err.message == 'Not JSON response' && ~err.data.indexOf('not in progress')))) {
+            self._retries++;
             return self.start();
         }
         self.emit('error', err);
Added a retry threshold of three (3) to retrying on errors indicating that environments can't be instantiated so that we won't end up looping forever by mistake.