diff --git a/mail/e-mail-migrate.c b/mail/e-mail-migrate.c
index 2f3ce8b..c5d7cba 100644
--- a/mail/e-mail-migrate.c
+++ b/mail/e-mail-migrate.c
@@ -132,27 +132,9 @@ em_migrate_setup_progress_dialog (const gchar *title, const gchar *desc)
 	gtk_window_set_modal ((GtkWindow *) window, TRUE);
 	gtk_container_set_border_width ((GtkContainer *) window, 6);
 
-	vbox = gtk_vbox_new (FALSE, 6);
-	gtk_widget_show (vbox);
-	gtk_container_add ((GtkContainer *) window, vbox);
-
-	w = gtk_label_new (desc);
-
-	gtk_label_set_line_wrap ((GtkLabel *) w, TRUE);
-	gtk_widget_show (w);
-	gtk_box_pack_start ((GtkBox *) vbox, w, TRUE, TRUE, 0);
-
 	hbox = gtk_hbox_new (FALSE, 6);
 	gtk_widget_show (hbox);
-	gtk_box_pack_start ((GtkBox *) vbox, hbox, TRUE, TRUE, 0);
-
-	label = (GtkLabel *) gtk_label_new ("");
-	gtk_widget_show ((GtkWidget *) label);
-	gtk_box_pack_start ((GtkBox *) hbox, (GtkWidget *) label, TRUE, TRUE, 0);
-
-	progress = (GtkProgressBar *) gtk_progress_bar_new ();
-	gtk_widget_show ((GtkWidget *) progress);
-	gtk_box_pack_start ((GtkBox *) hbox, (GtkWidget *) progress, TRUE, TRUE, 0);
+	gtk_container_add ((GtkContainer *) window, hbox);
 
 	/* Prepare the message */
 	vbox = gtk_vbox_new (FALSE, 12);
@@ -173,7 +155,6 @@ em_migrate_setup_progress_dialog (const gchar *title, const gchar *desc)
 
 	/* Progress bar */
 	w = gtk_vbox_new (FALSE, 6);
-	gtk_box_pack_start (GTK_BOX (vbox), w, TRUE, TRUE, 0);
 
 	label = GTK_LABEL (gtk_label_new (""));
 	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
@@ -185,7 +166,7 @@ em_migrate_setup_progress_dialog (const gchar *title, const gchar *desc)
 	gtk_widget_show (GTK_WIDGET (progress));
 	gtk_box_pack_start (GTK_BOX (w), GTK_WIDGET (progress), TRUE, TRUE, 0);
 
-	gtk_container_add (GTK_CONTAINER (window), hbox);
+	gtk_box_pack_start (GTK_BOX (vbox), w, TRUE, TRUE, 0);
 	gtk_widget_show_all (hbox);
 	gtk_widget_show (window);
 }
@@ -586,6 +567,22 @@ count_folders (CamelFolderInfo *fi, gint *count)
 	}
 }
 
+static void
+count_stores (CamelFolderInfo *fi, gint *count)
+{
+	if (fi) {
+		if (!g_str_has_prefix (fi->full_name, ".#evolution")) {
+			*count = *count + 1;
+		}
+
+		if (fi->child)
+			count_stores (fi->child, count);
+
+		count_stores (fi->next, count);
+	}
+
+}
+
 static CamelStore *
 setup_local_store (EShellBackend *shell_backend,
                    EMMigrateSession *session)
@@ -816,22 +813,31 @@ copy_folder (CamelStore *mbox_store, CamelStore *maildir_store, const gchar *mbo
 }
 
 static void
-copy_folders (CamelStore *mbox_store, CamelStore *maildir_store, CamelFolderInfo *fi, EMMigrateSession *session)
+copy_folders (CamelStore *mbox_store, CamelStore *maildir_store, CamelFolderInfo *fi, EMMigrateSession *session, gint *nth_folder, gint total_folders)
 {
 	if (fi) {
 		if (!g_str_has_prefix (fi->full_name, ".#evolution")) {
 			gchar *maildir_folder_name;
-
+			struct _migrate_state_info *info = g_malloc (sizeof (struct
+					_migrate_state_info));
+	
 			/* sanitize folder names and copy folders */
 			maildir_folder_name = sanitize_maildir_folder_name (fi->full_name);
+			info->label_name = g_strdup_printf ("%s", fi->full_name);
+
+			*nth_folder = *nth_folder + 1;
+
+			info->progress = (double) (*nth_folder) / (total_folders+1);
+			g_idle_add ((GSourceFunc) update_states_in_main_thread, info);
+			
 			copy_folder (mbox_store, maildir_store, fi->full_name, maildir_folder_name);
 			g_free (maildir_folder_name);
 		}
 
 		if (fi->child)
-			copy_folders (mbox_store, maildir_store, fi->child, session);
+			copy_folders (mbox_store, maildir_store, fi->child, session, nth_folder, total_folders);
 
-		copy_folders (mbox_store, maildir_store, fi->next, session);
+		copy_folders (mbox_store, maildir_store, fi->next, session, nth_folder, total_folders);
 	}
 }
 
@@ -845,7 +851,8 @@ struct MigrateStore {
 static void
 migrate_stores (struct MigrateStore *ms)
 {
-	CamelFolderInfo *mbox_fi;
+	CamelFolderInfo *mbox_fi,*count_mbox_fi;
+	gint total_folders = 0, nth_folder = 0;
 	CamelStore *mbox_store = ms->mbox_store;
 	CamelStore *maildir_store = ms->maildir_store;
 
@@ -856,10 +863,11 @@ migrate_stores (struct MigrateStore *ms)
 		CAMEL_STORE_FOLDER_INFO_SUBSCRIBED,
 		NULL, NULL);
 
-	/* FIXME progres dialog */
-	copy_folders (mbox_store, maildir_store, mbox_fi, ms->session);
+	count_mbox_fi = mbox_fi;
+	count_stores (count_mbox_fi,&total_folders);
+	copy_folders (mbox_store, maildir_store, mbox_fi, ms->session, &nth_folder, total_folders);
 	ms->complete = TRUE;
-
+	
 	return;
 }
 
@@ -907,10 +915,20 @@ migrate_mbox_to_maildir (EShellBackend *shell_backend, EMMigrateSession *session
 	ms.session = session;
 	ms.complete = FALSE;
 
+	em_migrate_setup_progress_dialog (
+		"Migrating Folders",
+		"The Evolution mailbox "
+		  "folders are moving to maildir format.\n\nPlease be "
+		  "patient while Evolution migrates your folders...");
+
+
 	g_thread_create ((GThreadFunc) migrate_stores, &ms, TRUE, NULL);
 	while (!ms.complete)
 		g_main_context_iteration (NULL, TRUE);
 
+	em_migrate_set_progress (1.00);
+	em_migrate_close_progress_dialog ();
+
 	g_object_unref (mbox_store);
 	g_object_unref (maildir_store);
 
