diff -upr gvfs-0.2.3-pre/client/gvfsfusedaemon.c gvfs-0.2.3-post/client/gvfsfusedaemon.c
--- gvfs-0.2.3-pre/client/gvfsfusedaemon.c	2008-05-22 16:42:17.000000000 -0500
+++ gvfs-0.2.3-post/client/gvfsfusedaemon.c	2008-05-22 17:17:49.000000000 -0500
@@ -2017,6 +2017,9 @@ subthread_main (gpointer data)
   g_object_unref (volume_monitor);
   volume_monitor = NULL;
 
+  /* Tell the main thread to unmount. Using kill() is necessary according to FUSE maintainers. */
+  kill (getpid (), SIGHUP);
+
   return NULL;
 }
 
@@ -2044,14 +2047,21 @@ dbus_filter_func (DBusConnection *connec
           *new_owner == 0)
         {
           /* The daemon died, unmount */
-          kill (getpid(), SIGHUP);
+          g_main_loop_quit (subthread_main_loop);
         }
     }
+  else if (dbus_message_is_signal (message,
+                                   DBUS_INTERFACE_LOCAL,
+                                   "Disconnected"))
+    {
+      /* Session bus died, unmount */
+      g_main_loop_quit (subthread_main_loop);
+    }
 	
 	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 }
 
 
 static gpointer
 vfs_init (struct fuse_conn_info *conn)
 {
@@ -2078,6 +2087,8 @@ vfs_init (struct fuse_conn_info *conn)
       return NULL;
     }
 
+  dbus_connection_set_exit_on_disconnect (dbus_conn, FALSE);
+
   _g_dbus_connection_integrate_with_main (dbus_conn);
 
 	dbus_bus_add_match (dbus_conn,
