Index: /trunk/grails-app/controllers/AppCoreController.groovy
===================================================================
--- /trunk/grails-app/controllers/AppCoreController.groovy	(revision 236)
+++ /trunk/grails-app/controllers/AppCoreController.groovy	(revision 237)
@@ -1,8 +1,12 @@
 import org.codehaus.groovy.grails.plugins.springsecurity.Secured
 
+/**
+* Controller class for the application core views.
+*/
 class AppCoreController extends BaseController {
 
     def personService
     def createDataService
+    def appConfigService
 
     def index = { redirect(action:start,params:params) }
@@ -25,7 +29,13 @@
     }
 
+    /**
+    * Render the start view.
+    */
     def start = {
     }
 
+    /**
+    * Allow a person to change their session timeout setting.
+    */
     def changeSessionTimeout = {
         if (request.method == 'GET') {
@@ -48,4 +58,7 @@
     }
 
+    /**
+    * Allow a person to change their password.
+    */
     def changePassword = {
         //def principal = authenticateService.principal()
@@ -83,23 +96,83 @@
     }
 
+    /**
+    * Render the manager view for manager or admin roles.
+    */
     @Secured(['ROLE_Manager','ROLE_AppAdmin'])
     def manager = {
     }
 
+    /**
+    * Render the appAdmin view for admin roles.
+    */
     @Secured(['ROLE_AppAdmin'])
     def appAdmin = {
+
+        def offerBaseDataCreation = false
+        def offerDemoDataCreation = false
+        def baseDataCreated = appConfigService.exists("baseDataCreated")
+        def demoDataCreated = appConfigService.exists("demoDataCreated")
+        def demoDataCreationDisabled = appConfigService.exists("demoDataCreationDisabled")
+
+        if(!baseDataCreated)
+            offerBaseDataCreation = true
+
+        if(baseDataCreated && !demoDataCreated && !demoDataCreationDisabled)
+            offerDemoDataCreation = true
+
+        return[baseDataCreated: baseDataCreated,
+                        demoDataCreated: demoDataCreated,
+                        offerDemoDataCreation: offerDemoDataCreation,
+                        offerBaseDataCreation: offerBaseDataCreation,
+                        demoDataCreationDisabled: demoDataCreationDisabled]
     }
 
+    /**
+    * Allow admin to disable demo data creation.
+    */
+    @Secured(['ROLE_AppAdmin'])
+    def disableDemoDataCreation = {
+        if(!appConfigService.set("demoDataCreationDisabled")) {
+            flash.message = "Demo data creation could not be disabled."
+            redirect(action: appAdmin)
+            return
+        }
+
+        // Success.
+        flash.message = "Demo data creation disabled."
+        redirect(action: appAdmin)
+    }
+
+    /**
+    * Allow admin to create base data.
+    */
     @Secured(['ROLE_AppAdmin'])
     def createBaseData = {
-        createDataService.createBaseData()
-        redirect(action:appAdmin)
+        if(!createDataService.createBaseData()) {
+            flash.message = "Base data could not be created."
+            redirect(action: appAdmin)
+            return
+        }
+
+        // Success.
+        flash.message = "Base data created."
+        redirect(action: appAdmin)
     }
 
+    /**
+    * Allow admin to create demo data.
+    */
     @Secured(['ROLE_AppAdmin'])
     def createDemoData = {
-        createDataService.createDemoData()
-        redirect(action:appAdmin)
+        if(!createDataService.createDemoData()) {
+            flash.message = "Demo data could not be created."
+            redirect(action: appAdmin)
+            return
+        }
+
+        // Success.
+        flash.message = "Demo data created."
+        redirect(action: appAdmin)
     }
 
-}
+} // end of class.
Index: /trunk/grails-app/services/CreateDataService.groovy
===================================================================
--- /trunk/grails-app/services/CreateDataService.groovy	(revision 236)
+++ /trunk/grails-app/services/CreateDataService.groovy	(revision 237)
@@ -12,4 +12,5 @@
     def taskService
     def dateUtilService
+    def appConfigService
 
 /*******************************************
@@ -41,5 +42,12 @@
     */
     def createBaseData() {
+
+        if(appConfigService.exists("baseDataCreated")) {
+            log.error "Base data has already been created, will NOT recreate."
+            return false
+        }
+
         log.info "Creating base data..."
+
         // Person and Utils
         createBaseAuthorities()
@@ -49,4 +57,5 @@
         createBaseSupplierType()
         createBaseManufacturerType()
+
         // Tasks
         createBaseTaskGroups()
@@ -56,11 +65,15 @@
         createBaseTaskModificationTypes()
         createBaseEntryTypes()
+
         // Inventory
         createBaseInventoryTypes()
         createBaseInventoryMovementTypes()
         createBaseMaintenancePolicies()
+
         // Assets
         createBaseAssetExtenededAttributeTypes()
 
+        // Record that data has been created.
+        appConfigService.set("baseDataCreated")
     }
 
@@ -69,5 +82,22 @@
     */
     def createDemoData() {
+
+        if(!appConfigService.exists("baseDataCreated")) {
+            log.error "Demo data cannot be created until base data has been created."
+            return false
+        }
+
+        if(appConfigService.exists("demoDataCreated")) {
+            log.error "Demo data has already been created, will NOT recreate."
+            return false
+        }
+
+        if(appConfigService.exists("demoDataCreationDisabled")) {
+            log.error "Demo data creation has been disabled, will NOT create."
+            return false
+        }
+
         log.info "Creating demo data..."
+
         // Person and Utils
         createDemoPersons()
@@ -76,4 +106,5 @@
         createDemoSuppliers()
         createDemoManufacturers()
+
         // Tasks
         createDemoTasks()
@@ -81,4 +112,5 @@
         createDemoAssignedPersons()
         createDemoTaskRecurringSchedules()
+
         // Inventory
         createDemoInventoryStores()  /// @todo: Perhaps a 'createQuickStartData' method?
@@ -86,4 +118,5 @@
         createDemoInventoryGroups() /// @todo: Perhaps a 'createQuickStartData' method?
         createDemoInventoryItems()
+
         // Assets
         createDemoLifePlan()
@@ -97,4 +130,7 @@
         createDemoAssets()
         createDemoAssetExtenedAttributes()
+
+        // Record that data has been created.
+        appConfigService.set("demoDataCreated")
     }
 
Index: /trunk/grails-app/views/appCore/appAdmin.gsp
===================================================================
--- /trunk/grails-app/views/appCore/appAdmin.gsp	(revision 236)
+++ /trunk/grails-app/views/appCore/appAdmin.gsp	(revision 237)
@@ -23,7 +23,32 @@
                             </td>
                             <td valign="top" class="value">
-                                <g:link action="createBaseData">Base</g:link> - Create the base data required for the application to function.
+
+                                <g:if test="${offerBaseDataCreation}">
+                                    <g:link action="createBaseData">Base</g:link> - Create the base data required for the application to function.
+                                </g:if>
+                                <g:else>
+                                    <g:if test="${baseDataCreated}">
+                                        Base data has been created.
+                                    </g:if>
+                                </g:else>
+
                                 <br />
-                                <g:link action="createDemoData">Demo</g:link> - Create demo data for some example sites.
+
+                                <g:if test="${demoDataCreationDisabled}">
+                                    Demo data creation has been disabled.
+                                </g:if>
+                                <g:else>
+                                    <g:if test="${offerDemoDataCreation}">
+                                        <g:link action="createDemoData">Demo</g:link> - Create demo data for some example sites.
+                                        <br />
+                                        <g:link action="disableDemoDataCreation">Disable</g:link> - Disable demo data creation.
+                                    </g:if>
+                                    <g:else>
+                                        <g:if test="${demoDataCreated}">
+                                            Demo data has been created.
+                                        </g:if>
+                                    </g:else>
+                                </g:else>
+
                             </td>
                         </tr>
