private void loadSecondLevelData() {
        secondLevelRegions.clear();
        secondLevelArcFlags.clear();
        secondLevelRegionMap.clear();
        partitioner.setMaxNodesPerRegion(levelTwoMaxNodes);
        
        for (Set<DirectedGraphNode> firstLevelRegion : firstLevelRegions) {
            final List<Set<DirectedGraphNode>> miniRegions = 
                    partitioner.partition(firstLevelRegion);
            secondLevelRegions.add(miniRegions);
            
            final RegionMap rm = new RegionMap();
            secondLevelRegionMap.add(rm);
            secondLevelArcFlags.add(new ArcFlags());
            
            int index = 0;
            
            for (final Set<DirectedGraphNode> miniRegion : miniRegions) {
                for (final DirectedGraphNode node : miniRegion) {
                    rm.put(node, index);
                }
                
                ++index;
            }
        }
        
        int index = 0;
        
        for (final List<Set<DirectedGraphNode>> region : secondLevelRegions) {
            for (final Set<DirectedGraphNode> miniRegion : region) {
                setInnerFlags(miniRegion, secondLevelArcFlags.get(index));
            }
            
            for (final Set<DirectedGraphNode> miniRegion : region) {
                Set<DirectedGraphNode> b = getBoundaryNodesOfRegion(miniRegion);
                GSCORE.clear();
                
                for (final DirectedGraphNode node : b) {
                    computeArcFlagsSecondLevel(node, miniRegion);
                }
            }
            
            ++index;
        }
    }