Index: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/InteractionTaskImpl.java
===================================================================
--- trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/InteractionTaskImpl.java	(revision 466)
+++ trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/InteractionTaskImpl.java	(revision 467)
@@ -98,7 +98,8 @@
   //-----------------------------------------------------------------------------------------------
   @Override
-  public TaskTreeNode clone()
+  public InteractionTaskImpl clone()
   {
-    return new InteractionTaskImpl(mGUIElement, mInteraction);
+    // GUI element and interaction are unchangeable and do not need to be cloned
+    return (InteractionTaskImpl) super.clone();
   }
 
Index: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/IterationImpl.java
===================================================================
--- trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/IterationImpl.java	(revision 466)
+++ trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/IterationImpl.java	(revision 467)
@@ -67,14 +67,7 @@
   //-----------------------------------------------------------------------------------------------
   @Override
-  public TaskTreeNode clone()
+  public IterationImpl clone()
   {
-    IterationImpl clone = new IterationImpl();
-    clone.setDescription(super.getDescription());
-    
-    if (super.getChildren().size() > 0)
-    {
-      clone.setChild(super.getChildren().get(0));
-    }
-    return clone;
+    return (IterationImpl) super.clone();
   }
 
Index: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SelectionImpl.java
===================================================================
--- trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SelectionImpl.java	(revision 466)
+++ trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SelectionImpl.java	(revision 467)
@@ -9,5 +9,4 @@
 
 import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
 
 //-------------------------------------------------------------------------------------------------
@@ -40,15 +39,7 @@
   //-----------------------------------------------------------------------------------------------
   @Override
-  public TaskTreeNode clone()
+  public SelectionImpl clone()
   {
-    SelectionImpl clone = new SelectionImpl();
-    clone.setDescription(super.getDescription());
-    
-    for (TaskTreeNode child : getChildren())
-    {
-      clone.addChild(child);
-    }
-    
-    return clone;
+    return (SelectionImpl) super.clone();
   }
 
Index: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SequenceImpl.java
===================================================================
--- trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SequenceImpl.java	(revision 466)
+++ trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SequenceImpl.java	(revision 467)
@@ -9,5 +9,4 @@
 
 import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
 
 //-------------------------------------------------------------------------------------------------
@@ -53,13 +52,5 @@
   public SequenceImpl clone()
   {
-    SequenceImpl clone = new SequenceImpl();
-    clone.setDescription(super.getDescription());
-    
-    for (TaskTreeNode child : getChildren())
-    {
-      clone.addChild(child);
-    }
-    
-    return clone;
+    return (SequenceImpl) super.clone();
   }
 
Index: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeImpl.java
===================================================================
--- trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeImpl.java	(revision 466)
+++ trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeImpl.java	(revision 467)
@@ -101,3 +101,31 @@
   }
 
+  //-----------------------------------------------------------------------------------------------
+  /* (non-Javadoc)
+   * @see java.lang.Object#clone()
+   */
+  //-----------------------------------------------------------------------------------------------
+  @Override
+  public TaskTreeImpl clone()
+  {
+    TaskTreeImpl clone = null;
+    try
+    {
+      clone = (TaskTreeImpl) super.clone();
+      
+      clone.mRootNode = mRootNode.clone();
+      
+      // the clone will create the task map itself, when it is first retrieved
+      clone.mTaskMap = null;
+      
+    }
+    catch (CloneNotSupportedException e)
+    {
+      // this should never happen. Therefore simply dump the exception
+      e.printStackTrace();
+    }
+    
+    return clone;
+  }
+
 }
Index: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeImpl.java
===================================================================
--- trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeImpl.java	(revision 466)
+++ trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeImpl.java	(revision 467)
@@ -23,5 +23,5 @@
  */
 //-------------------------------------------------------------------------------------------------
-public abstract class TaskTreeNodeImpl implements TaskTreeNode
+public class TaskTreeNodeImpl implements TaskTreeNode
 {
   /** */
@@ -282,5 +282,27 @@
   //-----------------------------------------------------------------------------------------------
   @Override
-  public abstract TaskTreeNode clone();
+  public TaskTreeNode clone()
+  {
+    TaskTreeNodeImpl clone = null;
+    try
+    {
+      clone = (TaskTreeNodeImpl) super.clone();
+      
+      clone.mChildren = new ArrayList<TaskTreeNode>();
+      
+      for (TaskTreeNode child : mChildren)
+      {
+        clone.mChildren.add(child.clone());
+      }
+      
+    }
+    catch (CloneNotSupportedException e)
+    {
+      // this should never happen. Therefore simply dump the exception
+      e.printStackTrace();
+    }
+    
+    return clone;
+  }
 
 }
Index: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TextInputInteractionTaskImpl.java
===================================================================
--- trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TextInputInteractionTaskImpl.java	(revision 466)
+++ trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TextInputInteractionTaskImpl.java	(revision 467)
@@ -10,5 +10,4 @@
 import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
 import de.ugoe.cs.quest.eventcore.userinteraction.TextInput;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
 import de.ugoe.cs.quest.tasktrees.treeifc.TextInputInteractionTask;
 
@@ -48,14 +47,6 @@
   public TextInputInteractionTaskImpl clone()
   {
-    TextInputInteractionTaskImpl clone = new TextInputInteractionTaskImpl(super.getGUIElement());
-    clone.setDescription(super.getDescription());
-    clone.setEnteredText(this.getEnteredText());
-    
-    for (TaskTreeNode child : getChildren())
-    {
-      clone.addChild(child);
-    }
-    
-    return clone;
+    // entered text is unchangeable and does not need to be cloned
+    return (TextInputInteractionTaskImpl) super.clone();
   }
 
