@Override
    protected void flushSpi() throws BackingStoreException
    {
        final File file = FilePreferencesGenerator.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);
            }
        }
    }