 }
 
 // trying for non-blocking servo with delay between actuation attempts...
-void fanDown(byte down, byte mid, byte drop, long int dropZone) {
+void fanDown(byte down, byte drop, long int dropZone) {
   // go down to get card only if stopped in hover position over bin
-  if ((millis() - timeStart) > 800){ 
-    if ((newAnalog2 > liftSenseTop) && (stepperArm.currentPosition() == hoverArmPos)) {
-      myserv.write(down);
+  
+  if (!stressedServo && ((millis() - timeStart) > 700)){ 
+    if ((stepperArm.currentPosition() == hoverArmPos) && (newAnalog2 > proxSense2)) {
+      myserv.write(down - extraServoBump);
+      restServoPos = down;
+      stressedServo = true;
       timeStart = millis();
       grabTryCount += 1;
     }
     else if ((stepperArm.currentPosition() == dropZone) && (newAnalog2 < proxSense2)) {
-      myserv.write(drop);
+      myserv.write(drop + extraServoBump);
+      restServoPos = drop;
+      stressedServo = true;
       timeStart = millis();
       grabTryCount = 0;
     }
-    else if (myserv.read() != mid) {
-      myserv.write(mid);
-      timeStart = millis();
-    }
+  }
+  else if (stressedServo && ((millis() - timeStart) > 600)) {
+    myserv.write(restServoPos);
+    stressedServo = false;
   }
 }
 

        liftState = LOW;
      }
    }
    else if ((!liftState) && ((timeStart - millis()) > 1900))    // deals with switch hysterysis
      BACKINGOFF = false;
    else if ((liftState == HIGH) && (!BACKINGOFF)) {          // stopping for unforseen reasons
      delay(4);                                               // de-bounce

    else if ((grabTryCount % 5) == 4)
        stepperLift.moveTo(stepperLift.currentPosition() + cardThickness);
        
    // TRACKING via SERIAL MONITOR without flooding it
    // analog sensors avoiding flutter values
   // comment out once everything is working perfectly 
    if (abs(oldAnalog1 - newAnalog1) > 30) {
      UPDATE = true;
      oldAnalog1 = newAnalog1;
    }
    else if (abs(oldAnalog2 - newAnalog2) > 30)
    
    if (UPDATE) {
        Serial.print("Liftpos: " + String(stepperLift.currentPosition()) + " Armpos: " + String(stepperArm.currentPosition()));
        Serial.println("  A0: " + String(newAnalog1) + "  A1: " + String(newAnalog2) + " srvo: " + String(myserv.read()));
        UPDATE = false;
    }
    
    stepperLift.run();
    stepperArm.run(); {
      UPDATE = true;
      oldAnalog2 = newAnalog2;
    }
    else if (abs(myserv.read() - oldServoPos) > 2) {
      UPDATE = true;
      oldServoPos = myserv.read();
    }
    
    if (UPDATE) {
        Serial.print("Liftpos: " + String(stepperLift.currentPosition()) + " Armpos: " + String(stepperArm.currentPosition()));
        Serial.println("  A0: " + String(newAnalog1) + "  A1: " + String(newAnalog2) + " srvo: " + String(myserv.read()));
        UPDATE = false;
    }
    
    stepperLift.run();
    stepperArm.run();
     
    // first character sent switches us into LOADED mode
    // 97="a", 98="b", 99="c", 100="d"                                
    if (Serial.available() > 0) {        
      inputString = String(Serial.read());
      if (!LOADED) {
        LOADED = true;
        stepperLift.setCurrentPosition(0);
        UPDATE = true;
      }        
      Serial.println("Rx: " + inputString);
      if (inputString == "97")               // 'a' hover over input stack
        stepperArm.moveTo(hoverArmPos);
      else if (inputString == "98") {        // 'b' ID'd pile
        stepperArm.moveTo(firstArmPos);
        destinationArmPos = firstArmPos;
      }
      else if (inputString == "99") {        // 'c' unidentified pile
        stepperArm.moveTo(secondArmPos);
        destinationArmPos = firstArmPos;
      }
      else if (inputString == "100") {       // 'd' Reset into loading mode until another character sent
        stepperArm.moveTo(firstArmPos);
        destinationArmPos = firstArmPos;
        LOADED = false;
      }
      inputString = "";
