String readProperties(String configFileName) {
		properties = new Properties();
		try {
			// Try to read properties file
			File confFile = new File(configFileName);
			if (Gpr.canRead(configFileName)) {
				properties.load(new FileReader(confFile));
				return configFileName;
			}

			// Build error message
			StringBuilder errMsg = new StringBuilder();
			errMsg.append("\tConfig file name : '" + configFileName + "'" + "\n\tFull path        : '" + confFile.getCanonicalPath() + "'" + "\n");

			// Absolute path? Nothing else to do...
			if (confFile.isAbsolute()) throw new RuntimeException("Cannot read config file!\n" + errMsg);

			// Try reading from relative dir
			configFileName = getRelativeConfigPath() + "/" + configFileName;
			confFile = new File(configFileName);
			if (Gpr.canRead(configFileName)) {
				properties.load(new FileReader(confFile));
				return configFileName;
			}
			errMsg.append("\n\tConfig file name : '" + configFileName + "'" + "\n\tFull path        : '" + confFile.getCanonicalPath() + "'" + "\n");

			throw new RuntimeException("Cannot read config file!\n" + errMsg);
		} catch (FileNotFoundException e) {
			throw new RuntimeException("Cannot find config file '" + configFileName + "'");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}