public boolean MovePiece(Player player, int pieceID, String locLabel)
	{
		GamePiece curPiece = player.getPiece(pieceID);
		Location curLoc = GetPieceLocation(curPiece);
		Location newLoc = GetLocationByLabel(locLabel);
		
		if (curPiece == null || newLoc == null)
		{
			return newMessageDialog("Invalid piece id or location label", 1500);
		}
		
		// Detect if we are in fly mode. If not, make sure we're adjacent.
		// Make sure the locations are neighbors.
		if (!this.cheatMode && player.getScore() > 3 && !AreNeighbors(curLoc, newLoc))
		{
			return newMessageDialog("That spot is not adjacent", 1500);
		}
		
		// Make sure the location is empty
		if (!newLoc.ContainsPiece(null))
		{
			return newMessageDialog("There is a piece there already", 1500);
		}
		
		// We're ok to move the piece.
		curPiece.setStatus(GamePiece.MOVED);
		curPiece.setMv(new Movement(curLoc, newLoc));
		curPiece.setMoving(true);
		
		newLoc.setPiece(curPiece);
		curLoc.setPiece(null);
		
		// Check for a created mill.
		if (IsMill(newLoc))
		{
			// We will return false so current player is not nexted.
			// Set current phase to removal phase.
			String s = "%s has created a mill!";
			s = String.format(s, player.getName());
			this.newMessageDialog(s, 5000);
			//JOptionPane.showMessageDialog(this.mw, s);
			this.SetCurrentPhase(REMOVAL_PHASE);
			return false;
		}
		
		return true;

	}