enum {
        PAKFIRE_BUILD_CLEANUP_FILES         = (1 << 0),
        PAKFIRE_BUILD_ERROR_IF_NOT_EMPTY    = (1 << 1),
+       PAKFIRE_BUILD_SHOW_PROGRESS         = (1 << 2),
 };
 
 /*
                goto ERROR;
 
        // Find all files that need to be removed
-       r = pakfire_filelist_walk(filelist, callback, removees, 0);
+       r = pakfire_filelist_walk(filelist, callback, removees,
+               (flags & PAKFIRE_BUILD_SHOW_PROGRESS) ? PAKFIRE_FILELIST_SHOW_PROGRESS : 0);
        if (r)
                goto ERROR;
 
                filelist,
                "File Issues:",
                __pakfire_build_post_check_files,
-               PAKFIRE_BUILD_ERROR_IF_NOT_EMPTY);
+               PAKFIRE_BUILD_ERROR_IF_NOT_EMPTY|PAKFIRE_BUILD_SHOW_PROGRESS);
 }
 
 static int pakfire_build_run_post_build_checks(struct pakfire_build* build) {
 
        return 0;
 }
 
+static int pakfire_filelist_progressbar_create(
+               struct pakfire_progressbar** progressbar, const char* message) {
+       struct pakfire_progressbar* p = NULL;
+       int r;
+
+       // Create the progressbar
+       r = pakfire_progressbar_create(&p, NULL);
+       if (r)
+               goto ERROR;
+
+       // Add message
+       if (message) {
+               r = pakfire_progressbar_add_string(p, "%s", message);
+               if (r)
+                       goto ERROR;
+       }
+
+       // Add bar
+       r = pakfire_progressbar_add_bar(p);
+       if (r)
+               goto ERROR;
+
+       // Add percentage
+       r = pakfire_progressbar_add_percentage(p);
+       if (r)
+               goto ERROR;
+
+       // Add ETA
+       r = pakfire_progressbar_add_eta(p);
+       if (r)
+               goto ERROR;
+
+       *progressbar = p;
+
+       return 0;
+
+ERROR:
+       if (p)
+               pakfire_progressbar_unref(p);
+
+       return r;
+}
+
 int pakfire_filelist_walk(struct pakfire_filelist* list,
                pakfire_filelist_walk_callback callback, void* data, int flags) {
+       struct pakfire_progressbar* progressbar = NULL;
        struct pakfire_filelist_element* element = NULL;
        int r = 0;
 
+       // Show a progressbar when iterating over the filelist
+       if (flags & PAKFIRE_FILELIST_SHOW_PROGRESS) {
+               r = pakfire_filelist_progressbar_create(&progressbar, "Processing Files...");
+               if (r)
+                       goto ERROR;
+
+               const size_t length = pakfire_filelist_length(list);
+
+               // Start progressbar
+               pakfire_progressbar_start(progressbar, length);
+       }
+
        // Call the callback once for every element on the list
        TAILQ_FOREACH(element, &list->files, nodes) {
+               // Increment the progressbar
+               if (progressbar)
+                       pakfire_progressbar_increment(progressbar, 1);
+
                // Call the callback
                r = callback(list->pakfire, element->file, data);
                if (r)
                        break;
        }
 
+       // Done!
+       if (progressbar)
+               pakfire_progressbar_finish(progressbar);
+
+ERROR:
+       // Finish progress
+       if (progressbar)
+               pakfire_progressbar_unref(progressbar);
+
        return r;
 }
 
 
 typedef int (*pakfire_filelist_walk_callback)
        (struct pakfire* pakfire, struct pakfire_file* file, void* data);
 
+enum pakfire_filelist_walk_flags {
+       PAKFIRE_FILELIST_SHOW_PROGRESS = (1 << 0),
+};
+
 int pakfire_filelist_walk(struct pakfire_filelist* list,
        pakfire_filelist_walk_callback callback, void* data, int flags);
 int pakfire_filelist_dump(struct pakfire_filelist* list, int flags);