private boolean verticalMove(int fromY, int toY, int x) {
		Board board = getBoard();
		// define the direction by coordinates
		boolean isUpDirection = toY >= fromY;
		
		// bottom to top
		if (isUpDirection) {
			for (int i = fromY; i <= toY; i++) {
				if (exitFlag || Thread.currentThread().isInterrupted()) return false;
				
				// invert cells
				board.setCell(board.getCell(x, i) == Cell.Empty ? Cell.Full : Cell.Empty, x, i);
				fireBoardChanged(board);
				sleep(ANIMATION_DELAY);
			}
			// top to bottom
		} else {
			for (int i = fromY; i >= toY; i--) {
				if (exitFlag || Thread.currentThread().isInterrupted()) return false;
				
				// invert cells
				board.setCell(board.getCell(x, i) == Cell.Empty ? Cell.Full : Cell.Empty, x, i);
				fireBoardChanged(board);
				sleep(ANIMATION_DELAY);
			}
		}
		return true;
	}