public boolean begin(String[] args)
	{
		//read in system properties
		String OS = System.getProperty("os.name");
		systemInfo.put("OS", OS);
		String localIP = "No Network Connection";
		try {
			localIP = InetAddress.getLocalHost().getHostAddress().toString();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		systemInfo.put("localIP",localIP);
		
		System.out.println(OS + " - " + localIP);
		
		//read in user preferences from file
		prefController.readPrefs();
		
		//prepare input device list
		deviceList = GenericInputDevice.populateDeviceList();
				
		//populate database list
		databaseList = GenericDatabase.populateDatabaseList();
		
		//pair input devices with databases
		for (String key : prefController.prefs.getIDDPairMap().keySet())
		{
			for (GenericDatabase database: databaseList)
			{
				if (database.settingsMap.get("name").equals(key) )
				{
					database.settingsMap.put("target", prefController.prefs.getIDDPairMap().get(key));
					
					for(GenericInputDevice targetDevice: deviceList)
					{
						if ( targetDevice.settingsMap.get("name").equals(database.settingsMap.get("target")) )
						{
							database.targetDevice = targetDevice;
							System.out.println("Set Database target: "+database.targetDevice.settingsMap.get("name"));
						}
					}
					
					//start the thread for the this database.
					database.startTimer();
					
					System.out.println("Created Database - Input Device Pair: "+key+"&"+database.settingsMap.get("target"));
				}
			}
		}
		
		
		
		//launch and initialize the web server
		WebServer webServer = new WebServer();
		webServer.controller = this;
		webServer.start();
		
		
		
		//if defined in prefences, launch javafx interface
		if (prefController.prefs.getUserInterface().equals("JAVAFX"))
		{
			//TODO: JavaFX needs some method of getting access to contents of databaseList and deviceList (use webserver?)
			Application.launch(JavaFXView.class, args);
		}
		
		return true;
	}