diff --git a/gdk/x11/gdksettings.c b/gdk/x11/gdksettings.c
index 6ef672e..bc210fd 100644
--- a/gdk/x11/gdksettings.c
+++ b/gdk/x11/gdksettings.c
@@ -69,7 +69,8 @@ static const char gdk_settings_names[] =
   "Gtk/EnableAccels\0"        "gtk-enable-accels\0"
   "Gtk/EnableMnemonics\0"     "gtk-enable-mnemonics\0"
   "Gtk/ScrolledWindowPlacement\0" "gtk-scrolled-window-placement\0"
-  "Gtk/IMModule\0"            "gtk-im-module\0";
+  "Gtk/IMModule\0"            "gtk-im-module\0"
+  "Gtk/RecentFilesMaxAge\0"   "gtk-recent-files-max-age\0";
 
 
 static const struct
@@ -116,5 +117,6 @@ static const struct
   { 1326, 1343 },
   { 1361, 1381 },
   { 1402, 1430 },
-  { 1460, 1473 }
+  { 1460, 1473 },
+  { 1487, 1509 }
 };
diff --git a/gtk/gtkrecentmanager.c b/gtk/gtkrecentmanager.c
index e843b63..7cf6956 100644
--- a/gtk/gtkrecentmanager.c
+++ b/gtk/gtkrecentmanager.c
@@ -137,6 +137,9 @@ static void     gtk_recent_manager_changed             (GtkRecentManager  *manag
 static void     gtk_recent_manager_real_changed        (GtkRecentManager  *manager);
 static void     gtk_recent_manager_set_filename        (GtkRecentManager  *manager,
                                                         const gchar       *filename);
+static void     gtk_recent_manager_clamp_to_age        (GtkRecentManager  *manager,
+                                                        gint               age);
+
 
 static void build_recent_items_list (GtkRecentManager  *manager);
 static void purge_recent_items_list (GtkRecentManager  *manager,
@@ -388,14 +391,23 @@ gtk_recent_manager_real_changed (GtkRecentManager *manager)
        */
       g_assert (priv->filename != NULL);
 
-      /* if no container object has been defined, we create a new
-       * empty container, and dump it
-       */
       if (!priv->recent_items)
         {
+          /* if no container object has been defined, we create a new
+           * empty container, and dump it
+           */
           priv->recent_items = g_bookmark_file_new ();
 	  priv->size = 0;
 	}
+      else
+        {
+          GtkSettings *settings = gtk_settings_get_default ();
+          gint age = 30;
+
+          g_object_get (G_OBJECT (settings), "gtk-recent-files-max-age", &age, NULL);
+          if (age > 0)
+            gtk_recent_manager_clamp_to_age (manager, age);
+        }
 
       write_error = NULL;
       g_bookmark_file_to_file (priv->recent_items, priv->filename, &write_error);
@@ -1374,6 +1386,34 @@ gtk_recent_manager_changed (GtkRecentManager *recent_manager)
   g_signal_emit (recent_manager, signal_changed, 0);
 }
 
+static void
+gtk_recent_manager_clamp_to_age (GtkRecentManager *manager,
+                                 gint              age)
+{
+  GtkRecentManagerPrivate *priv = manager->priv;
+  gchar **uris;
+  gsize n_uris, i;
+  time_t now;
+
+  if (G_UNLIKELY (!priv->recent_items))
+    return;
+
+  now = time (NULL);
+
+  uris = g_bookmark_file_get_uris (priv->recent_items, &n_uris);
+  for (i = 0; i < n_uris; i++)
+    {
+      const gchar *uri = uris[i];
+      time_t modified;
+      gint item_age;
+
+      modified = g_bookmark_file_get_modified (priv->recent_items, uri, NULL);
+      item_age = (gint) ((now - modified) / (60 * 60 * 24));
+      if (item_age > age)
+        g_bookmark_file_remove_item (priv->recent_items, uri, NULL);
+    }
+}
+
 /*****************
  * GtkRecentInfo *
  *****************/
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 3081e87..887a402 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -107,7 +107,8 @@ enum {
   PROP_ENABLE_MNEMONICS,
   PROP_ENABLE_ACCELS,
   PROP_RECENT_FILES_LIMIT,
-  PROP_IM_MODULE
+  PROP_IM_MODULE,
+  PROP_RECENT_FILES_MAX_AGE
 };
 
 
@@ -820,6 +821,25 @@ gtk_settings_class_init (GtkSettingsClass *class)
 								  GTK_PARAM_READWRITE),
 					     NULL);
   g_assert (result == PROP_IM_MODULE);
+
+  /**
+   * GtkSettings:gtk-recent-files-max-age:
+   *
+   * The maximum age (in days) of the items inside the recently used
+   * resources list. Items older than this setting will be excised
+   * from the list.
+   *
+   * Since: 2.14
+   */
+  result = settings_install_property_parser (class,
+					     g_param_spec_int ("gtk-recent-files-max-age",
+ 							       P_("Recent Files Max Age"),
+ 							       P_("Maximum age of recently used files"),
+ 							       -1, G_MAXINT,
+							       30,
+ 							       GTK_PARAM_READWRITE),
+					     NULL);
+  g_assert (result == PROP_RECENT_FILES_MAX_AGE);
 }
 
 static void
