public static boolean save() {
		if (HoleList.size() == 0) { // If queue is empty OR economy is disabled.
			HoleFile.delete();

			Golfcraft.Log(Level.INFO, "No holes to save.");

			return true;
		}

		Golfcraft.Log(Level.INFO, "Saving " + HoleList.size() + " holes...");

		try {
			if (!HoleFile.exists()) {
				if (!HoleFile.createNewFile()) {
					Golfcraft.Log(Level.SEVERE, "Error creating Holes file.");

					return false;
				}
			}

			DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
			DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
			Document doc = docBuilder.newDocument();

			Element fileVersionElement = doc.createElement("file");
			fileVersionElement.setAttribute("version", "1.0");
			doc.appendChild(fileVersionElement);

			for (GcHole hole : HoleList) {
				Element doorElement = doc.createElement("hole");
				doorElement.setAttribute("world", hole.world.getName());
				doorElement.setAttribute("hole", hole.hole);
				doorElement.setAttribute("par", hole.par + "");
				doorElement.setAttribute("x", hole.x + "");
				doorElement.setAttribute("y", hole.y + "");
				doorElement.setAttribute("z", hole.z + "");
				fileVersionElement.appendChild(doorElement);
			}

			TransformerFactory transfac = TransformerFactory.newInstance();
			Transformer trans = transfac.newTransformer();
			// trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
			trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
			trans.setOutputProperty(OutputKeys.INDENT, "yes");

			StreamResult result = new StreamResult(new StringWriter());
			DOMSource source = new DOMSource(doc);
			trans.transform(source, result);

			FileOutputStream OUT = new FileOutputStream(HoleFile);
			OUT.write(result.getWriter().toString().getBytes());
			OUT.flush();
			OUT.close();

			Golfcraft.Log(Level.INFO, "Holes Saved Successfully.");

			return true;
		}
		catch (Exception e) {
			Golfcraft.Log(Level.SEVERE, "Unknown error saving Holes.");

			e.printStackTrace();

			return false;
		}

	}