Index: uspace/app/nav/nav.c
===================================================================
--- uspace/app/nav/nav.c	(revision 0cf3d5fd80c26cfc1eb8307bffabaf2efbd10f3a)
+++ uspace/app/nav/nav.c	(revision b3a7151c4dc1352b01cdb71a6ea4f64e16ccfcec)
@@ -79,4 +79,12 @@
 	.activate_req = navigator_panel_activate_req,
 	.file_open = navigator_panel_file_open
+};
+
+static void navigator_progress_babort(progress_dlg_t *, void *);
+static void navigator_progress_close(progress_dlg_t *, void *);
+
+progress_dlg_cb_t navigator_progress_cb = {
+	.babort = navigator_progress_babort,
+	.close = navigator_progress_close
 };
 
@@ -596,4 +604,30 @@
 }
 
+/** Abort button pressed in progress dialog.
+ *
+ * @param dlg Progress dialog
+ * @param arg Argument (navigator_t *)
+ */
+static void navigator_progress_babort(progress_dlg_t *dlg, void *arg)
+{
+	navigator_t *nav = (navigator_t *)arg;
+
+	(void)dlg;
+	nav->abort_op = true;
+}
+
+/** Progress dialog closed,
+ *
+ * @param dlg Progress dialog
+ * @param arg Argument (navigator_t *)
+ */
+static void navigator_progress_close(progress_dlg_t *dlg, void *arg)
+{
+	navigator_t *nav = (navigator_t *)arg;
+
+	(void)dlg;
+	nav->abort_op = true;
+}
+
 /** @}
  */
Index: uspace/app/nav/nav.h
===================================================================
--- uspace/app/nav/nav.h	(revision 0cf3d5fd80c26cfc1eb8307bffabaf2efbd10f3a)
+++ uspace/app/nav/nav.h	(revision b3a7151c4dc1352b01cdb71a6ea4f64e16ccfcec)
@@ -38,6 +38,9 @@
 
 #include <errno.h>
+#include "types/dlg/progress.h"
 #include "types/nav.h"
 #include "types/panel.h"
+
+extern progress_dlg_cb_t navigator_progress_cb;
 
 extern errno_t navigator_create(const char *, navigator_t **);
Index: uspace/app/nav/newfile.c
===================================================================
--- uspace/app/nav/newfile.c	(revision 0cf3d5fd80c26cfc1eb8307bffabaf2efbd10f3a)
+++ uspace/app/nav/newfile.c	(revision b3a7151c4dc1352b01cdb71a6ea4f64e16ccfcec)
@@ -64,8 +64,10 @@
 };
 
+static bool new_file_abort_query(void *);
 static void new_file_progress(void *, fmgt_progress_t *);
 
 static fmgt_cb_t new_file_fmgt_cb = {
-	.progress = new_file_progress
+	.abort_query = new_file_abort_query,
+	.progress = new_file_progress,
 };
 
@@ -124,6 +126,8 @@
 	return;
 error:
+	fmgt_destroy(fmgt);
 	ui_lock(nav->ui);
 	progress_dlg_destroy(nav->progress_dlg);
+	navigator_refresh_panels(nav);
 	ui_msg_dialog_params_init(&params);
 	params.caption = "Error";
@@ -192,4 +196,7 @@
 	}
 
+	progress_dlg_set_cb(nav->progress_dlg, &navigator_progress_cb,
+	    (void *)nav);
+
 	rc = navigator_worker_start(nav, new_file_wfunc, (void *)job);
 	if (rc != EOK) {
@@ -231,4 +238,16 @@
 }
 
+/** New file abort query.
+ *
+ * @param arg Argument (navigator_t *)
+ * @return @c true iff abort is requested
+ */
+static bool new_file_abort_query(void *arg)
+{
+	navigator_t *nav = (navigator_t *)arg;
+
+	return nav->abort_op;
+}
+
 /** New file progress update.
  *
Index: uspace/app/nav/types/nav.h
===================================================================
--- uspace/app/nav/types/nav.h	(revision 0cf3d5fd80c26cfc1eb8307bffabaf2efbd10f3a)
+++ uspace/app/nav/types/nav.h	(revision b3a7151c4dc1352b01cdb71a6ea4f64e16ccfcec)
@@ -38,4 +38,5 @@
 
 #include <fibril.h>
+#include <stdbool.h>
 #include <ui/fixed.h>
 #include <ui/ui.h>
@@ -62,4 +63,6 @@
 	/** Worker fibril ID */
 	fid_t worker_fid;
+	/** Abort current file management operation */
+	bool abort_op;
 } navigator_t;
 
