diff --git a/gio/gio.symbols b/gio/gio.symbols
index c713d13..13d1e8a 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -1593,6 +1593,11 @@
 g_settings_list_keys
 g_settings_list_children
 g_settings_get_mapped
+g_settings_add_child
+g_settings_can_add_child
+g_settings_can_remove_child
+g_settings_remove_child
+g_settings_get_destroyed
 g_settings_get_range
 g_settings_range_check
 #endif
diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
index f61bb8b..ad904e4 100644
--- a/gio/gkeyfilesettingsbackend.c
+++ b/gio/gkeyfilesettingsbackend.c
@@ -19,6 +19,7 @@
  *
  * Authors: Vincent Untz <vuntz@gnome.org>
  *          Ryan Lortie <desrt@desrt.ca>
+ *          Rodrigo Moya <rodrigo@gnome.org>
  */
 
 #include "config.h"
@@ -369,6 +370,14 @@
   return g_object_ref (kfsb->permission);
 }
 
+static gchar **
+g_keyfile_settings_backend_list (GSettingsBackend    *backend,
+				 const gchar         *path,
+				 const gchar * const *schema_items)
+{
+  GKeyfileSettingsBackend *kfsb = G_KEYFILE_SETTINGS_BACKEND (backend);
+}
+
 static void
 keyfile_to_tree (GKeyfileSettingsBackend *kfsb,
                  GTree                   *tree,
@@ -536,6 +545,7 @@
   class->reset = g_keyfile_settings_backend_reset;
   class->get_writable = g_keyfile_settings_backend_get_writable;
   class->get_permission = g_keyfile_settings_backend_get_permission;
+  class->list = g_keyfile_settings_backend_list;
   /* No need to implement subscribed/unsubscribe: the only point would be to
    * stop monitoring the file when there's no GSettings anymore, which is no
    * big win. */
diff --git a/gio/gmemorysettingsbackend.c b/gio/gmemorysettingsbackend.c
index 6b60058..8176b60 100644
--- a/gio/gmemorysettingsbackend.c
+++ b/gio/gmemorysettingsbackend.c
@@ -16,7 +16,8 @@
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  *
- * Author: Ryan Lortie <desrt@desrt.ca>
+ * Authors: Ryan Lortie <desrt@desrt.ca>
+ *          Rodrigo Moya <rodrigo@gnome.org>
  */
 
 #include "config.h"
@@ -45,6 +46,90 @@
                          g_io_extension_point_implement (G_SETTINGS_BACKEND_EXTENSION_POINT_NAME,
                                                          g_define_type_id, "memory", 10))
 
+static GHashTable *
+g_memory_settings_backend_get_table (GHashTable   *table,
+                                     const gchar **key_ptr)
+{
+  const gchar *key = *key_ptr;
+  gchar *prefix;
+  gchar *name;
+  gint i, j;
+
+  for (i = 2; key[i - 2] != ':' || key[i - 1] != '/'; i++)
+    if (key[i - 2] == '\0')
+      /* no :/ in the string -- pass through */
+      return table;
+
+  for (j = i + 1; key[j - 1] != '/'; j++)
+    if (key[j - 1] == '\0')
+      /* string of form /some/path:/child -- definitely invalid */
+      return NULL;
+
+  /* We now have this situation:
+   *
+   *   /some/path:/child/item
+   *   ^0          ^i    ^j
+   *
+   * So we can split the string into 3 parts:
+   *
+   *   prefix   = /some/path:/
+   *   child    = child/
+   *   *key_ptr = item
+   */
+  prefix = g_strndup (key, i);
+  name = g_strndup (key + i, j - i);
+
+  /* name is either like 'foo' or ':foo'
+   *
+   * If it doesn't start with a colon, it's in the schema.
+   */
+  if (name[0] == ':')
+    {
+      table = g_hash_table_lookup (table, prefix);
+      if (table)
+        table = g_hash_table_lookup (table, name);
+    }
+  else
+    {
+      gpointer value;
+
+      if (!g_hash_table_lookup_extended (table, prefix, NULL, &value))
+        g_hash_table_insert (table, prefix,
+                             value = g_hash_table_new_full (g_str_hash, g_str_equal,
+                                                            g_free, (GDestroyNotify) g_hash_table_unref));
+
+      table = value;
+
+      if (!g_hash_table_lookup_extended (table, prefix, NULL, &value))
+        g_hash_table_insert (table, prefix,
+                             value = g_hash_table_new_full (g_str_hash, g_str_equal,
+                                                            g_free, (GDestroyNotify) g_hash_table_unref));
+    }
+
+    if (key[i] == ':' && key[i + 1] == '/')
+      {
+        gchar *prefix;
+        gchar *name;
+        gint j;
+
+        i += 2;
+
+        for (j = i; key[j] != '/'; j++)
+          /* found a path of the form /a:/b
+           * which is never a valid spot for a key.
+           */
+          if (key[j] == '\0')
+            return NULL;
+
+        name = g_strndup ((const gchar *) key + i, j - i);
+        prefix = g_strndup (key, i);
+        table = g_hash_table_lookup (table, prefix);
+        g_free (prefix);
+      }
+
+  return table;
+}
+
 static GVariant *
 g_memory_settings_backend_read (GSettingsBackend   *backend,
                                 const gchar        *key,
@@ -53,11 +138,16 @@
 {
   GMemorySettingsBackend *memory = G_MEMORY_SETTINGS_BACKEND (backend);
   GVariant *value;
+  GHashTable *table;
 
   if (default_value)
     return NULL;
 
-  value = g_hash_table_lookup (memory->table, key);
+  table = g_memory_settings_backend_get_table (memory->table, &key);
+  if (!table)
+    return NULL;
+
+  value = g_hash_table_lookup (table, key);
 
   if (value != NULL)
     g_variant_ref (value);
@@ -73,8 +163,13 @@
 {
   GMemorySettingsBackend *memory = G_MEMORY_SETTINGS_BACKEND (backend);
   GVariant *old_value;
+  GHashTable *table;
 
-  old_value = g_hash_table_lookup (memory->table, key);
+  table = g_memory_settings_backend_get_table (memory->table, &key);
+  if (!table)
+    return FALSE;
+
+  old_value = g_hash_table_lookup (table, key);
   g_variant_ref_sink (value);
 
   if (old_value == NULL || !g_variant_equal (value, old_value))
@@ -94,11 +189,16 @@
                                      gpointer data)
 {
   GMemorySettingsBackend *memory = data;
+  GHashTable *table;
+
+  table = g_memory_settings_backend_get_table (memory->table, &key);
+  if (!table)
+    return FALSE;
 
   if (value != NULL)
-    g_hash_table_insert (memory->table, g_strdup (key), g_variant_ref (value));
+    g_hash_table_insert (table, g_strdup (key), g_variant_ref (value));
   else
-    g_hash_table_remove (memory->table, key);
+    g_hash_table_remove (table, key);
 
   return FALSE;
 }
@@ -120,10 +220,15 @@
                                  gpointer          origin_tag)
 {
   GMemorySettingsBackend *memory = G_MEMORY_SETTINGS_BACKEND (backend);
+  GHashTable *table;
 
-  if (g_hash_table_lookup (memory->table, key))
+  table = g_memory_settings_backend_get_table (memory->table, &key);
+  if (!table)
+    return;
+
+  if (g_hash_table_lookup (table, key))
     {
-      g_hash_table_remove (memory->table, key);
+      g_hash_table_remove (table, key);
       g_settings_backend_changed (backend, key, origin_tag);
     }
 }
@@ -142,6 +247,92 @@
   return g_simple_permission_new (TRUE);
 }
 
+static gchar **
+g_memory_settings_backend_list (GSettingsBackend    *backend,
+				const gchar         *path,
+				const gchar * const *schema_items)
+{
+  gchar **result = NULL;
+  GHashTable *table;
+  GMemorySettingsBackend *memory = G_MEMORY_SETTINGS_BACKEND (backend);
+
+  table = g_memory_settings_backend_get_table (memory->table, &path);
+  if (table != NULL)
+    {
+      GHashTableIter iter;
+      gchar *key_name;
+      guint i;
+      GSList *list = NULL;
+
+      while (g_hash_table_iter_next (&iter, (gpointer *) &key_name, NULL))
+        {
+	  gboolean in_schema_items = FALSE;
+
+	  for (i = 0; i < g_strv_length ((gchar **) schema_items); i++)
+	    {
+	      if (g_str_equal (key_name, schema_items[i]))
+	        {
+		  /* It's in both lists, so return it */
+		  list = g_slist_append (list, key_name);
+		  in_schema_items = TRUE;
+		}
+	    }
+	  if (!in_schema_items)
+	    {
+	      /* Has been added by the user */
+	      list = g_slist_append (list, key_name);
+	    }
+	}
+
+      result = g_new0 (gchar *, g_slist_length (list) + 1);
+      i = 0;
+      while (list != NULL)
+        {
+	  result[i] = g_strdup ((const gchar *) list->data);
+	  i++;
+
+	  list = g_slist_remove (list, list->data);
+	}
+
+      result[i] = NULL;
+    }
+
+  return result;
+}
+
+static gboolean
+g_memory_settings_backend_can_insert (GSettingsBackend *backend,
+				      const gchar      *path)
+{
+  return FALSE;
+}
+
+static gboolean
+g_memory_settings_backend_can_remove (GSettingsBackend *backend,
+				      const gchar      *path,
+				      const gchar      *id)
+{
+  return FALSE;
+}
+
+static gboolean
+g_memory_settings_backend_insert (GSettingsBackend *backend,
+				  const gchar      *path,
+				  gint              index_,
+				  const gchar      *prefix,
+				  gchar           **name)
+{
+  return FALSE;
+}
+
+static gboolean
+g_memory_settings_backend_remove (GSettingsBackend *backend,
+				  const gchar      *path,
+				  const gchar      *id)
+{
+  return FALSE;
+}
+
 static void
 g_memory_settings_backend_finalize (GObject *object)
 {
@@ -172,5 +363,10 @@
   backend_class->reset = g_memory_settings_backend_reset;
   backend_class->get_writable = g_memory_settings_backend_get_writable;
   backend_class->get_permission = g_memory_settings_backend_get_permission;
+  backend_class->list = g_memory_settings_backend_list;
+  backend_class->can_insert = g_memory_settings_backend_can_insert;
+  backend_class->can_remove = g_memory_settings_backend_can_remove;
+  backend_class->insert = g_memory_settings_backend_insert;
+  backend_class->remove = g_memory_settings_backend_remove;
   object_class->finalize = g_memory_settings_backend_finalize;
 }
diff --git a/gio/gsettings.c b/gio/gsettings.c
index d88ad01..b31f462 100644
--- a/gio/gsettings.c
+++ b/gio/gsettings.c
@@ -213,6 +213,7 @@
   gchar *path;
 
   GDelayedSettingsBackend *delayed;
+  gboolean destroyed;
 };
 
 enum
@@ -491,6 +492,10 @@
                             settings->priv->main_context);
   g_settings_backend_subscribe (settings->priv->backend,
                                 settings->priv->path);
+
+  settings->priv->destroyed =
+    !g_settings_backend_check (settings->priv->backend,
+                               settings->priv->path);
 }
 
 static void
@@ -2915,6 +2920,130 @@
   g_object_set_qdata (object, binding_quark, NULL);
 }
 
+/* Children (add, remove, can_{add,remove}, list, get_destroyed) {{{1 */
+
+/**
+ * g_settings_add_child:
+ * @settings: a list #GSettings
+ * @prefix: the prefix of the new child name
+ * @name: return location for the new child name
+ * @returns: %TRUE if the child was added
+ *
+ * Adds a child to a list.
+ *
+ * The child will be created with a new unique name that starts with
+ * @prefix.  For example, if @prefix is "item" then the child's name may
+ * end up looking like "item0", "item1", or so on.  No particular format
+ * is specified -- only that the resulting name will have the given
+ * prefix.
+ *
+ * If the creation was successful then @name (if non-%NULL) is set to
+ * the name of the new child and %TRUE is returned.
+ *
+ * If the creation fails then %FALSE is returned and @name is untouched.
+ **/
+gboolean
+g_settings_add_child (GSettings    *settings,
+                      const gchar  *prefix,
+                      gchar       **name)
+{
+  g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
+  g_return_val_if_fail (prefix != NULL, FALSE);
+
+  return g_settings_backend_insert (settings->priv->backend,
+                                    settings->priv->path,
+                                    -1, prefix, name);
+}
+
+/**
+ * g_settings_remove_child:
+ * @settings: a list #GSettings
+ * @id: the id of the child to remove
+ * @returns: %TRUE if the child was successfully removed
+ *
+ * Removes a child from the list.
+ *
+ * In the case that the removal was successful then %TRUE is returned.
+ * In the case that it failed, %FALSE is returned.
+ *
+ * The return value of this function is not particularly useful, since
+ * it is not specified if the non-operation resulting from the request
+ * to remove a non-existent child is considered to be a success (and
+ * this situation can easily arise as a race condition).  Most usually
+ * you will actually probably want to ignore the return value here and
+ * just monitor the "children-changed" signal and make changes to your
+ * user interface accordingly.
+ **/
+gboolean
+g_settings_remove_child (GSettings   *settings,
+                         const gchar *id)
+{
+  g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
+  g_return_val_if_fail (id != NULL, FALSE);
+
+  return g_settings_backend_remove (settings->priv->backend,
+                                    settings->priv->path,
+                                    id);
+}
+
+/**
+ * g_settings_can_add_child:
+ * @settings: a #GSettings object
+ * @returns: %TRUE if a call to g_settings_add_child() would succeed
+ *
+ * Checks if it is valid to add children to @settings.
+ **/
+gboolean
+g_settings_can_add_child (GSettings *settings)
+{
+  g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
+
+  return g_settings_backend_can_insert (settings->priv->backend,
+                                        settings->priv->path);
+}
+
+/**
+ * g_settings_can_remove_child:
+ * @settings: a #GSettings object
+ * @id: the identifier of an existing child
+ * @returns: %TRUE if a call to g_settings_remove_child() would succeed
+ *
+ * Checks if it is valid to remove @id from @settings.
+ *
+ * The return value of this function is unspecified for the case that
+ * @id does not exist.
+ **/
+gboolean
+g_settings_can_remove_child (GSettings   *settings,
+                             const gchar *id)
+{
+  g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
+
+  return g_settings_backend_can_remove (settings->priv->backend,
+                                        settings->priv->path, id);
+}
+
+/**
+ * g_settings_get_destroyed:
+ * @settings: a #GSettings
+ * @returns: %TRUE if @settings has been destroyed
+ *
+ * Checks if @settings has been destroyed.
+ *
+ * If @settings is a member of a list (or a child thereof) and has since
+ * been removed from the list then it will be considered as having been
+ * destroyed.  The "notify" signal will be emitted on the "destroyed"
+ * property and this function will return %TRUE thereafter.
+ *
+ * A destroyed #GSettings object is never revived and nearly all
+ * operations performed on it will be meaningless.
+ **/
+gboolean
+g_settings_get_destroyed (GSettings *settings)
+{
+  return settings->priv->destroyed;
+}
+
 /* Epilogue {{{1 */
 
 /* vim:set foldmethod=marker: */
diff --git a/gio/gsettings.h b/gio/gsettings.h
index 8226750..57c15f6 100644
--- a/gio/gsettings.h
+++ b/gio/gsettings.h
@@ -58,7 +58,10 @@
                                         const GQuark *keys,
                                         gint          n_keys);
 
-  gpointer padding[20];
+  void        (*can_remove_changed)    (GSettings    *settings);
+  void        (*children_changed)      (GSettings    *settings);
+
+  gpointer padding[18];
 };
 
 struct _GSettings
@@ -259,6 +262,20 @@
                                                                          GSettingsGetMapping      mapping,
                                                                          gpointer                 user_data);
 
+gboolean                g_settings_can_add_child                        (GSettings               *settings);
+
+gboolean                g_settings_can_remove_child                     (GSettings               *settings,
+                                                                         const gchar             *id);
+
+gboolean                g_settings_add_child                            (GSettings               *settings,
+                                                                         const gchar             *prefix,
+                                                                         gchar                  **name);
+
+gboolean                g_settings_remove_child                         (GSettings               *settings,
+                                                                         const gchar             *id);
+
+gboolean                g_settings_get_destroyed                        (GSettings               *settings);
+
 G_END_DECLS
 
 #endif  /* __G_SETTINGS_H__ */
diff --git a/gio/gsettingsbackend.c b/gio/gsettingsbackend.c
index bd2fa2e..954a4ac 100644
--- a/gio/gsettingsbackend.c
+++ b/gio/gsettingsbackend.c
@@ -1027,3 +1027,57 @@
   if (class->sync)
     class->sync (backend);
 }
+
+gchar **
+g_settings_backend_list (GSettingsBackend    *backend,
+			 const gchar         *path,
+			 const gchar * const *schema_items)
+{
+  return G_SETTINGS_BACKEND_GET_CLASS (backend)
+    ->list (backend, path, schema_items);
+}
+
+gboolean
+g_settings_backend_can_insert (GSettingsBackend *backend,
+                               const gchar      *path)
+{
+  return G_SETTINGS_BACKEND_GET_CLASS (backend)
+    ->can_insert (backend, path);
+}
+
+gboolean
+g_settings_backend_can_remove (GSettingsBackend *backend,
+                               const gchar      *path,
+                               const gchar      *id)
+{
+  return G_SETTINGS_BACKEND_GET_CLASS (backend)
+    ->can_remove (backend, path, id);
+}
+
+gboolean
+g_settings_backend_insert (GSettingsBackend  *backend,
+                           const gchar       *path,
+                           gint               index_,
+                           const gchar       *prefix,
+                           gchar            **name)
+{
+  return G_SETTINGS_BACKEND_GET_CLASS (backend)
+    ->insert (backend, path, index_, prefix, name);
+}
+
+gboolean
+g_settings_backend_remove (GSettingsBackend *backend,
+                           const gchar      *path,
+                           const gchar      *id)
+{
+  return G_SETTINGS_BACKEND_GET_CLASS (backend)
+    ->remove (backend, path, id);
+}
+
+gboolean
+g_settings_backend_check (GSettingsBackend *backend,
+                          const gchar      *path)
+{
+  return G_SETTINGS_BACKEND_GET_CLASS (backend)
+    ->check (backend, path);
+}
diff --git a/gio/gsettingsbackend.h b/gio/gsettingsbackend.h
index 3705ee5..2f4aeaa 100644
--- a/gio/gsettingsbackend.h
+++ b/gio/gsettingsbackend.h
@@ -93,7 +93,26 @@
   GPermission * (*get_permission)   (GSettingsBackend    *backend,
                                      const gchar         *path);
 
-  gpointer padding[24];
+  gchar **      (*list)             (GSettingsBackend    *backend,
+                                     const gchar         *path,
+                                     const gchar * const *schema_items);
+  gboolean      (*check)            (GSettingsBackend    *backend,
+                                     const gchar         *path);
+  gboolean      (*can_insert)       (GSettingsBackend    *backend,
+                                     const gchar         *path);
+  gboolean      (*can_remove)       (GSettingsBackend    *backend,
+                                     const gchar         *path,
+                                     const gchar         *id);
+  gboolean      (*insert)           (GSettingsBackend    *backend,
+                                     const gchar         *path,
+                                     gint                 index_,
+                                     const gchar         *prefix,
+                                     gchar              **name);
+  gboolean      (*remove)           (GSettingsBackend    *backend,
+                                     const gchar         *path,
+                                     const gchar         *id);
+
+  gpointer padding[18];
 };
 
 struct _GSettingsBackend
diff --git a/gio/gsettingsbackendinternal.h b/gio/gsettingsbackendinternal.h
index a6711cb..6a4230c 100644
--- a/gio/gsettingsbackendinternal.h
+++ b/gio/gsettingsbackendinternal.h
@@ -41,12 +41,24 @@
                                   const gchar         *prefix,
                                   const gchar * const *names,
                                   gpointer             origin_tag);
+
   void (* writable_changed)      (GObject             *target,
                                   GSettingsBackend    *backend,
                                   const gchar         *key);
   void (* path_writable_changed) (GObject             *target,
                                   GSettingsBackend    *backend,
                                   const gchar         *path);
+
+  void (* children_changed)      (GObject             *target,
+                                  GSettingsBackend    *backend,
+                                  const gchar         *path,
+                                  gpointer             origin_tag);
+  void (* can_add_changed)       (GObject             *target,
+                                  GSettingsBackend    *backend,
+                                  const gchar         *path);
+  void (* can_remove_changed)    (GObject             *target,
+                                  GSettingsBackend    *backend,
+                                  const gchar         *path);
 } GSettingsListenerVTable;
 
 G_GNUC_INTERNAL
@@ -91,6 +103,28 @@
 G_GNUC_INTERNAL
 GPermission *           g_settings_backend_get_permission               (GSettingsBackend               *backend,
                                                                          const gchar                    *path);
+
+G_GNUC_INTERNAL
+gboolean                g_settings_backend_check                        (GSettingsBackend               *backend,
+                                                                         const gchar                    *path);
+G_GNUC_INTERNAL
+gboolean                g_settings_backend_insert                       (GSettingsBackend               *backend,
+                                                                         const gchar                    *path,
+                                                                         gint                            index,
+                                                                         const gchar                    *prefix,
+                                                                         gchar                         **name);
+G_GNUC_INTERNAL
+gboolean                g_settings_backend_remove                       (GSettingsBackend               *backend,
+                                                                         const gchar                    *path,
+                                                                         const gchar                    *id);
+G_GNUC_INTERNAL
+gboolean                g_settings_backend_can_insert                   (GSettingsBackend               *backend,
+                                                                         const gchar                    *path);
+G_GNUC_INTERNAL
+gboolean                g_settings_backend_can_remove                   (GSettingsBackend               *backend,
+                                                                         const gchar                    *path,
+                                                                         const gchar                    *id);
+
 G_GNUC_INTERNAL
 GSettingsBackend *      g_settings_backend_get_default                  (void);
 G_GNUC_INTERNAL
