if (child.newNode && nodeListeners != null) fire(new NodeChangeEvent(this, child), true);
	private Preferences getNode(String path) {		// if mark is dom then goto end		// Empty String "" indicates this node		if (path.length() == 0)			return this;		// Calculate child name and rest of path		String childName;		String childPath;		int nextSlash = path.indexOf('/');		if (nextSlash == -1) {			childName = path;			childPath = "";		} else {			childName = path.substring(0, nextSlash);            childPath = path.substring(nextSlash+1);		}		// Get the child node		AbstractPreferences child;        child = (AbstractPreferences)childCache.get(childName);		if (child == null) {			if (childName.length() > MAX_NAME_LENGTH)				throw new IllegalArgumentException(childName);			// Not in childCache yet so create a new sub node			child = childSpi(childName);			// XXX - check if node is new			childCache.put(childName, child);		}		// Lock the child and go down        synchronized(child.lock) {			return child.getNode(childPath);		}	}