Index: trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/manager/ComponentManager.java
===================================================================
--- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/manager/ComponentManager.java	(revision 1188)
+++ trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/manager/ComponentManager.java	(revision 1189)
@@ -15,5 +15,4 @@
 package de.ugoe.cs.autoquest.tasktrees.manager;
 
-import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEqualityRuleManager;
 import de.ugoe.cs.autoquest.tasktrees.temporalrelation.TemporalRelationshipRuleManager;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
@@ -50,11 +49,4 @@
     /**
      * <p>
-     * the default task equality rule manager
-     * </p>
-     */
-    private TaskEqualityRuleManager taskEqualityRuleManager;
-
-    /**
-     * <p>
      * the default task builder
      * </p>
@@ -78,15 +70,4 @@
     public static TemporalRelationshipRuleManager getTemporalRelationshipRuleManager() {
         return getInstance().temporalRelationshipRuleManager;
-    }
-
-    /**
-     * <p>
-     * returns the default task equality rule manager
-     * </p>
-     * 
-     * @return as described
-     */
-    public static TaskEqualityRuleManager getTaskEqualityRuleManager() {
-        return getInstance().taskEqualityRuleManager;
     }
 
@@ -146,12 +127,9 @@
      */
     private void init() {
-        taskEqualityRuleManager = new TaskEqualityRuleManager();
-        taskEqualityRuleManager.init();
-
         taskBuilder = new TaskBuilder();
         taskFactory = new TaskFactory();
 
-        temporalRelationshipRuleManager = new TemporalRelationshipRuleManager
-            (taskEqualityRuleManager, taskFactory, taskBuilder);
+        temporalRelationshipRuleManager =
+            new TemporalRelationshipRuleManager(taskFactory, taskBuilder);
         temporalRelationshipRuleManager.init();
     }
Index: trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskEqualityRuleManager.java
===================================================================
--- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskEqualityRuleManager.java	(revision 1188)
+++ trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskEqualityRuleManager.java	(revision 1189)
@@ -32,4 +32,11 @@
  */
 public class TaskEqualityRuleManager {
+    
+    /**
+     * <p>
+     * the singleton instance of this class
+     * </p>
+     */
+    private static final TaskEqualityRuleManager instance = new TaskEqualityRuleManager();
 
     /**
@@ -43,8 +50,7 @@
      * <p>
      * initializes the task equality rule manager by filling the internal list of comparison rules.
-     * This method must be called before any other method is called on the rule manager.
-     * </p>
-     */
-    public void init() {
+     * </p>
+     */
+    private TaskEqualityRuleManager() {
         mRuleIndex = new ArrayList<TaskComparisonRule>();
         mRuleIndex.add(new TaskIdentityRule());
@@ -56,4 +62,16 @@
         mRuleIndex.add(new TaskAndIterationComparisonRule(this));
         mRuleIndex.add(new TaskAndSelectionComparisonRule(this));
+    }
+
+
+    /**
+     * <p>
+     * returns the singleton instance of this class
+     * </p>
+     * 
+     * @return as described
+     */
+    public static TaskEqualityRuleManager getInstance() {
+        return instance;
     }
 
Index: trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRule.java
===================================================================
--- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRule.java	(revision 1188)
+++ trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRule.java	(revision 1189)
@@ -15,4 +15,6 @@
 package de.ugoe.cs.autoquest.tasktrees.temporalrelation;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -74,13 +76,12 @@
      * </p>
      */
-    SequenceForTaskDetectionRule(TaskEqualityRuleManager taskEqualityRuleManager,
-                                 TaskEquality            minimalTaskEquality,
-                                 ITaskFactory            taskFactory,
-                                 ITaskBuilder            taskBuilder)
+    SequenceForTaskDetectionRule(TaskEquality minimalTaskEquality,
+                                 ITaskFactory taskFactory,
+                                 ITaskBuilder taskBuilder)
     {
         this.taskFactory = taskFactory;
         this.taskBuilder = taskBuilder;
         
-        this.taskComparator = new TaskComparator(taskEqualityRuleManager, minimalTaskEquality);
+        this.taskComparator = new TaskComparator(minimalTaskEquality);
     }
 
@@ -887,46 +888,26 @@
      */
     private static class TaskComparator implements SymbolComparator<ITaskInstance> {
-
+        
         /** */
-        private Comparer comparer;
+        private TaskEquality minimalNodeEquality;
 
         /** */
-        private Comparer lexicalComparer;
+        private transient Comparer comparer;
 
         /** */
-        private HashMap<Long, Boolean> equalityBuffer = new HashMap<Long, Boolean>();
+        private transient Comparer lexicalComparer;
 
         /** */
-        private HashMap<Long, Boolean> lexicalEqualityBuffer;
+        private transient HashMap<Long, Boolean> equalityBuffer = new HashMap<Long, Boolean>();
+
+        /** */
+        private transient HashMap<Long, Boolean> lexicalEqualityBuffer;
 
         /**
          *
          */
-        public TaskComparator(TaskEqualityRuleManager taskEqualityRuleManager,
-                              TaskEquality            minimalNodeEquality)
-        {
-            super();
-            
-            if (minimalNodeEquality == TaskEquality.LEXICALLY_EQUAL) {
-                comparer = new LexicalComparer(taskEqualityRuleManager);
-            }
-            else if (minimalNodeEquality == TaskEquality.SYNTACTICALLY_EQUAL) {
-                comparer = new SyntacticalComparer(taskEqualityRuleManager);
-            }
-            else if (minimalNodeEquality == TaskEquality.SEMANTICALLY_EQUAL) {
-                comparer = new SemanticalComparer(taskEqualityRuleManager);
-            }
-            else {
-                comparer = new DefaultComparer(taskEqualityRuleManager, minimalNodeEquality);
-            }
-            
-            if (minimalNodeEquality == TaskEquality.LEXICALLY_EQUAL) {
-                lexicalComparer = comparer;
-                lexicalEqualityBuffer = equalityBuffer;
-            }
-            else {
-                lexicalComparer = new LexicalComparer(taskEqualityRuleManager);
-                lexicalEqualityBuffer = new HashMap<Long, Boolean>();
-            }
+        public TaskComparator(TaskEquality minimalNodeEquality) {
+            this.minimalNodeEquality = minimalNodeEquality;
+            init();
         }
 
@@ -991,4 +972,41 @@
             return result;
         }
+        
+        /**
+         * 
+         */
+        private void init() {
+            if (minimalNodeEquality == TaskEquality.LEXICALLY_EQUAL) {
+                comparer = new LexicalComparer();
+            }
+            else if (minimalNodeEquality == TaskEquality.SYNTACTICALLY_EQUAL) {
+                comparer = new SyntacticalComparer();
+            }
+            else if (minimalNodeEquality == TaskEquality.SEMANTICALLY_EQUAL) {
+                comparer = new SemanticalComparer();
+            }
+            else {
+                comparer = new DefaultComparer(this.minimalNodeEquality);
+            }
+            
+            if (minimalNodeEquality == TaskEquality.LEXICALLY_EQUAL) {
+                lexicalComparer = comparer;
+                lexicalEqualityBuffer = equalityBuffer;
+            }
+            else {
+                lexicalComparer = new LexicalComparer();
+                lexicalEqualityBuffer = new HashMap<Long, Boolean>();
+            }
+        }
+        
+        /**
+         * <p>
+         * deserialize this object and reinitialize the buffers
+         * </p>
+         */
+        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+            in.defaultReadObject();
+            init();
+        }
     }
 
@@ -1010,22 +1028,8 @@
         
         /**
-         * <p>
-         * the task equality manager needed for comparing tasks with each other
-         * </p>
-         */
-        private TaskEqualityRuleManager taskEqualityRuleManager;
-        
-        /**
-         *
-         */
-        public LexicalComparer(TaskEqualityRuleManager taskEqualityRuleManager) {
-           this.taskEqualityRuleManager = taskEqualityRuleManager;
-        }
-        
-        /**
          * 
          */
         public boolean compare(ITask task1, ITask task2) {
-            return taskEqualityRuleManager.areLexicallyEqual(task1, task2);
+            return TaskEqualityRuleManager.getInstance().areLexicallyEqual(task1, task2);
         }
     }
@@ -1037,22 +1041,8 @@
         
         /**
-         * <p>
-         * the task equality manager needed for comparing tasks with each other
-         * </p>
-         */
-        private TaskEqualityRuleManager taskEqualityRuleManager;
-        
-        /**
-         *
-         */
-        public SyntacticalComparer(TaskEqualityRuleManager taskEqualityRuleManager) {
-           this.taskEqualityRuleManager = taskEqualityRuleManager;
-        }
-        
-        /**
          * 
          */
         public boolean compare(ITask task1, ITask task2) {
-            return taskEqualityRuleManager.areSyntacticallyEqual(task1, task2);
+            return TaskEqualityRuleManager.getInstance().areSyntacticallyEqual(task1, task2);
         }
     }
@@ -1064,22 +1054,8 @@
         
         /**
-         * <p>
-         * the task equality manager needed for comparing tasks with each other
-         * </p>
-         */
-        private TaskEqualityRuleManager taskEqualityRuleManager;
-        
-        /**
-         *
-         */
-        public SemanticalComparer(TaskEqualityRuleManager taskEqualityRuleManager) {
-           this.taskEqualityRuleManager = taskEqualityRuleManager;
-        }
-        
-        /**
          * 
          */
         public boolean compare(ITask task1, ITask task2) {
-            return taskEqualityRuleManager.areSemanticallyEqual(task1, task2);
+            return TaskEqualityRuleManager.getInstance().areSemanticallyEqual(task1, task2);
         }
     }
@@ -1090,11 +1066,4 @@
     private static class DefaultComparer implements Comparer {
         
-        /**
-         * <p>
-         * the task equality manager needed for comparing tasks with each other
-         * </p>
-         */
-        private TaskEqualityRuleManager taskEqualityRuleManager;
-
         /**
          * <p>
@@ -1107,8 +1076,5 @@
          *
          */
-        public DefaultComparer(TaskEqualityRuleManager taskEqualityRuleManager,
-                               TaskEquality            minimalNodeEquality)
-        {
-           this.taskEqualityRuleManager = taskEqualityRuleManager;
+        public DefaultComparer(TaskEquality minimalNodeEquality) {
            this.minimalNodeEquality = minimalNodeEquality;
         }
@@ -1118,5 +1084,6 @@
          */
         public boolean compare(ITask task1, ITask task2) {
-            return taskEqualityRuleManager.areAtLeastEqual(task1, task2, minimalNodeEquality);
+            return TaskEqualityRuleManager.getInstance().areAtLeastEqual
+                (task1, task2, minimalNodeEquality);
         }
     }
Index: trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java
===================================================================
--- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java	(revision 1188)
+++ trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java	(revision 1189)
@@ -23,5 +23,4 @@
 import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
-import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEqualityRuleManager;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
@@ -90,11 +89,4 @@
     /**
      * <p>
-     * the task equality manager needed by the rules to compare tasks with each other
-     * </p>
-     */
-    private TaskEqualityRuleManager taskEqualityRuleManager;
-
-    /**
-     * <p>
      * the task factory to be used during rule application
      * </p>
@@ -130,6 +122,4 @@
      * </p>
      * 
-     * @param taskEqualityRuleManager the task equality rule manager to be used by the known rules
-     *                                for task comparison during rule application
      * @param taskFactory             the task factory to be used for instantiating new task tree
      *                                tasks during rule application
@@ -137,10 +127,6 @@
      *                                with each other during rule application
      */
-    public TemporalRelationshipRuleManager(TaskEqualityRuleManager taskEqualityRuleManager,
-                                           ITaskFactory            taskFactory,
-                                           ITaskBuilder            taskBuilder)
-    {
+    public TemporalRelationshipRuleManager(ITaskFactory taskFactory, ITaskBuilder taskBuilder) {
         super();
-        this.taskEqualityRuleManager = taskEqualityRuleManager;
         this.taskFactory = taskFactory;
         this.taskBuilder = taskBuilder;
@@ -162,24 +148,18 @@
         sessionScopeRules = new ISessionScopeRule[] {
             new SequenceForTaskDetectionRule
-                (taskEqualityRuleManager, TaskEquality.SEMANTICALLY_EQUAL,
-                 taskFactory, taskBuilder),
+                (TaskEquality.SEMANTICALLY_EQUAL, taskFactory, taskBuilder),
             /*new DefaultTaskSequenceDetectionRule
-                (taskEqualityRuleManager, NodeEquality.SYNTACTICALLY_EQUAL,
-                 taskFactory, taskTreeBuilder),
+                (NodeEquality.SYNTACTICALLY_EQUAL, taskFactory, taskTreeBuilder),
             new DefaultTaskSequenceDetectionRule
-                (taskEqualityRuleManager, NodeEquality.LEXICALLY_EQUAL,
-                 taskFactory, taskTreeBuilder),*/
+                (NodeEquality.LEXICALLY_EQUAL, taskFactory, taskTreeBuilder),*/
             /*new TreeScopeWrapperRule
                 (new DefaultIterationDetectionRule
-                    (taskEqualityRuleManager, NodeEquality.LEXICALLY_EQUAL,
-                     taskFactory, taskTreeBuilder)),
+                    (NodeEquality.LEXICALLY_EQUAL, taskFactory, taskTreeBuilder)),
             new TreeScopeWrapperRule
                 (new DefaultIterationDetectionRule
-                    (taskEqualityRuleManager, NodeEquality.SYNTACTICALLY_EQUAL,
-                     taskFactory, taskTreeBuilder)),
+                    (NodeEquality.SYNTACTICALLY_EQUAL, taskFactory, taskTreeBuilder)),
             new TreeScopeWrapperRule
                 (new DefaultIterationDetectionRule
-                    (taskEqualityRuleManager, NodeEquality.SEMANTICALLY_EQUAL,
-                     taskFactory, taskTreeBuilder))*/
+                    (NodeEquality.SEMANTICALLY_EQUAL, taskFactory, taskTreeBuilder))*/
         };
         
@@ -189,5 +169,5 @@
             //new SequenceOnGuiElementDetectionRule(taskFactory, taskTreeBuilder),
             //new EventSequenceOnSameTargetDetectionRule(taskFactory, taskTreeBuilder),
-            //new TrackBarSelectionDetectionRule(taskEqualityRuleManager, taskFactory, taskBuilder),
+            //new TrackBarSelectionDetectionRule(taskFactory, taskBuilder),
             //new DefaultGuiEventSequenceDetectionRule(taskFactory, taskTreeBuilder),
         };
