REOPENED - bug 291991: allow sections to be nested
https://bugs.eclipse.org/bugs/show_bug.cgi?id=291991
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
index 6c813b7..819655e 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
@@ -782,10 +782,9 @@
 		createParts(PATH_PEOPLE, bottomComposite, descriptors);
 		bottomComposite.pack(true);
 
-		createSubParts(descriptors);
 	}
 
-	private void createParts(String path, final Composite parent, Collection<TaskEditorPartDescriptor> descriptors) {
+	private void createParts(String path, final Composite parent, final Collection<TaskEditorPartDescriptor> descriptors) {
 		for (Iterator<TaskEditorPartDescriptor> it = descriptors.iterator(); it.hasNext();) {
 			final TaskEditorPartDescriptor descriptor = it.next();
 			if (path == null || path.equals(descriptor.getPath())) {
@@ -798,7 +797,7 @@
 					public void run() throws Exception {
 						AbstractTaskEditorPart part = descriptor.createPart();
 						part.setPartId(descriptor.getId());
-						initializePart(parent, part);
+						initializePart(parent, part, descriptors);
 					}
 				});
 				it.remove();
@@ -806,16 +805,15 @@
 		}
 	}
 
-	private void createSubParts(Collection<TaskEditorPartDescriptor> descriptors) {
-		for (Iterator<TaskEditorPartDescriptor> it = descriptors.iterator(); it.hasNext();) {
-			final TaskEditorPartDescriptor descriptor = it.next();
+	private void createSubParts(final AbstractTaskEditorSection parentPart,
+			final Collection<TaskEditorPartDescriptor> descriptors) {
+		for (final TaskEditorPartDescriptor descriptor : descriptors) {
 			int i;
 			String path = descriptor.getPath();
 			if (path != null && (i = path.indexOf("/")) != -1) { //$NON-NLS-1$
 				String parentId = path.substring(0, i);
 				final String subPath = path.substring(i + 1);
-				final AbstractTaskEditorPart parentPart = getPart(parentId);
-				if (parentPart instanceof AbstractTaskEditorSection) {
+				if (parentId.equals(parentPart.getPartId())) {
 					SafeRunner.run(new ISafeRunnable() {
 						public void handleException(Throwable e) {
 							StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
@@ -825,11 +823,11 @@
 						public void run() throws Exception {
 							AbstractTaskEditorPart part = descriptor.createPart();
 							part.setPartId(descriptor.getId());
-							initializePart(null, part);
-							((AbstractTaskEditorSection) parentPart).addSubPart(subPath, part);
+							getManagedForm().addPart(part);
+							part.initialize(AbstractTaskEditorPage.this);
+							parentPart.addSubPart(subPath, part);
 						}
 					});
-					it.remove();
 				}
 			}
 		}
@@ -1225,9 +1223,13 @@
 		}
 	}
 
-	private void initializePart(Composite parent, AbstractTaskEditorPart part) {
+	private void initializePart(Composite parent, AbstractTaskEditorPart part,
+			Collection<TaskEditorPartDescriptor> descriptors) {
 		getManagedForm().addPart(part);
 		part.initialize(this);
+		if (part instanceof AbstractTaskEditorSection) {
+			createSubParts((AbstractTaskEditorSection) part, descriptors);
+		}
 		if (parent != null) {
 			part.createControl(parent, toolkit);
 			if (part.getControl() != null) {