public boolean isLegal(IMove iMove) {
		if (isGameOver())
			return false;
		if (iMove instanceof Move) {
			Move move = (Move)iMove;
			Piece startPiece = getPiece(move.getStart());
			if (startPiece.isNone())
				return false;
			else if (currentTurnColor != null && startPiece.getColor() != currentTurnColor)
				return false;
			else {
				Board boardCopy = deepCopy(this);
				if (startPiece.getLegalMoves(move.getStart(), this).contains(move.getEnd())) {
					boardCopy.placeMove(move);
					return !boardCopy.isInCheck(startPiece.getColor());
				}
			}
		}
		else if (iMove instanceof Resign) {
			return true;
		}
		return false;
	}