                 Transition(ALIGNING_WITH_SERVER);
             }
         }
-        else if (serverBeacon.IsFacingBeacon() || TMRArd_IsTimerExpired(SEEKING_TIMER))
+        // found the beacon, go towards it
+        else if (serverBeacon.IsFacingBeacon()) 
         {
             TMRArd_StopTimer(SEEKING_TIMER);
             TMRArd_ClearTimerExpired(SEEKING_TIMER);
             presser.Rest();
 
+            // no dynamic braking on purpose - it 
+            // messes with our random pattern
+            currState = BRAKING;
+            returnToState = TRAVELLING_TO_SERVER;
             Brake(SPIN);
-            returnToState = TRAVELLING_TO_SERVER;
-            currState = BRAKING;
-        }
-        break;
-    case INITIAL_ALIGNING_WITH_EXCHANGE:
-        break;
+        } 
+        // stuck in dead zone w/ no beacon signal. 
+        // Go towards exchange (guaranteed to be found)
+        else if (TMRArd_IsTimerExpired(SEEKING_TIMER))
+        {
+            TMRArd_ClearTimerExpired(SEEKING_TIMER);
+
+            currState = ALIGNING_WITH_EXCHANGE_2;
+            Transition(ALIGNING_WITH_EXCHANGE_2);
+        }
+        break;
+
+    case ALIGNING_WITH_EXCHANGE_2:
+        // found exchange, go towards it and resume searching for server
+        if(exchangeBeacon.IsFacingBeacon()) 
+        {
+            TMRArd_StopTimer(SEEKING_TIMER);
+            TMRArd_ClearTimerExpired(SEEKING_TIMER);
+
+            currState = BACKING_UP;
+            returnToState = SEEKING_SERVER;
+            Backup(2, BACKWARD);
+        }
+        // did not find (should never happen), randomly 
+        // drive somewhere and try again
+        else if (TMRArd_IsTimerExpired(SEEKING_TIMER)) {
+            TMRArd_ClearTimerExpired(SEEKING_TIMER);
+
+            currState = TRAVELLING_TO_SERVER;
+            Transition(TRAVELLING_TO_SERVER);
+        }
+        break;
+
     case TRAVELLING_TO_SERVER:
+        // Found line, align with server
         if (lineSensors.IsCenterOverLine())
         {
             if (millis() - time > DYNAMIC_BRAKE_TIME)

        }
        break;
    case SEEKING_SERVER:
        if (lineSensors.IsCenterOverLine())
        {
            if (millis() - time > DYNAMIC_BRAKE_TIME)

                Transition(ALIGNING_WITH_SERVER);
            }
        }
        // hit a wall, back up and try again
        else if (bumpers.IsFrontPressed())
        {
            currState = BACKING_UP;
            returnToState = SEEKING_SERVER;
            Backup(1.5, BACKWARD);
        }
        // went a long time without seeing anything. Try again.
        else if (TMRArd_IsTimerExpired(TRAVELLING_TIMER) && !serverBeacon.IsFacingBeacon())
        {
            TMRArd_ClearTimerExpired(TRAVELLING_TIMER);
