Index: trunk/grails-app/services/TaskService.groovy
===================================================================
--- trunk/grails-app/services/TaskService.groovy	(revision 800)
+++ trunk/grails-app/services/TaskService.groovy	(revision 802)
@@ -685,7 +685,24 @@
             }
 
+            // Check for authorisation on tasks having subTasks.
+            if(result.taskInstance.subTasks) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"subTasks", code:"task.operationNotPermittedOnTaskHavingSubTasksWithoutAuth")
+            }
+
+            // Check for taskProcedure using this task as linkedTask.
+            if(result.taskInstance.taskProcedure?.linkedTask?.id == result.taskInstance.id)
+                return fail(field:"taskProcedure", code:"task.operationNotPermittedOnTaskLinkedToProcedure")
+
+            // Check for Parent PM task type.
+            if(result.taskInstance.taskType.id == 6)
+                return fail(field:"taskProcedure", code:"task.operationNotPermittedOnParentPmTask")
+
             result.taskInstance.trash = true
             result.taskInstance.attentionFlag = false
             result.taskInstance.taskRecurringSchedule?.enabled = false
+            result.taskInstance.subTasks.each {
+                it.parentTask = null
+            }
 
             if(result.taskInstance.hasErrors() || !result.taskInstance.save())
