private void createFromParseList(ParseList list) throws CriticalFailure
	{
		list.insertBlockIDs(blockMap);
		Hashtable<String,TreeNodeArea> areas = list.createAreaNodes();
		Hashtable<String,Modifier> modifiers = list.createModifiers();	
		Hashtable<String,ModifierGroup> modifierGroups = list.createModifierGroups();	
		for (Enumeration<String> e = areas.keys(); e.hasMoreElements();)
		{
			String areaName = e.nextElement();
			ArrayList<String> modNames = areas.get(areaName).getModifierGroupNames();
			for (String name : modNames)
			{
				ModifierGroup mod = modifierGroups.get(name);
				if (mod != null)
				{
					ExceptionLogger.log("Adding ModifierGroup \""+name+"\"", LoggerLevel.FINEST);
					mod.addModifiers(modifiers);
					areas.get(areaName).addModifierGroup(mod.clone());
				}
				else
				{
					ExceptionLogger.logException(new UnknownIdentifier(name), LoggerLevel.ERROR);
				}
			}
		}
		for (Enumeration<String> e = areas.keys(); e.hasMoreElements();)
		{
			String areaName = e.nextElement();
			ExceptionLogger.log("Parsing Area \""+areaName+"\"", LoggerLevel.FINE);
			ArrayList<String> subNames = areas.get(areaName).getSubAreaNames();
			for (String name : subNames)
			{
				TreeNodeArea area = areas.get(name);
				if (area != null)
				{
					ExceptionLogger.log("Adding SubArea \""+name+"\"", LoggerLevel.FINEST);
					areas.get(areaName).addSubArea(area.clone());
				}
				else
				{
					ExceptionLogger.logException(new UnknownIdentifier(name), LoggerLevel.ERROR);
				}
			}
		}
		world = areas.get("World");
		if (world == null)
		{
			ExceptionLogger.logException(new NoWorldException(), LoggerLevel.CRITICAL);
		}
		else
		{
			world.setAsRootNode();
		}
	}