e247c83d76d821da312b6a9ff35ec67df4d7cd40
diff --git a/configure.in b/configure.in
index 1233c2f..47c8cc2 100644
--- a/configure.in
+++ b/configure.in
@@ -31,7 +31,7 @@ m4_define([gtk_api_version], [2.0])
 m4_define([gtk_binary_version], [2.10.0])
 
 # required versions of other packages
-m4_define([glib_required_version], [2.13.3])
+m4_define([glib_required_version], [2.13.5])
 m4_define([pango_required_version], [1.15.3])
 m4_define([atk_required_version], [1.9.0])
 m4_define([cairo_required_version], [1.2.0])
diff --git a/gtk/gtkrecentmanager.c b/gtk/gtkrecentmanager.c
index 8c02699..6f038fc 100644
--- a/gtk/gtkrecentmanager.c
+++ b/gtk/gtkrecentmanager.c
@@ -48,8 +48,8 @@
 /* the file where we store the recently used items */
 #define GTK_RECENTLY_USED_FILE	".recently-used.xbel"
 
-/* a poll every two seconds should be enough */
-#define POLL_DELTA	2000
+/* a poll approximately every five seconds */
+#define POLL_DELTA      5
 
 /* return all items by default */
 #define DEFAULT_LIMIT	-1
@@ -59,6 +59,13 @@
 
 typedef struct
 {
+  GSourceFunc func;
+  gpointer data;
+  GDestroyNotify notify;
+} ThreadsDispatch;
+
+typedef struct
+{
   gchar *name;
   gchar *exec;
   
@@ -189,6 +196,32 @@ gtk_recent_manager_error_quark (void)
   return g_quark_from_static_string ("gtk-recent-manager-error-quark");
 }
 
+static gboolean
+threads_dispatch (gpointer data)
+{
+  ThreadsDispatch *dispatch = data;
+  gboolean res = FALSE;
+
+  GDK_THREADS_ENTER ();
+
+  if (!g_source_is_destroyed (g_main_current_source ()))
+    res = dispatch->func (dispatch->data);
+
+  GDK_THREADS_LEAVE ();
+
+  return res;
+}
+
+static void
+threads_free (gpointer data)
+{
+  ThreadsDispatch *dispatch = data;
+
+  if (dispatch->notify)
+    dispatch->notify (dispatch->data);
+
+  g_slice_free (ThreadsDispatch, dispatch);
+}
 
 static void
 gtk_recent_manager_class_init (GtkRecentManagerClass *klass)
@@ -277,6 +310,7 @@ static void
 gtk_recent_manager_init (GtkRecentManager *manager)
 {
   GtkRecentManagerPrivate *priv;
+  ThreadsDispatch *dispatch;
   
   priv = g_type_instance_get_private ((GTypeInstance *) manager,
   				      GTK_TYPE_RECENT_MANAGER);
@@ -292,9 +326,16 @@ gtk_recent_manager_init (GtkRecentManager *manager)
   priv->filename = g_build_filename (g_get_home_dir (),
 				     GTK_RECENTLY_USED_FILE,
 				     NULL);
-  priv->poll_timeout = gdk_threads_add_timeout (POLL_DELTA,
-		  		      gtk_recent_manager_poll_timeout,
-				      manager);
+  
+  dispatch = g_slice_new (ThreadsDispatch);
+  dispatch->func = gtk_recent_manager_poll_timeout;
+  dispatch->data = manager;
+  dispatch->notify = NULL;
+  priv->poll_timeout = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT + 30,
+                                                   POLL_DELTA,
+                                                   threads_dispatch,
+                                                   dispatch,
+                                                   threads_free);
 
   build_recent_items_list (manager);
 }
@@ -487,6 +528,7 @@ gtk_recent_manager_set_filename (GtkRecentManager *manager,
 				 const gchar      *filename)
 {
   GtkRecentManagerPrivate *priv;
+  ThreadsDispatch *dispatch;
   
   g_assert (GTK_IS_RECENT_MANAGER (manager));
   priv = manager->priv;
@@ -503,9 +545,16 @@ gtk_recent_manager_set_filename (GtkRecentManager *manager,
     }
 
   priv->filename = g_strdup (filename);
-  priv->poll_timeout = gdk_threads_add_timeout (POLL_DELTA,
-		  		      gtk_recent_manager_poll_timeout,
-				      manager);
+
+  dispatch = g_slice_new (ThreadsDispatch);
+  dispatch->func = gtk_recent_manager_poll_timeout;
+  dispatch->data = manager;
+  dispatch->notify = NULL;
+  priv->poll_timeout = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT + 30,
+                                                   POLL_DELTA,
+                                                   threads_dispatch,
+                                                   dispatch,
+                                                   threads_free);
 
   /* mark us clean, so that we can re-read the list
    * of recently used resources
