 
 void UserButton1() //Tell machine to move out of the way
 {
-  
   if (userControl)
   {
-    if(requestedX == currentX && requestedX != 0) requestedX = 0; //Move to 0
-    else if(requestedX == 0) requestedX =  UPPERBOUND_X - 1; //Move to upperboundX - 1
-    else requestedX = currentX; //Stop moving
+    delay(250);
+    if(requestedX != currentX) requestedX = currentX; //Stop Moving
+    else
+    {  
+      if(moveControl == false && requestedX != 0) //Move to 0
+      {
+        requestedX = 0;
+        moveControl = true;
+      }
+      else if(moveControl == true && requestedX != UPPERBOUND_X - 1)  //Move to UPPERBOUND_X
+      {
+        requestedX =  UPPERBOUND_X - 1;
+        moveControl = false;  
+      }
+      else if(moveControl == false && requestedX == 0) //At 0, move to UPPERBOUND_X instead
+      {
+        requestedX = UPPERBOUND_X - 1;  
+      }
+      else if(moveControl == true && requestedX == UPPERBOUND_X - 1) //At UPPERBOUND_X, move to 0 instead
+      {
+        requestedX =  0;  
+      }   
+    }
   }
   
 }
 
 void UserButton2() //Give/relinquish user control
 {
-  
+
+  delay(250);
   userControl = !userControl;
   requestedX = currentX;
   requestedY = currentY;

  else xDir = -1;

  digitalWrite(X1_DIR_PIN, xDir > 0);
  digitalWrite(X2_DIR_PIN, xDir > 0);

  if (requestedY > currentY)  yDir = 1;
  else  yDir = -1;

#define RMIN_PIN             27 //r sensor 1
#define RMAX_PIN             29 //r sensor 2

#define USERBUTTON1_PIN      20 //move button
#define USERBUTTON2_PIN      21 //user control button

#define UPPERBOUND_X         10000 //Number of steps for full range of motion in X, tested, somehow exactly 10000 
#define UPPERBOUND_Y         10000 //Number of steps for full range of motion in Y, need test empirically 
#define UPPERBOUND_R         197   //Number of steps for full rotation in R, need test empirically 
#define UPPERBOUND_E         3     //Number of power settings for take shot, probably 3

#define MICRODELAY           800
