protected void makeMove(Move m) {
      // Check to see if this was a capture
      //boolean moveWasACapture = checker_of(opponent(nextPlayerToMove), m.x2, m.y2);
      int x1 = m.x1;
      int y1 = m.y1;
      int x2 = m.x2;
      int y2 = m.y2;
      m.captured = mBoard[x2][y2];
      int side = mBoard[x1][y1];
      // reduce quad counts for the from and to locations then update the quads
      // and recalculate the quad values.
      subtractQuad_numbers(x1, y1, side);
      subtractQuad_numbers(x2, y2, side);

      // If we are only moving one mBoard up, down or left, right need to ensure
      // that the quadcounts do not get off.
      Piece quad_list = null;
      if (Math.abs(x1 - x2) == 1 && (y1 - y2) == 0) {
        int max_row = Math.max(x1, x2);
        quad_list = new Piece(max_row, y1, side);
        quad_list.next = new Piece(max_row, y1 + 1, side);
      } else if ((x1 - x2) == 0 && Math.abs(y1 - y2) == 1) {
        int max_col = Math.max(y1, y2);
        quad_list = new Piece(x1, max_col, side);
        quad_list.next = new Piece(x1 + 1, max_col, side);
      }
      for (Piece p = quad_list; p != null; p = p.next)
        quadcount[side][quad[side][p.x][p.y]]++;

     // SIMPLE
      m.piece = findPiece( x1, y1, side);
      m.piece.x = m.x2;
      m.piece.y = m.y2;
      mBoard[x2][y2] = mBoard[x1][y1];
      mBoard[x1][y1] = EMPTY_SQUARE;
      subtractLines(x1, y1);

      // QUAD
      // Now update the quad information
      removeQuad(x1, y1, side);
      addQuad(x2, y2, side);
      // If this was a capture do the same for the opponent
      if (m.captured != EMPTY_SQUARE) {
        piece_list[m.captured] = deletePiece(piece_list[m.captured], x2, y2, m);
        subtractQuad_numbers(x2, y2, m.captured);
        removeQuad(x2, y2, m.captured);
        addQuad_numbers(x2, y2, m.captured);
      } else
        addToLinesOfAction(x2, y2);
      // Here is the recalculating of the quad counts
      addQuad_numbers(x2, y2, side);
      addQuad_numbers(x1, y1, side);
      for (Piece p = quad_list; p != null; p = p.next)
        quadcount[side][quad[side][p.x][p.y]]--;
      nextPlayerToMove = opponent(nextPlayerToMove);
    }