private final IOListContainer loadCompoundBlock(Element element) {

		ArrayList<String> inList = new ArrayList<>();
		ArrayList<String> outList = new ArrayList<>();

		NodeList nodes = element.getChildNodes();
		for (int i = 0; i < nodes.getLength(); i++) {
			Node node = nodes.item(i);

			if (node instanceof Element) {

				Element child = (Element) node;

				if (child.getNodeName() == "CompoundBlock") {
					// load child CompoundBlocks recursively
					IOListContainer temp = loadCompoundBlock(child);
					CompoundBlock currentBlock = new CompoundBlock(
							child.getAttribute("uuid"), temp.inList,
							temp.outList);

					blockHash.put(currentBlock.getBlockID(), currentBlock);

				} else if (child.getNodeName() == "BaseBlock") {

					BaseBlock baseBlock = loadBaseBlock(child);
					blockHash.put(baseBlock.getBlockID(), baseBlock);

				} else if (child.getNodeName() == "in") {
					inList.add(child.getAttribute("name"));
				} else if (child.getNodeName() == "out") {
					outList.add(child.getAttribute("name"));
				}

			}
		}

		return new IOListContainer(inList, outList);
	}