public Object getItem(String... names) throws ReaderException {
		if (names.length < 1) {
			throw new ReaderException("No key arguments were given.");
		}

		if (_hasBeenModified() || this.json_obj == null) {
			ConfigurationManager.logger.log("modified", 5);

			_parseFile();
		}

		String name = "";
		Object current_obj = null;
		JSONObject inner_obj = null;

		if (this.json_obj instanceof JSONObject) {
			current_obj = this.json_obj;
		} else {
			throw new ReaderException("JSON file is not formatted properly.");
		}

		for (int count = 0; count <= names.length; count++) {
			if (!(current_obj instanceof JSONObject)) {
				// We've gone to far i.e. key does not exist on this level
				throw new ReaderException("Key does not exist in configuration file: " + _parseMessage(names) + ". File path: " + ConfigurationManager.config_file_path);
			}

			inner_obj = (JSONObject) current_obj;

			name = names[count];

			if (inner_obj != null && inner_obj.containsKey(name)) {
				current_obj = _getItem(inner_obj, name);

				if (count + 1 == names.length) {
					ConfigurationManager.logger.log("returning: " + current_obj.toString(), 5);

					return current_obj;
				}
			} else {
				throw new ReaderException("Key does not exist in configuration file: " + _parseMessage(names) + ". File path: " + ConfigurationManager.config_file_path);
			}
		}

		return current_obj;
	}