 }
 
 void loop() {
+    /*
     if (DEBUG) {  
       digitalWrite(GREENLED, digitalState(LIMIT_SW));     // glow when free. in loop 
       digitalWrite(REDLED, digitalState(LIMIT_ARM));      // glow when free. in loop
     }
+    */
     
     // only handles limiting if bin is mostly empty
-    if ((liftState == HIGH) && (stepperLift.targetPosition() < 0)) {
-      delay(5);                                    // de-bounce the switch hopefully
+    if ((liftState == HIGH) && !BACKINGOFF) {
+      delay(3);                             // de-bounce the switch hopefully
       if (digitalState(LIMIT_SW)) {
         stepperLift.setCurrentPosition(0);
-        delay(3);                                 // deceleration 
         stepperLift.moveTo(liftBackOff);
         BACKINGOFF = true;
-        timeStart = millis();
         UPDATE = true;
         liftState = LOW;
       }
     }
-    else if ((!liftState) && ((timeStart - millis()) > 1900))    // deals with limit-switch hysterysis
+    else if (BACKINGOFF && !liftState) {   // deals with limit-switch hysterysis
       BACKINGOFF = false;
-    else if ((liftState == HIGH) && (!BACKINGOFF)) {          // stopping for unforseen reasons
-      delay(4);                                               // de-bounce
-      if (digitalState(LIMIT_SW)) {
-        stepperLift.stop();                                  // stop at maximum deceleration
-        UPDATE = true;                                      // report position
-        liftState = LOW;
-      }
-    }
+      liftBackOff = stepperLift.currentPosition();
+      if (liftBackOff < 1)
+        Serial.println("WARNING  WARNING  error with liftBackOff");
+      stepperLift.setCurrentPosition(0);
+    }
+      
     
     // arm starts off moving towards limit switch in setup(), hits it, moves to ready-to-load         
     if ((armState == HIGH) && (stepperArm.targetPosition() < 0)){

const byte CARD_PIN = A1;           // Analog prox. for 'card on-board'
const int cardThickness = 52;       // calculated 141 steps to lift a card. 608steps/turn
                                     // (20 turns per 86 cards, 141.3953 ...
const int proxSense2 = 600;         // threshold for OPB606A riding on fan housing
const int liftSenseTop = 810;        // above threshold nothing is close to face of OPB606A
const long int hoverArmPos = 5;      // pick up postion after zeroing against armLimit
const long int firstArmPos = 142;    // experimentally determined drop-off position
const long int secondArmPos = 280;   // 2nd drop and max Arm travel
const byte lowAng = 120;              // servo position: closest approach to card-stack
const byte highAng = 157;              // servo postion:
const byte bumpBinSteps = 36;        // for jiggle when grabTryCo17unt goes up.
const byte servoPosition = 145;      // initial setup() safe servo position
const byte extraServoBump = 3;      // travel either way a little further then settle back to low or high
int newAnalog1 = 0;                 // hold value from the PROX_PIN sensor 
int newAnalog2 = 0;                 // hold value from the CARD_PIN sensor
int oldAnalog1 = 0;                 // discover changes in the PROX_PIN sensor 

      }
      else if (inputString == "99") {        // 'c' unidentified pile
        stepperArm.moveTo(secondArmPos);
        destinationArmPos = secondArmPos;
      }
      else if (inputString == "100") {       // 'd' Reset into loading mode until another character sent
        stepperArm.moveTo(firstArmPos);
