diff -Naur old/src/libtracker-miner/tracker-miner-fs.c new/src/libtracker-miner/tracker-miner-fs.c
--- old/src/libtracker-miner/tracker-miner-fs.c	2010-09-09 16:24:49.964267223 +0800
+++ new/src/libtracker-miner/tracker-miner-fs.c	2010-09-09 16:52:41.217927501 +0800
@@ -1494,13 +1494,46 @@
 			/* new file */
 			full_sparql = g_strdup (tracker_sparql_builder_get_result (data->builder));
 		}
-
-		tracker_miner_execute_batch_update (TRACKER_MINER (fs),
-		                                    full_sparql,
-		                                    NULL,
-		                                    sparql_update_cb,
-		                                    data);
-		g_free (full_sparql);
+#define MAX_ITEMS_IN_DIR 100
+        {
+            static int i = 0;
+            static GFile * current_parent = NULL; 
+            GFile * parent = g_file_get_parent (data->file); 
+            static gchar * group_sparql = NULL;
+            gchar * tmp;
+            tmp = group_sparql;
+            if (group_sparql != NULL) {
+                group_sparql = g_strdup_printf ("%s %s", group_sparql, full_sparql);
+            }
+            else
+                group_sparql = g_strdup (full_sparql);
+            
+            i++;
+            if ((parent == NULL) || (current_parent == NULL) ||
+                !g_file_equal(parent, current_parent) ||
+                (i >= MAX_ITEMS_IN_DIR)) {
+
+                if (current_parent) {
+                    g_object_unref (current_parent);
+                }
+                current_parent = parent;
+                tracker_miner_execute_batch_update (TRACKER_MINER (fs),
+                                                    group_sparql,
+                                                    NULL,
+                                                    sparql_update_cb,
+                                                    data);
+                g_free (group_sparql);
+                group_sparql = NULL;
+                i = 0;
+            } else {
+                fs->private->processing_pool = g_list_remove (fs->private->processing_pool, data);
+                process_data_free (data);
+                item_queue_handlers_set_up (fs);
+            }
+            g_free (full_sparql);
+            g_free (tmp);
+        }
+		
 	}
 
 	g_free (uri);
