public void LoadData() {
        //name of csv files with data
        // exported by hand from static data dump
        String BlueprintCSV = "blueprints.csv";
        String MaterialCSV = "materials.csv";
        // place where csv are
        String folder = "data/";

        // material vector
        List<Material> mats = new ArrayList<Material>();

        // ##### MATERIALS #####
        try {
            // iostream
            BufferedReader br;
            // csv lies in data folder, charset is utf-8 without bom
            br = Files.newBufferedReader(Paths.get(folder + MaterialCSV), Charset.forName("UTF-8"));
            // string which holds a single line
            String line = "";
            // iterate over all lines of the file
            while ((line = br.readLine()) != null) {
                // split line by semicolons
                String[] split = line.split(";");
                // fill Material with parsed data
                Material m;
                m = new Material();
                m.ProductID = Integer.parseInt(split[0]);
                m.ProductName = split[1];
                m.MaterialID = Integer.parseInt(split[2]);
                m.MaterialName = split[3];
                m.PerfectAmount = Integer.parseInt(split[4]);
                // push back data
                mats.add(m);
            }
            // close materials.csv
            br.close();

        } catch (IOException e) {
            // basic "file not found" message
            System.err.format("IOException: %s%n", e);
        }
        System.out.println("materials loaded");
        // ##### BLUEPRINTS #####
        try {
            // iostream
            BufferedReader br;
            // csv lies in data folder, charset is utf-8 without bom
            br = Files.newBufferedReader(Paths.get(folder + BlueprintCSV), Charset.forName("UTF-8"));
            // string which holds a single line
            String line = "";
            // iterate over all lines of the file
            while ((line = br.readLine()) != null) {
                // split line by semicolons
                String[] split = line.split(";");
                // fill Material with parsed data
                Blueprint b;
                b = new Blueprint();
                b.BlueprintID = Integer.parseInt(split[0]);
                b.BlueprintName = split[1];
                b.ProductID = Integer.parseInt(split[2]);
                b.ProductName = split[3];
                b.ProductionTime = Integer.parseInt(split[4]);
                b.PortionSize = Integer.parseInt(split[5]);
                b.ResearchPE = Integer.parseInt(split[6]);
                b.ResearchME = Integer.parseInt(split[7]);
                b.ResearchCopy = Integer.parseInt(split[8]);
                b.ProductivityModifier = Integer.parseInt(split[9]);
                b.MaterialModifier = Integer.parseInt(split[10]);
                b.WasteFactor = Float.parseFloat(split[11]);
                b.ProductionLimit = Integer.parseInt(split[12]);

                // get blueprint materials
                for (int i = 0; i < mats.size(); i++) {
                    if (mats.get(i).ProductID == b.ProductID) {
                        b.Materials.add(mats.get(i));
                    }
                }
                // push into main data structure list from class
                BPO.add(b);
            }
            // close blueprints.csv
            br.close();

        } catch (IOException e) {
            // basic "file not found" message
            System.err.format("IOException: %s%n", e);
        }
        System.out.println("blueprints loaded");
    }