diff --git a/libgd b/libgd
--- a/libgd
+++ b/libgd
@@ -1 +1 @@
-Subproject commit 752f65e91ea0d9a2ee8a2d21343bbd97bd0d038a
+Subproject commit 752f65e91ea0d9a2ee8a2d21343bbd97bd0d038a-dirty
diff --git a/src/nautilus-batch-rename-dialog.c b/src/nautilus-batch-rename-dialog.c
index 21c8be1..fc38baa 100644
--- a/src/nautilus-batch-rename-dialog.c
+++ b/src/nautilus-batch-rename-dialog.c
@@ -31,6 +31,9 @@
 #define ROW_MARGIN_START 6
 #define ROW_MARGIN_TOP_BOTTOM 4
 
+double mark_cumulative_time;
+double set_cumulative_time;
+
 struct _NautilusBatchRenameDialog
 {
     GtkDialog parent;
@@ -972,6 +975,8 @@ update_listbox (NautilusBatchRenameDialog *dialog)
     GtkLabel *label;
     GString *new_name;
 
+    clock_t start = clock() ;
+
     for (l1 = dialog->new_names, l2 = dialog->listbox_labels_new; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next)
     {
         label = GTK_LABEL (l2->data);
@@ -983,6 +988,12 @@ update_listbox (NautilusBatchRenameDialog *dialog)
         }
     }
 
+    append_cumulative_time = 0;
+    mark_cumulative_time = 0;
+    set_cumulative_time = 0;
+
+    clock_t replace_label_start = clock() ;
+
     for (l1 = dialog->selection, l2 = dialog->listbox_labels_old; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next)
     {
         label = GTK_LABEL (l2->data);
@@ -990,25 +1001,41 @@ update_listbox (NautilusBatchRenameDialog *dialog)
 
         old_name = nautilus_file_get_name (file);
 
-        if (g_strcmp0 (old_name, gtk_label_get_text (GTK_LABEL (label))) != 0)
+        if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_FORMAT)
         {
-            if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_FORMAT)
-            {
-                gtk_label_set_label (label, old_name);
-            }
-            else
-            {
-                new_name = batch_rename_replace_label_text (old_name,
-                                                            gtk_entry_get_text (GTK_ENTRY (dialog->find_entry)));
-                gtk_label_set_markup (GTK_LABEL (label), new_name->str);
+            clock_t set_start = clock() ;
 
-                g_string_free (new_name, TRUE);
-            }
+            gtk_label_set_label (label, old_name);
+
+            clock_t set_end = clock() ;
+            double set_elapsed_time = (set_end-set_start)/(double)CLOCKS_PER_SEC ;
+            set_cumulative_time += set_elapsed_time;
+        }
+        else
+        {
+            new_name = batch_rename_replace_label_text (old_name,
+                                                        gtk_entry_get_text (GTK_ENTRY (dialog->find_entry)));
+            clock_t mark_start = clock() ;
+
+            gtk_label_set_markup (GTK_LABEL (label), new_name->str);
+
+            clock_t mark_end = clock() ;
+            double mark_elapsed_time = (mark_end-mark_start)/(double)CLOCKS_PER_SEC ;
+            mark_cumulative_time += mark_elapsed_time;
+
+            g_string_free (new_name, TRUE);
         }
 
         g_free (old_name);
     }
 
+    clock_t replace_label_end = clock() ;
+    double replace_label_elapsed_time = (replace_label_end-replace_label_start)/(double)CLOCKS_PER_SEC ;
+    g_print ("replace label loop %f\n", replace_label_elapsed_time);
+    g_print ("GString append cumulative end %f\n", append_cumulative_time);
+    g_print ("set_markup cumulative end %f\n", mark_cumulative_time);
+    g_print ("set_text cumulative end %f\n", set_cumulative_time);
+
     update_rows_height (dialog);
 
     /* check if there are name conflicts and display them if they exist */
@@ -1058,6 +1085,10 @@ update_listbox (NautilusBatchRenameDialog *dialog)
     {
         dialog->rename_clicked = FALSE;
     }
+
+    clock_t end = clock() ;
+    double elapsed_time = (end-start)/(double)CLOCKS_PER_SEC ;
+    g_print ("update listbox time %f\n", elapsed_time);
 }
 
 void
diff --git a/src/nautilus-batch-rename-utilities.c b/src/nautilus-batch-rename-utilities.c
index 3a855ac..477f97d 100644
--- a/src/nautilus-batch-rename-utilities.c
+++ b/src/nautilus-batch-rename-utilities.c
@@ -25,7 +25,7 @@
 #include <string.h>
 #include <stdarg.h>
 #include <eel/eel-vfs-extensions.h>
-
+double append_cumulative_time;
 typedef struct
 {
     NautilusFile *file;
@@ -154,12 +154,21 @@ batch_rename_replace_label_text (gchar       *label,
     if (substring == NULL || g_strcmp0 (substring, "") == 0)
     {
         token = g_markup_escape_text (label, -1);
+
+        clock_t start = clock();
+
         new_label = g_string_append (new_label, token);
+
+        clock_t end = clock() ;
+        double append_elapsed_time = (end-start)/(double)CLOCKS_PER_SEC ;
+        append_cumulative_time += append_elapsed_time;
+
         g_free (token);
 
         return new_label;
     }
 
+
     splitted_string = g_strsplit (label, substring, -1);
     if (splitted_string == NULL)
     {
diff --git a/src/nautilus-batch-rename-utilities.h b/src/nautilus-batch-rename-utilities.h
index 49631b7..ba92214 100644
--- a/src/nautilus-batch-rename-utilities.h
+++ b/src/nautilus-batch-rename-utilities.h
@@ -23,6 +23,9 @@
 #include <gtk/gtk.h>
 #include <tracker-sparql.h>
 
+extern double append_cumulative_time;
+
+
 GList* batch_rename_dialog_get_new_names_list          (NautilusBatchRenameDialogMode  mode,
                                                         GList                         *selection,
                                                         GList                         *tags_list,
