Index: trunk/autoquest-test-utils/src/main/java/de/ugoe/cs/autoquest/tasktrees/TaskTreeEncoder.java
===================================================================
--- trunk/autoquest-test-utils/src/main/java/de/ugoe/cs/autoquest/tasktrees/TaskTreeEncoder.java	(revision 1372)
+++ trunk/autoquest-test-utils/src/main/java/de/ugoe/cs/autoquest/tasktrees/TaskTreeEncoder.java	(revision 1412)
@@ -29,4 +29,5 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IMarkingTemporalRelationship;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptional;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptionalInstance;
@@ -34,4 +35,5 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IStructuringTemporalRelationship;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
@@ -85,4 +87,22 @@
         }
     }
+    
+    /**
+     *
+     */
+    public void encode(ITask task)
+        throws FileNotFoundException
+    {
+        PrintStream out = null;
+        try {
+            out = new PrintStream(new FileOutputStream("task.txt"));
+            encode(task, out);
+        }
+        finally {
+            if (out != null) {
+                out.close();
+            }
+        }
+    }
 
     /**
@@ -109,4 +129,11 @@
     public void encode(ITaskInstance taskInstance, PrintStream out) {
         encode(taskInstance, out, "", 0);
+    }
+
+    /**
+     *
+     */
+    public void encode(ITask task, PrintStream out) {
+        encode(task, out, "", 0);
     }
     
@@ -163,4 +190,61 @@
         else if (taskInstance instanceof IOptionalInstance) {
             encode(((IOptionalInstance) taskInstance).getChild(), out, indent + "  ", i++);
+        }
+
+        if (task instanceof ITemporalRelationship) {
+            out.print(indent);
+            out.print("}");
+        }
+
+        out.println();
+    }
+    
+    /**
+     *
+     */
+    private void encode(ITask         task,
+                        PrintStream   out,
+                        String        indent,
+                        int           index)
+    {
+        if (task instanceof ITemporalRelationship) {
+            if (index > 0) {
+                out.println();
+            }
+            out.print(indent);
+
+            if (task instanceof ISequence) {
+                out.print("Sequence ");
+            }
+            else if (task instanceof ISelection) {
+                out.print("Selection ");
+            }            
+            else if (task instanceof IIteration) {
+                out.print("Iteration ");
+            }            
+            else if (task instanceof IOptional) {
+                out.print("Optional ");
+            }
+            
+            out.print(task.getId());
+            out.println(" {");
+        }
+        else if (task instanceof IEventTask) {
+            out.print(indent);
+            out.print(task);
+        }
+        else {
+            fail("unknown type of task " + task);
+        }
+
+        int i = 0;
+        
+        if (task instanceof IStructuringTemporalRelationship) {
+            for (ITask child : ((IStructuringTemporalRelationship) task).getChildren()) {
+                encode(child, out, indent + "  ", i++);
+            }
+        }
+        else if (task instanceof IMarkingTemporalRelationship) {
+            encode(((IMarkingTemporalRelationship) task).getMarkedTask(), out, indent + "  ", i++);
         }
 
