      */
     public function Config (path :String)
     {
-        _so = SharedObject.getLocal("config_" + path, "/");
+        setPath(path);
+    }
+
+    public function setPath (path :String) :void
+    {
+        _so = (path == null) ? null : SharedObject.getLocal("config_" + path, "/");
+        _data = (_so == null) ? {} : _so.data;
+
+        // dispatch events for all settings
+        for (var n :String in _data) {
+            dispatchEvent(new ConfigValueSetEvent(n, _data[n]));
+        }
     }
 
     /**

     */
    public function getValue (name :String, defValue :Object) :Object
    {
        var val :* = _so.data[name];
        return (val === undefined) ? defValue : val;
    }



    /**
     * Remove any set value for the specified preference.
     * This does not dispatch an event because this would only be done to remove an
     * obsolete preference.
     */
    public function remove (name :String) :void
    {
        delete _data[name];
        if (_so != null) {
            _so.flush(); // flushing is not strictly necessary
        }
    }

    /**
