Index: trunk/grails-app/services/TaskService.groovy
===================================================================
--- trunk/grails-app/services/TaskService.groovy	(revision 243)
+++ trunk/grails-app/services/TaskService.groovy	(revision 245)
@@ -11,4 +11,5 @@
     /**
     * Determines and returns a possible parent list for a task.
+    * @todo Create and use another method that limits the results to say the latest 20 or 100 tasks?
     * @param taskInstance The task to use when determining the possible parent list.
     * @returns A list of the possible parents.
@@ -105,7 +106,10 @@
 
     /**
-    * Creates a subTask copying attributes from the parentTask unless otherwise specified.
-    * The taskProcedure is only assigned to the sub task if given in params.
-    * The assignedPersons and assignedGroups are only added to the sub task if given as new ArrayList's in params.
+    * Creates a subTask copying sane attributes from the parentTask unless otherwise specified in params.
+    * The taskProcedure is only assigned to the sub task if supplied in params.
+    * The assignedPersons and assignedGroups are only added to the sub task if supplied in params.
+    * Collections in params must be supplied as new ArrayList's.
+    * This method is not intended to be a copyTask method.
+    * There should be no reason to copy tasks, try to find a better solution.
     * @param parentTask The parent task to get attributes from, also set as the parent.
     * @param params Overrides the parent task values if specified.
@@ -121,4 +125,6 @@
         p.description = params.description ?: parentTask.description
         p.comment = params.comment ?: parentTask.comment
+        p.targetStartDate = params.targetStartDate ?: parentTask.targetStartDate
+        p.targetCompletionDate = params.targetCompletionDate ?: parentTask.targetCompletionDate
 
         p.taskGroup = params.taskGroup ?: parentTask.taskGroup
@@ -128,12 +134,21 @@
         p.leadPerson = params.leadPerson ?: parentTask.leadPerson
         p.primaryAsset = params.primaryAsset ?: parentTask.primaryAsset
-
-        p.targetStartDate = params.targetStartDate ?: parentTask.targetStartDate
-        p.targetCompletionDate = params.targetCompletionDate ?: parentTask.targetCompletionDate
-
+        p.associatedAssets = params.associatedAssets ?: new ArrayList(parentTask.associatedAssets) // Collection.
+
+        // Only if supplied, otherwise this would be copying.
+        if(params.scheduled) p.scheduled = params.scheduled
+        if(params.approved) p.approved = params.approved
+
+        // Supplied by recurring tasks.
         if(params.taskProcedure) p.taskProcedure = params.taskProcedure
-        if(params.assignedGroups) p.assignedGroups = params.assignedGroups
-        if(params.assignedPersons) p.assignedPersons = params.assignedPersons
-
+        if(params.assignedGroups) p.assignedGroups = params.assignedGroups // Collection.
+        if(params.assignedPersons) p.assignedPersons = params.assignedPersons // Collection.
+
+        // trash: A new subTask must always have trash=false, which is already the domain class default.
+
+        // These would be considered copying, hence not done.
+        // taskRecurringSchedule, entries, taskModifications, subTasks, inventoryMovements.
+
+        // Create the sub task and return the result.
         result = create(p)
 
