protected void flushSpi() throws BackingStoreException
    {
	final File file = FilePreferencesFactory.getPreferencesFile();

	synchronized (file) {
	    Properties p = new Properties();
	    try {

		StringBuilder sb = new StringBuilder();
		getPath(sb);
		String path = sb.toString();

		if (file.exists()) {
		    p.load(new FileInputStream(file));

		    List<String> toRemove = new ArrayList<String>();

		    // Make a list of all direct children of this node to be removed
		    final Enumeration<?> pnen = p.propertyNames();
		    while (pnen.hasMoreElements()) {
			String propKey = (String) pnen.nextElement();
			if (propKey.startsWith(path)) {
			    String subKey = propKey.substring(path.length());
			    // Only do immediate descendants
			    if (subKey.indexOf('.') == -1) {
				toRemove.add(propKey);
			    }
			}
		    }

		    // Remove them now that the enumeration is done with
		    for (String propKey : toRemove) {
			p.remove(propKey);
		    }
		}

		// If this node hasn't been removed, add back in any values
		if (!isRemoved) {
		    for (String s : root.keySet()) {
			p.setProperty(path + s, root.get(s));
		    }
		}

		p.store(new FileOutputStream(file), "FilePreferences");
	    }
	    catch (IOException e) {
		throw new BackingStoreException(e);
	    }
	}
    }