Index: gnome-panel-3.3.5/applets/clock/clock.c
===================================================================
--- gnome-panel-3.3.5.orig/applets/clock/clock.c	2012-02-02 11:51:27.000000000 -0500
+++ gnome-panel-3.3.5/applets/clock/clock.c	2012-02-07 22:57:41.193548904 -0500
@@ -68,6 +68,7 @@
 #include "clock-location-tile.h"
 #include "clock-map.h"
 #include "clock-utils.h"
+#include "set-timezone.h"
 #include "system-timezone.h"
 
 #define INTERNETSECOND (864)
Index: gnome-panel-3.3.5/applets/clock/set-timezone.c
===================================================================
--- gnome-panel-3.3.5.orig/applets/clock/set-timezone.c	2012-02-02 11:51:54.000000000 -0500
+++ gnome-panel-3.3.5/applets/clock/set-timezone.c	2012-02-07 22:58:04.109662547 -0500
@@ -23,17 +23,23 @@
 #endif
 
 #include <gio/gio.h>
-#include <polkit/polkit.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/wait.h>
 
 #include "set-timezone.h"
 
 #define CACHE_VALIDITY_SEC 20
 
-#define MECHANISM_BUS_NAME    "org.freedesktop.timedate1"
-#define MECHANISM_OBJECT_PATH "/org/freedesktop/timedate1"
-#define MECHANISM_INTERFACE   "org.freedesktop.timedate1"
+#define MECHANISM_BUS_NAME "org.gnome.SettingsDaemon.DateTimeMechanism"
+#define MECHANISM_OBJECT_PATH "/"
+#define MECHANISM_INTERFACE "org.gnome.SettingsDaemon.DateTimeMechanism"
 
 typedef struct {
+  gboolean in_progress;
   gint     value;
   guint64  stamp;
 } Cache;
@@ -59,6 +65,27 @@
   return system;
 }
 
+static void
+can_set_call_finished (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ Cache *cache = user_data;
+ GVariant *reply;
+
+ reply = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source),
+ result, NULL);
+
+ if (reply != NULL)
+ {
+ g_variant_get (reply, "(i)", &cache->value);
+ g_variant_unref (reply);
+ }
+
+ cache->stamp = g_get_monotonic_time ();
+ cache->in_progress = FALSE;
+}
+
 static int
 can_set (Cache *cache, const gchar *method_name)
 {
@@ -66,39 +93,23 @@
 
   if (now - cache->stamp > (CACHE_VALIDITY_SEC * 1000000))
     {
-      PolkitAuthority *authority;
-      PolkitSubject   *subject;
-      PolkitAuthorizationResult *res;
-
-      authority = polkit_authority_get_sync (NULL, NULL);
-      subject = polkit_unix_session_new_for_process_sync (getpid (), NULL, NULL);
-
-      res = polkit_authority_check_authorization_sync (authority,
-                                                       subject,
-                                                       "org.freedesktop.timedate1.set-timezone",
-                                                       NULL,
-                                                       POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE,
-                                                       NULL,
-                                                       NULL);
-
-	cache->stamp = g_get_monotonic_time ();
-
-        if (res == NULL)
-          cache->value = 0;
-        else
-          {
-            if (polkit_authorization_result_get_is_authorized (res))
-              cache->value = 2;
-            else if (polkit_authorization_result_get_is_challenge (res))
-              cache->value = 1;
-            else
-              cache->value = 0;
-
-            g_object_unref (res);
-          }
-
-        g_object_unref (authority);
-        g_object_unref (subject);
+      if (!cache->in_progress)
+        {
+          GDBusConnection *system_bus = get_system_bus (NULL);
+
+          if (system_bus != NULL)
+            g_dbus_connection_call (system_bus, MECHANISM_BUS_NAME,
+                                   MECHANISM_OBJECT_PATH, MECHANISM_INTERFACE,
+                                   method_name, NULL, G_VARIANT_TYPE ("(i)"),
+                                   G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                                   can_set_call_finished, cache);
+
+          /* Even if the system bus was NULL, we want to set this in
+           * order to effectively wedge ourselves from ever trying
+           * again.
+           */
+          cache->in_progress = TRUE;
+        }
     }
 
   return cache->value;
@@ -159,7 +170,7 @@
 
   g_dbus_connection_call (system_bus, MECHANISM_BUS_NAME,
                           MECHANISM_OBJECT_PATH, MECHANISM_INTERFACE,
-                          "SetTimezone", g_variant_new ("(sb)", tz, TRUE),
+                          "SetTimezone", g_variant_new ("(s)", tz, TRUE),
                           NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL,
                           callback, user_data);
 }
Index: gnome-panel-3.3.5/configure.ac
===================================================================
--- gnome-panel-3.3.5.orig/configure.ac	2012-02-06 06:18:37.000000000 -0500
+++ gnome-panel-3.3.5/configure.ac	2012-02-07 22:57:41.201548946 -0500
@@ -144,7 +144,7 @@
 AC_SUBST(TZ_CFLAGS)
 AC_SUBST(TZ_LIBS)
 
-PKG_CHECK_MODULES(CLOCK, pango >= $PANGO_REQUIRED gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED gio-2.0 >= $GLIB_REQUIRED $LIBECAL_REQUIREMENT librsvg-2.0 gweather-3.0 >= $GWEATHER_REQUIRED gnome-desktop-3.0 >= $LIBGNOME_DESKTOP_REQUIRED polkit-gobject-1)
+PKG_CHECK_MODULES(CLOCK, pango >= $PANGO_REQUIRED gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED gio-2.0 >= $GLIB_REQUIRED $LIBECAL_REQUIREMENT librsvg-2.0 gweather-3.0 >= $GWEATHER_REQUIRED gnome-desktop-3.0 >= $LIBGNOME_DESKTOP_REQUIRED)
 AC_SUBST(CLOCK_CFLAGS)
 AC_SUBST(CLOCK_LIBS)
 
