anchor.diff:    returns true if possible, false if not
      */
     List<String> moveLeft(int pullAmount) {
  +    List changedPositions = new List();
       pullPower = pullPower + pullAmount;
  +    bool cratePulled = false;
       if (staysOn.leftPointer != null) {
  -      List changedPositions = staysOn.leftPointer.isPassable(
  -          staysOn, pushPower);
  +      if (pullPower > 0 && staysOn.rightPointer.crate != null &&
  +          staysOn.leftPointer.crate == null) {
  +        changedPositions.add(staysOn.rightPointer.getPositionAsString());
  +        staysOn.rightPointer.crate.moveLeft(pushPower);
  +        pullPower--;
  +        cratePulled = true;
  +      }
  +      changedPositions.addAll(staysOn.leftPointer.isPassable(staysOn, pushPower));
         if (changedPositions.isEmpty == false) {
           changedPositions.add(this.staysOn.getPositionAsString());
  -        if (pullPower > 0 && staysOn.rightPointer.crate != null) {
  -          changedPositions.add(staysOn.rightPointer.getPositionAsString());
  -          staysOn.rightPointer.crate.moveLeft(pushPower);
  +        if (cratePulled == true) {
             String temp = changedPositions[0];
  -          changedPositions[0] = changedPositions[1];
  -          changedPositions[1] = temp;
  -          pullPower--;
  +          changedPositions[0] = changedPositions[2];
  +          changedPositions[2] = temp;
           }
           staysOn = staysOn.leftPointer;
           stats.incMoves();
  
positive.code:   returns true if possible, false if not
     */
    List<String> moveRight(int pullAmount) {
      pullPower = pullPower + pullAmount;
      if (staysOn.rightPointer != null) {
        List changedPositions = staysOn.rightPointer.isPassable(
            staysOn, pushPower);
        if (changedPositions.isEmpty == false) {
          changedPositions.add(this.staysOn.getPositionAsString());
          if (pullPower > 0 && staysOn.leftPointer.crate != null) {
            changedPositions.add(staysOn.leftPointer.getPositionAsString());
            staysOn.leftPointer.crate.moveRight(pushPower);
            String temp = changedPositions[0];
            changedPositions[0] = changedPositions[1];
            changedPositions[1] = temp;
            pullPower--;
          }
          staysOn = staysOn.rightPointer;
          stats.incMoves();
  
negative.code:   returns true if possible, false if not
     */
    List<String> moveDown(int pullAmount) {
      List changedPositions = new List();
      pullPower = pullPower + pullAmount;
      bool cratePulled = false;
      if (staysOn.downPointer != null) {
        if (pullPower > 0 && staysOn.upPointer.crate != null &&
            staysOn.downPointer.crate == null) {
          changedPositions.add(staysOn.upPointer.getPositionAsString());
          staysOn.upPointer.crate.moveDown(pushPower);
          pullPower--;
          cratePulled = true;
        }
        changedPositions.addAll(staysOn.downPointer.isPassable(staysOn, pushPower));
        if (changedPositions.isEmpty == false) {
          changedPositions.add(this.staysOn.getPositionAsString());
          if (cratePulled == true) {
            String temp = changedPositions[0];
            changedPositions[0] = changedPositions[2];
            changedPositions[2] = temp;
          }
          staysOn = staysOn.downPointer;
          stats.incMoves();
  