private void convert() {
        ExternalChangesParser externalChangesParser = new ExternalChangesParser();
        EobGlobalData eobGlobalData = new EobGlobalData();

        InputStream eob1RepairStream = ExternalChangesParser.class.getClassLoader().getResourceAsStream("org/eob/repairEob1.dat");
        InputStream externalChangesStream = null;
        try {
            externalChangesStream = settings.extChangesPath.trim().length() == 0 ?
                    ExternalChangesParser.class.getClassLoader().getResourceAsStream("org/eob/externalChangesEob1.dat") :
                    new FileInputStream(settings.extChangesPath);
        } catch (FileNotFoundException e) {
            EobLogger.println("File '" + settings.extChangesPath + "'was not found!");
        }

        eobGlobalData.externalChangeCommands = externalChangesParser.parseFile(eob1RepairStream, settings);
        if (externalChangesStream != null) {
            eobGlobalData.externalChangeCommands.addAll(externalChangesParser.parseFile(externalChangesStream, settings));
        }
        EobFiles eobFiles = new EobFiles(settings.srcPath);
        eobGlobalData.itemTypeDatFile = new ItemTypeDatFile(eobFiles.getFile(ITEM_TYPE_FILE));
        Eob1Settings.init(eobGlobalData);

        if (settings.showItemTypes) {
            eobGlobalData.itemTypeDatFile.printItemTypes();
        }

        eobGlobalData.itemParser = new ItemParser(eobFiles.getFile(ITEMS_FILE), eobGlobalData, settings);
        eobGlobalData.itemParser.parseFile();

        GrimrockExport grimrockExport = new GrimrockExport(eobGlobalData.externalChangeCommands, settings, eobGlobalData);

        for (int levelId = settings.from; levelId <= settings.to; levelId++) {
            byte[] levelMazFile = eobFiles.getFile(String.format(LEVEL_MAZ_FILE, levelId));
            if (levelMazFile != null) {
                LevelParser levelParser = new LevelParser(levelId, levelMazFile, eobGlobalData, settings);
                levelParser.parse();
                grimrockExport.addLevel(levelParser);
            }

            byte[] levelInfFile = eobFiles.getFile(String.format(LEVEL_INF_FILE, levelId));
            if (levelInfFile != null) {
                InfFile infFile = new InfFile(levelId, levelInfFile, eobGlobalData, settings);
                infFile.showLevelInformation();
                grimrockExport.addLevelInfo(infFile);
            }

        }
        EobLogger.println("");

        grimrockExport.exportIntoGrimrock(settings.createFilePerLevel);

        if (settings.debug) {
            EobLogger.println("Summary:");
            EobLogger.println("Exported " + eobGlobalData.itemParser.getItemsCount() + " items of " +
                    eobGlobalData.itemTypeDatFile.itemTypeList.size() + " different types (" + eobGlobalData.itemTypeDatFile.getUnknownItemsCount() + " are unknown)");
        }
        EobLogger.println("Conversion finished.");
    }