diff -Naur gnome-screensaver.ori/data/Makefile.am gnome-screensaver/data/Makefile.am
--- gnome-screensaver.ori/data/Makefile.am	2010-02-04 12:15:41.000000000 -0800
+++ gnome-screensaver/data/Makefile.am	2010-02-04 12:28:51.000000000 -0800
@@ -21,6 +21,15 @@
 desktop_in_files = gnome-screensaver-preferences.desktop.in
 desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
 
+# Dbus service file
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.gnome.ScreenSaver.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+# Rule to make the service file with bindir expanded
+$(service_DATA): $(service_in_files) Makefile
+	@sed -e "s|\@bindir\@|$(bindir)|" $< > $@
+
 @INTLTOOL_DIRECTORY_RULE@
 
 directorydir = $(datadir)/desktop-directories
@@ -46,6 +55,7 @@
 EXTRA_DIST = 				\
 	$(schemas_in_files)		\
 	$(desktop_in_files)		\
+	$(service_in_files)		\
 	$(directory_in_files)		\
 	$(glade_DATA)			\
 	$(man_MANS)			\
@@ -58,6 +68,7 @@
 DISTCLEANFILES = 			\
 	$(schemas_DATA)			\
 	$(desktop_DATA)			\
+	$(service_DATA)			\
 	$(directory_DATA)		\
 	$(NULL)
 
diff -Naur gnome-screensaver.ori/data/org.gnome.ScreenSaver.service.in gnome-screensaver/data/org.gnome.ScreenSaver.service.in
--- gnome-screensaver.ori/data/org.gnome.ScreenSaver.service.in	1969-12-31 16:00:00.000000000 -0800
+++ gnome-screensaver/data/org.gnome.ScreenSaver.service.in	2010-02-04 12:23:36.000000000 -0800
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.gnome.ScreenSaver
+Exec=@bindir@/gnome-screensaver
diff -Naur gnome-screensaver.ori/src/gnome-screensaver-command.c gnome-screensaver/src/gnome-screensaver-command.c
--- gnome-screensaver.ori/src/gnome-screensaver-command.c	2010-02-04 12:15:39.000000000 -0800
+++ gnome-screensaver/src/gnome-screensaver-command.c	2010-02-04 12:29:52.000000000 -0800
@@ -88,19 +88,19 @@
 static GMainLoop *loop = NULL;
 
 static gboolean
-screensaver_is_running (DBusConnection *connection)
+screensaver_start_service (DBusConnection *connection)
 {
         DBusError               error;
-        gboolean                exists;
+        gboolean                success;
 
         g_return_val_if_fail (connection != NULL, FALSE);
 
         dbus_error_init (&error);
-        exists = dbus_bus_name_has_owner (connection, GS_SERVICE, &error);
+        success = dbus_bus_start_service_by_name (connection, GS_SERVICE, 0, NULL, &error);
         if (dbus_error_is_set (&error))
                 dbus_error_free (&error);
 
-        return exists;
+        return success;
 }
 
 static DBusMessage *
@@ -464,7 +464,7 @@
 
         dbus_connection_setup_with_g_main (connection, NULL);
 
-        if (! screensaver_is_running (connection)) {
+        if (! screensaver_start_service (connection)) {
                 g_message ("Screensaver is not running!");
                 exit (1);
         }
