diff --git a/plugins/housekeeping/gsd-disk-space.c b/plugins/housekeeping/gsd-disk-space.c
index 815012d..47a9529 100644
--- a/plugins/housekeeping/gsd-disk-space.c
+++ b/plugins/housekeeping/gsd-disk-space.c
@@ -343,7 +343,7 @@ delete_batch (GObject      *source,
 
         files = g_file_enumerator_next_files_finish (enumerator, res, &error);
 
-        g_debug ("GsdHousekeeping: purging %d children of %s", g_list_length (files), data->name);
+        g_debug ("GsdHousekeeping: purging %d children of %s\n", g_list_length (files), data->name);
 
         if (files) {
                 for (f = files; f; f = f->next) {
@@ -397,6 +397,7 @@ delete_subdir (GObject      *source,
         DeleteData *data = user_data;
         GFileEnumerator *enumerator;
         GError *error = NULL;
+        gboolean not_a_directory = FALSE;
 
         g_debug ("GsdHousekeeping: purging %s in %s\n",
                  data->trash ? "trash" : "temporary files", data->name);
@@ -405,6 +406,8 @@ delete_subdir (GObject      *source,
         if (error) {
                 if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY))
                         g_warning ("Failed to enumerate children of %s: %s\n", data->name, error->message);
+                else
+                        not_a_directory = TRUE;
                 g_error_free (error);
         }
         if (enumerator) {
@@ -413,6 +416,14 @@ delete_subdir (GObject      *source,
                                                     data->cancellable,
                                                     delete_batch,
                                                     delete_data_ref (data));
+        } else if (not_a_directory && data->depth > 0 && !g_cancellable_is_cancelled (data->cancellable)) {
+                if ((data->trash && data->depth > 1) ||
+                     should_purge_file (data->file, data->cancellable, data->old)) {
+                        g_debug ("GsdHousekeeping: purging %s leaf node\n", data->name);
+                        if (!data->dry_run) {
+                                g_file_delete (data->file, data->cancellable, NULL);
+                        }
+                }
         }
         delete_data_unref (data);
 }
@@ -504,11 +515,11 @@ ldsm_purge_trash_and_temp (gpointer data)
         old = g_date_time_add_days (now, - purge_after);
 
         if (purge_trash) {
-                g_debug ("housekeeping: purge trash older than %u days", purge_after);
+                g_debug ("housekeeping: purge trash older than %u days\n", purge_after);
                 gsd_ldsm_purge_trash (old);
         }
         if (purge_temp_files) {
-                g_debug ("housekeeping: purge temp files older than %u days", purge_after);
+                g_debug ("housekeeping: purge temp files older than %u days\n", purge_after);
                 gsd_ldsm_purge_temp_files (old);
         }
 
