diff --git a/gio/ChangeLog b/gio/ChangeLog
index 55d1659..8c76e96 100644
--- a/gio/ChangeLog
+++ b/gio/ChangeLog
@@ -1,3 +1,10 @@
+2008-07-06  David Zeuthen  <davidz@redhat.com>
+
+	* gio.symbols:
+	* gvolume.[ch]: Add new method g_volume_get_activation_root(). This
+	is needed for easily handling adoption of foreign volumes by
+	out-of-process volume monitors.
+
 2008-07-05  Matthias Clasen  <mclasen@redhat.com>
 
 	* gappinfo.c: Clarify some docs
diff --git a/gio/gio.symbols b/gio/gio.symbols
index 9a890f4..260b254 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -735,6 +735,7 @@ g_volume_eject
 g_volume_eject_finish
 g_volume_get_identifier
 g_volume_enumerate_identifiers
+g_volume_get_activation_root
 #endif
 #endif
 
diff --git a/gio/gvolume.c b/gio/gvolume.c
index 7000582..b91855d 100644
--- a/gio/gvolume.c
+++ b/gio/gvolume.c
@@ -516,6 +516,32 @@ g_volume_enumerate_identifiers (GVolume *volume)
   return (* iface->enumerate_identifiers) (volume);
 }
 
+/**
+ * g_volume_get_activation_root:
+ * @volume: a #GVolume
+ *
+ * Gets the activation root for a #GVolume if it is known ahead of
+ * mount time. Returns %NULL otherwise.
+ *
+ * Returns: the activation URI or %NULL. Use g_object_unref() to free.
+ *
+ * Since: 2.18
+ **/
+GFile *
+g_volume_get_activation_root (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->get_activation_root == NULL)
+    return NULL;
+
+  return (* iface->get_activation_root) (volume);
+}
+
+
 
 #define __G_VOLUME_C__
 #include "gioaliasdef.c"
diff --git a/gio/gvolume.h b/gio/gvolume.h
index 72a74e1..5631dbd 100644
--- a/gio/gvolume.h
+++ b/gio/gvolume.h
@@ -94,6 +94,8 @@ G_BEGIN_DECLS
  * @enumerate_identifiers: Returns an array strings listing the kinds
  *    of <link linkend="volume-identifier">identifiers</link> which the #GVolume has.
  * @should_automount: Returns %TRUE if the #GVolume should be automatically mounted.
+ * @get_activation_root: Returns the activation root for the #GVolume if it is known in advance or %NULL if
+ *   it is not known.
  * 
  * Interface for implementing operations for mountable volumes.
  **/
@@ -140,6 +142,8 @@ struct _GVolumeIface
   char **  (*enumerate_identifiers)    (GVolume             *volume);
 
   gboolean (*should_automount)         (GVolume             *volume);
+
+  GFile *  (*get_activation_root)      (GVolume             *volume);
   
 };
 
@@ -174,6 +178,8 @@ char *   g_volume_get_identifier        (GVolume              *volume,
 					 const char           *kind);
 char **  g_volume_enumerate_identifiers (GVolume              *volume);
 
+GFile *  g_volume_get_activation_root   (GVolume              *volume);
+
 
 G_END_DECLS
 
