private synchronized Hashtable<String,User> getUsers() {
		Hashtable<String,User> hashtable = new Hashtable<String,User>();

		Document usersXML;
		try { usersXML = XmlUtil.getDocument(usersFile); }
		catch (Exception ex) {
			logger.warn("Unable to parse the users file: "+usersFile);
			return hashtable;
		}

		Element root = usersXML.getDocumentElement();
		boolean isHashed = root.getAttribute("mode").equals("digest");
		Node userChild = root.getFirstChild();
		while (userChild != null) {
			if ((userChild instanceof Element) && userChild.getNodeName().equals("user")) {
				Element userElement = (Element)userChild;
				String username = userElement.getAttribute("username");
				String password = userElement.getAttribute("password");
				if (!isHashed) password = convertPassword(password);
				User user = new User(username, password);
				Node roleChild = userElement.getFirstChild();
				while (roleChild != null) {
					if ((roleChild instanceof Element) && roleChild.getNodeName().equals("role")) {
						user.addRole(roleChild.getTextContent());
					}
					roleChild = roleChild.getNextSibling();
				}
				hashtable.put(username,user);
			}
			userChild = userChild.getNextSibling();
		}
		if (!isHashed) resetUsers(hashtable);
		return hashtable;
	}