Index: trunk/grails-app/conf/BootStrap.groovy
===================================================================
--- trunk/grails-app/conf/BootStrap.groovy	(revision 570)
+++ trunk/grails-app/conf/BootStrap.groovy	(revision 571)
@@ -16,4 +16,5 @@
                 createDataService.createBaseData()
                 createDataService.createDemoData()
+                createDataService.startLucene()
             }
             test {
@@ -21,4 +22,5 @@
                 createDataService.ensureSystemAndAdminAccess()
                 createDataService.createBaseData()
+                createDataService.startLucene(false)
             }
             production {
@@ -26,4 +28,5 @@
                 createDataService.ensureSystemAndAdminAccess()
                 createDataService.createBaseData()
+                createDataService.startLucene()
             }
         }
Index: trunk/grails-app/conf/Searchable.groovy
===================================================================
--- trunk/grails-app/conf/Searchable.groovy	(revision 570)
+++ trunk/grails-app/conf/Searchable.groovy	(revision 571)
@@ -124,5 +124,5 @@
      * If false, you must manage the index manually using index/unindex/reindex
      */
-    mirrorChanges = true
+    mirrorChanges = false
 
     /**
@@ -137,5 +137,5 @@
      * which means do a non-forking, otherwise "fork" is recommended
      */
-    bulkIndexOnStartup = true
+    bulkIndexOnStartup = false
 
     /**
Index: trunk/grails-app/services/CreateDataService.groovy
===================================================================
--- trunk/grails-app/services/CreateDataService.groovy	(revision 570)
+++ trunk/grails-app/services/CreateDataService.groovy	(revision 571)
@@ -13,4 +13,5 @@
     def dateUtilService
     def appConfigService
+    def searchableService
     def inventoryItemService
     def assignedGroupService
@@ -1502,8 +1503,38 @@
     }
 
-
-/****************************************
-Call this function instead of .save()
-*****************************************/
+    /**
+    * Lucene index and mirroring is disabled at startup.
+    * Us this to start lucene indexing after creating bootstrap data.
+    * @param indexInNewThread Whether to run the index in a new thread, defaults to true.
+    */
+    def startLucene(Boolean indexInNewThread = true) {
+        log.info "Start mirroring lucene index."
+        searchableService.startMirroring()
+        if(indexInNewThread) {
+            Thread.start {
+                log.info "Rebuilding lucene text search index, bulkIndex in new thread."
+                searchableService.index()
+                log.info "Rebuilding lucene text search index, complete."
+            }
+        }
+        else {
+            log.info "Rebuilding lucene text search index, bulkIndex."
+            searchableService.index()
+            log.info "Rebuilding lucene text search index, complete."
+        }
+    }
+
+    /**
+    * Lucene index and mirroring during bulk data creation may be slow.
+    * Us this to stop lucene indexing and restart with startLucene() after data creation.
+    */
+    def stopLucene() {
+        log.info "Stop mirroring lucene index."
+        searchableService.stopMirroring()
+    }
+
+    /**
+    * Call this function instead of .save()
+    */
     private boolean saveAndTest(object) {
         if(!object.save()) {
@@ -1515,3 +1546,4 @@
         return true
     }
+
 }
