diff --git a/gio/gmount.c b/gio/gmount.c
index dbdbeaf..ba4d18c 100644
--- a/gio/gmount.c
+++ b/gio/gmount.c
@@ -141,6 +141,22 @@ g_mount_base_init (gpointer g_class)
                     NULL, NULL,
                     g_cclosure_marshal_VOID__VOID,
                     G_TYPE_NONE, 0);
+     /**
+      * GMount::pre-unmount:
+      * @mount: the object on which the signal is emitted
+      * 
+      * This signal is emitted when the #GMount is about to be
+      * unmounted. This means
+      *
+      * Since: 2.22.
+      **/
+      g_signal_new (I_("pre-unmount"),
+                    G_TYPE_MOUNT,
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GMountIface, pre_unmount),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID,
+                    G_TYPE_NONE, 0);
 
       initialized = TRUE;
     }
diff --git a/gio/gmount.h b/gio/gmount.h
index 027960d..a1afe2c 100644
--- a/gio/gmount.h
+++ b/gio/gmount.h
@@ -126,6 +126,9 @@ struct _GMountIface
                                              gboolean             force_rescan,
                                              GCancellable        *cancellable,
                                              GError             **error);
+
+  /* yet more signals */
+  void        (* pre_unmount)               (GMount              *mount);
 };
 
 GType       g_mount_get_type                  (void) G_GNUC_CONST;
diff --git a/gio/gunixmount.c b/gio/gunixmount.c
index 603c0ba..406c0ce 100644
--- a/gio/gunixmount.c
+++ b/gio/gunixmount.c
@@ -394,6 +394,8 @@ eject_unmount_do (GMount              *mount,
   if (unix_mount->volume_monitor != NULL)
     g_signal_emit_by_name (unix_mount->volume_monitor, "mount-pre-unmount", mount);
 
+  g_signal_emit_by_name (mount, "pre-unmount", 0);
+
   g_timeout_add (500, (GSourceFunc) eject_unmount_do_cb, data);
 }
 
