private List<Variable> init(final Properties customProperties, final String... args)
	{
		jmxGroup.setMaxPriority(Thread.MAX_PRIORITY);
		
		final Properties azotProperties = new Properties();

		// Property file variables
		final File azotConfig = new File("./azot.properties");
		final List<Variable> initVariables = new ArrayList<Variable>();
		if (azotConfig.exists() && azotConfig.isFile()) {
			try {
				azotProperties.load(new FileInputStream(azotConfig));
			} catch (final IOException e) {
				throw new AzotException(e);
			}

			if (AzotConfig.GLOBAL.DEBUG) {
				System.out.println("Reading azot.properties...");
			}
		}

		if (customProperties != null) {
			azotProperties.putAll(customProperties);
		}

		// Init Azot configuration
		AzotConfig.GLOBAL.init(azotProperties);

		for (final Object propKey : azotProperties.keySet()) {
			String key = (String) propKey;

			Variable newVariable = VariableHelper.addOrUpdateVariable(key, azotProperties.getProperty(key), true, false, initVariables);

			if (AzotConfig.GLOBAL.DEBUG) {
				System.out.println("Setting variable: ${" + newVariable.getId() + "} = " + newVariable.getValue());
			}
		}

		// Command line variables
		for (int i = 0; i < args.length; i++) {
			//final Variable newVariable = new Variable();
			final String varId;
			final String varValue;
			if(args[i].contains("=")) {
				final String[] argParts = args[i].split("=");
				varId = argParts[0];
				varValue = argParts[1];
			}
			else {
				varId = String.valueOf(i);
				varValue = args[i];
			}

			final Variable newVariable = VariableHelper.addOrUpdateVariable(varId, varValue, true, false, initVariables);

			if (AzotConfig.GLOBAL.DEBUG) {
				System.out.println("Setting variable: ${" + newVariable.getId() + "} = " + newVariable.getValue());
			}
		}

		/*
		if (AzotConfig.GLOBAL.JMX != null) {
			final String[] jmxParams = AzotConfig.GLOBAL.JMX.split(",");
			for (final String jmxParam : jmxParams) {
				try {
					int sampling = 100;
					final String str = jmxParam.split(";")[1];
					if (str != null && !str.isEmpty()) {
						if ( str.split("=")[0].equals("sampling") && str.split("=")[1] != null && !str.split("=")[1].isEmpty()) {
							sampling = Integer.parseInt(str.split("=")[1]);
						}
					}
					final String jmxConnection = jmxParam.split(";")[0];
					final JMXMonitoring jmxMonitoring = new JMXMonitoring(jmxGroup, jmxConnection, sampling);
					jmxMonitoring.setOutputFile(new File(AzotConfig.GLOBAL.OUTPUT_DIRECTORY, "profile-" + jmxConnection.replace(':', '_') + ".xml"));
					jmxMonitoring.begin();
				} catch (final Exception e) {
					e.printStackTrace();
				}
			}
		}
		*/

		return initVariables;
	}