diff --git a/src/ostree/ot-builtin-ls.c b/src/ostree/ot-builtin-ls.c
index 6bbd324..e9d9185 100644
--- a/src/ostree/ot-builtin-ls.c
+++ b/src/ostree/ot-builtin-ls.c
@@ -152,9 +152,6 @@ print_directory_recurse (GFile    *f,
 {
   gboolean ret = FALSE;
   ot_lobj GFileEnumerator *dir_enum = NULL;
-  ot_lobj GFile *child = NULL;
-  ot_lobj GFileInfo *child_info = NULL;
-  GError *temp_error = NULL;
 
   dir_enum = g_file_enumerate_children (f, OSTREE_GIO_FAST_QUERYINFO, 
                                         G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
@@ -163,10 +160,13 @@ print_directory_recurse (GFile    *f,
   if (!dir_enum)
     goto out;
   
-  while ((child_info = g_file_enumerator_next_file (dir_enum, NULL, &temp_error)) != NULL)
+  while (g_file_enumerator_next (dir_enum, NULL))
     {
-      g_clear_object (&child);
-      child = g_file_get_child (f, g_file_info_get_name (child_info));
+      ot_lobj GFile *child = NULL;
+      ot_lobj GFileInfo *child_info = NULL;
+      
+      if (!g_file_enumerator_get_file (dir_enum, &child_info, &child, error))
+        goto out;
 
       print_one_file (child, child_info);
 
@@ -175,13 +175,6 @@ print_directory_recurse (GFile    *f,
           if (!print_directory_recurse (child, error))
             goto out;
         }
-
-      g_clear_object (&child_info);
-    }
-  if (temp_error)
-    {
-      g_propagate_error (error, temp_error);
-      goto out;
     }
 
   ret = TRUE;
