diff --git a/lib/sources/paneldelegate.py b/lib/sources/paneldelegate.py
index d37c180..87b1af5 100755
--- a/lib/sources/paneldelegate.py
+++ b/lib/sources/paneldelegate.py
@@ -39,6 +39,16 @@ def dprint (fmt, *args):
 
 PANEL_LAUNCHER_DIR = ".gnome2/panel2.d/default/launchers"
 
+
+def copy_dir (src_client, dst_client, dst_address, dir):
+    for entry in src_client.all_entries (dir):
+        if entry.get_schema_name():
+            gconfsource.associate_schema (dst_address, entry.key, entry.get_schema_name ())
+        if entry.value and not entry.get_is_default ():
+            dst_client.set (entry.key, entry.value)
+    for subdir in src_client.all_dirs (dir):
+        copy_dir (src_client, dst_client, dst_address, subdir)
+
 class PanelChange (userprofile.ProfileChange):
     def __init__ (self, source, delegate, id):
         userprofile.ProfileChange.__init__ (self, source, delegate)
@@ -162,10 +172,20 @@ class PanelDelegate (userprofile.SourceDelegate):
             self.added   = added
             self.removed = removed
             self.client = gconf.client_get_default ()
+
+        def _copy_tree(self, dir):
+            if not self.client.dir_exists(dir):
+                (src_client, src_address) = gconfsource.get_client_and_address_for_path(
+                    os.path.join(util.get_home_dir(), '.gconf'))
+                (dst_client, dst_address) = gconfsource.get_client_and_address_for_path(
+                    os.path.join(util.get_home_dir(), '.gconf.xml.defaults'))
+                copy_dir (src_client, dst_client, dst_address, dir)
     
     class PanelToplevel (PanelThing):
         def __init__ (self, id, added = False, removed = False):
             PanelDelegate.PanelThing.__init__ (self, id, added, removed)
+
+            self._copy_tree(PANEL_KEY_BASE + "/toplevels/" + id)
             
             self.orientation = self.client.get_string (PANEL_KEY_BASE + "/toplevels/" + id + "/orientation")
             
@@ -177,6 +197,8 @@ class PanelDelegate (userprofile.SourceDelegate):
         def __init__ (self, id, added = False, removed = False):
             PanelDelegate.PanelThing.__init__ (self, id, added, removed)
 
+            self._copy_tree(PANEL_KEY_BASE + "/applets/" + id)
+ 
             self.toplevel_id = self.client.get_string (PANEL_KEY_BASE + "/applets/" + id + "/toplevel_id")
             self.bonobo_iid  = self.client.get_string (PANEL_KEY_BASE + "/applets/" + id + "/bonobo_iid")
 
@@ -191,6 +213,8 @@ class PanelDelegate (userprofile.SourceDelegate):
     class PanelObject (PanelThing):
         def __init__ (self, id, added = False, removed = False):
             PanelDelegate.PanelThing.__init__ (self, id, added, removed)
+
+            self._copy_tree(PANEL_KEY_BASE + "/objects/" + id)
   
             self.toplevel_id = self.client.get_string (PANEL_KEY_BASE + "/objects/" + id + "/toplevel_id")
             self.object_type = self.client.get_string (PANEL_KEY_BASE + "/objects/" + id + "/object_type")
@@ -220,6 +244,8 @@ class PanelDelegate (userprofile.SourceDelegate):
                     self.name = _("Run Application button")
                 elif action_type == "search":
                     self.name = _("Search button")
+                elif action_type == "connect-server":
+                    self.name = _("Connect to Server button")
                 else:
                     self.name = _("Screenshot button")
             else:
@@ -339,14 +365,6 @@ class PanelDelegate (userprofile.SourceDelegate):
 
         return False
 
-    def __copy_dir (self, src_client, dst_client, dst_address, dir):
-        for entry in src_client.all_entries (dir):
-            if entry.get_schema_name ():
-                gconfsource.associate_schema (dst_address, entry.key, entry.get_schema_name ())
-            if entry.value and not entry.get_is_default ():
-                dst_client.set (entry.key, entry.value)
-        for subdir in src_client.all_dirs (dir):
-            self.__copy_dir (src_client, dst_client, dst_address, subdir)
 
     def __get_current_list (self, dict):
         id_list = []
@@ -368,8 +386,8 @@ class PanelDelegate (userprofile.SourceDelegate):
 
         (client, address) = self.source.get_committing_client_and_address (mandatory)
 
-        self.__copy_dir (self.client, client, address, PANEL_KEY_BASE + "/" + dir_name + "/" + thing.id)
-        
+        copy_dir (self.client, client, address, PANEL_KEY_BASE + "/" + dir_name + "/" + thing.id)
+
         id_list = self.__get_current_list (dict)
         id_list.append (thing.id)
         client.set_list (PANEL_KEY_BASE + "/general/" + id_list_name, gconf.VALUE_STRING, id_list)
