public ILevelPack chooseLevelPack(final Integer levelStage) {
        if (isLevelStageNotValid(levelStage) || getLevelPacks(levelStage) == null) {
            return null;
        }

        if (getLevelPacks(levelStage).size() == 0) {
            return null;
        } else if (getLevelPacks(levelStage).size() == 1) {
            regLvlPckSpfcContent(getLevelPacks(levelStage).get(0));
            return getLevelPacks(levelStage).get(0);
        }

        Integer poll = null;

        Printer.print(Settings_Output.OUT_OPTION_HEAD, "Please choose a level pack to play");
        printLevelPacks(levelStage);

        while (poll == null || poll < 0 || poll >= getLevelPacks(levelStage).size()) {
            poll = InputReader.readInteger();
            if (poll < 0 || poll >= getLevelPacks(levelStage).size()) {
                Printer.print(Settings_Output.OUT_ERROR, "Option Error", 0, "Option Error",
                        "Level Pack out of index");
                continue;
            }
        }

        final ILevelPack levelPack = getLevelPacks(levelStage).get(poll);

        regLvlPckSpfcContent(levelPack);

        return levelPack;
    }