public static FileSystemTask load(File path) throws Exception {
		/* make sure the path exists and is a directory */
		if (!path.exists() || !path.isDirectory()) throw new Exception(path.getPath() + " does not exist.");

		FileSystemTask task = new FileSystemTask();
		
		Debugger.addMessage("FileSystemTask.load: " + path.getPath());
		
		/* get the file system name from the path */
		String plainName = path.getName();
		task.setPlainName(plainName);

		/* read the meta data; if the meta data file does not exist, the path does not contain a task */
		String name = null, date = null, status;
		File metaFile = new File(path, META_FILE);
		if (!metaFile.exists()) return null;

		/* use the fancy Configuration class to read and parse the meta data variables */
		Configuration conf = Configuration.parse(metaFile);
		name = conf.get(CONFIG_NAME);
		/* plain name is taken from the directory name, so not this: plainName = conf.get(CONFIG_PLAIN_NAME); */
		date = conf.get(CONFIG_CREATION_TIME);
		status = conf.get(CONFIG_STATUS);
		
		/* validate and parse the variables */
		if (name == null) throw new Exception("no name in metadata " + metaFile.getPath());
		if (date == null) throw new Exception("no date in metadata " + metaFile.getPath());
		long timeStamp = Long.parseLong(date);

		/* set the name, creation date and status */
		task.setName(name);
		task.setCreationTime(timeStamp);
		try { task.setStatus(Short.parseShort(status)); } catch (Exception e) {}
		
		/* read the task text if it exists */
		File textFile = new File(path, TEXT_FILE);
		if (textFile.exists()) {
			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(textFile), "UTF-8"));
			String text = "", line;
			while ((line = reader.readLine()) != null) {
				if (text.length() > 0) text = text + "\n";
				text = text + line;
			}
			task.setText(text);
			reader.close();
		} else task.setText(null);
		
		/* clear the dirty flag, since the Task was just read from disk */
		task.setDirty(false);

		Debugger.addMessage("FileSystemTask.load: " + path.getPath() + " success");

		return task;
	}