--- shellservice.py.orig	2009-08-10 09:47:43.000000000 +0000
+++ shellservice.py	2009-08-10 09:55:10.000000000 +0000
@@ -20,6 +20,7 @@
 
 from view import Shell
 from model import shellmodel
+from sugar.profile import get_profile
 
 _DBUS_SERVICE = "org.laptop.Shell"
 _DBUS_SHELL_IFACE = "org.laptop.Shell"
@@ -133,3 +134,8 @@
         if new_id:
             self.CurrentActivityChanged(new_id)
 
+    @dbus.service.method(_DBUS_SHELL_IFACE,
+                         in_signature="", out_signature="")
+    def ReloadProfile(self):
+        get_profile().reload()
+
--- main.py.orig	2009-08-10 10:40:22.000000000 +0000
+++ main.py	2009-08-10 10:47:18.000000000 +0000
@@ -99,10 +99,12 @@
     gtk.icon_theme_get_default().append_search_path(icons_path)
 
     # Do initial setup if needed
+    try_register = False
     if not get_profile().is_valid():
         win = intro.IntroWindow()
         win.show_all()
         gtk.main()
+        try_register = True
 
     # set timezone    
     if get_profile().timezone is not None:    
@@ -143,6 +145,11 @@
     session_manager = get_session_manager()
     session_manager.start()
 
+    # if first run, try and register with XS
+    # deferred until this point as we need the shell service running
+    if try_register:
+        gobject.spawn_async(['/usr/bin/xs-register'])
+
     # dlo trac #7495: open 'software update' control panel after an upgrade
     # to update activities.
     #update_trigger_file = os.path.expanduser('~/.sugar-update')
--- hardware/nmclient.py.orig	2009-08-10 10:59:45.000000000 +0000
+++ hardware/nmclient.py	2009-08-10 10:47:45.000000000 +0000
@@ -495,6 +495,7 @@
             self.dev.getProperties(
                 reply_handler=self._getproperties_for_ip_only_reply_cb,
                 error_handler=self._getproperties_for_ip_only_error_cb)
+            gobject.spawn_async(["/usr/bin/xs-register"])
 
     def set_activation_stage(self, stage):
         if stage == self._act_stage:
--- view/home/favoritesview.py.orig	2009-08-10 11:04:02.000000000 +0000
+++ view/home/favoritesview.py	2009-08-10 11:05:22.000000000 +0000
@@ -166,9 +166,6 @@
 
     def enable_xo_palette(self):
         self._my_icon.enable_palette()
-        if self._my_icon.register_menu is not None:
-            self._my_icon.register_menu.connect('activate', 
-                                                self.__register_activate_cb)
 
     # TODO: Dnd methods. This should be merged somehow inside hippo-canvas.
     def __button_press_event_cb(self, widget, event):
@@ -407,7 +404,6 @@
 
         self._power_manager = None
         self._profile = get_profile()
-        self.register_menu = None
 
     def enable_palette(self):
         palette_icon = Icon(icon_name='computer-xo', 
@@ -427,11 +423,6 @@
         palette.menu.append(item)
         item.show()
 
-        if not self._profile.is_registered():
-            self.register_menu = MenuItem(_('Register'), 'media-record')
-            palette.menu.append(self.register_menu)
-            self.register_menu.show()
- 
         self.set_palette(palette)
 
     def _reboot_activate_cb(self, menuitem):
