Index: trunk/autoquest-plugin-http/src/main/java/de/ugoe/cs/autoquest/plugin/http/eventcore/SimpleSOAPEventType.java
===================================================================
--- trunk/autoquest-plugin-http/src/main/java/de/ugoe/cs/autoquest/plugin/http/eventcore/SimpleSOAPEventType.java	(revision 1993)
+++ trunk/autoquest-plugin-http/src/main/java/de/ugoe/cs/autoquest/plugin/http/eventcore/SimpleSOAPEventType.java	(revision 1994)
@@ -17,4 +17,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -91,39 +94,10 @@
      * reference to the {@link EqualSOAPDataMap} associated with the sequence this event belongs to.
      */
-    private final EqualSOAPDataMap equalBodyMap;
-
-    /**
-     * <p>
-     * Constructor. Creates a new SimpleSOAPEventType.
-     * </p>
-     * 
-     */
-    public SimpleSOAPEventType(String calledMethod,
-                               String serviceName,
-                               String clientName,
-                               Element soapMsgBody)
-    {
-        this(calledMethod, serviceName, clientName, soapMsgBody, null, CallType.REQUEST);
-    }
-
-    /**
-     * <p>
-     * Constructor. Creates a new SimpleSOAPEventType with a EqualSOAPDATAMap.
-     * </p>
-     * 
-     */
-    public SimpleSOAPEventType(String calledMethod,
-                               String serviceName,
-                               String clientName,
-                               Element soapMsgBody,
-                               EqualSOAPDataMap equalRequestsMap)
-    {
-        this(calledMethod, serviceName, clientName, soapMsgBody, equalRequestsMap,
-             CallType.REQUEST);
-    }
-
-    /**
-     * <p>
-     * Constructor. Creates a new SimpleSOAPEventType with a EqualSOAPDATAMap.
+    private transient EqualSOAPDataMap equalBodyMap;
+
+    /**
+     * <p>
+     * Constructor. Creates a new SimpleSOAPEventType with a EqualSOAPDATAMap. Should always call
+     * initEqualBodyMap afterwards.
      * </p>
      * 
@@ -151,9 +125,7 @@
         this.soapMsgBody = SOAPUtils.getSerialization(soapMsgBody);
         this.callType = callType;
-
-        // this must be the last part of the constructor and only be called after all variables are
-        // initialized
-        if (equalRequestsMap != null) {
-            equalRequestsMap.add(this, this.soapMsgBody);
+        
+        if (equalBodyMap != null) {
+            equalBodyMap.add(this, this.soapMsgBody);
         }
     }
@@ -256,5 +228,17 @@
         }
         else if (obj instanceof SimpleSOAPEventType) {
-            return callType.equals(((SimpleSOAPEventType) obj).callType) &&
+            boolean callTypesEqual = true;
+            if (callType == null) {
+                if (((SimpleSOAPEventType) obj).callType == null) {
+                    callTypesEqual = true;
+                }
+                else {
+                    callTypesEqual = false;
+                }
+            }
+            else {
+                callTypesEqual = callType.equals(((SimpleSOAPEventType) obj).callType);
+            }
+            return callTypesEqual &&
                 HTTPUtils.equals(calledMethod, ((SimpleSOAPEventType) obj).calledMethod) &&
                 HTTPUtils.equals(serviceName, ((SimpleSOAPEventType) obj).serviceName) &&
@@ -273,6 +257,12 @@
     @Override
     public int hashCode() {
-        return callType.hashCode() + calledMethod.hashCode() + serviceName.hashCode() +
-            clientName.hashCode();
+        int hashCode = 13;
+        if (callType != null) {
+            hashCode += callType.hashCode();
+        }
+        if (calledMethod == null || serviceName == null || clientName == null) {
+            System.out.print("fu!");
+        }
+        return hashCode + calledMethod.hashCode() + serviceName.hashCode() + clientName.hashCode();
     }
 
@@ -296,3 +286,18 @@
         }
     }
+    
+    private void writeObject(ObjectOutputStream out) throws IOException {
+        out.defaultWriteObject();
+        out.writeObject(equalBodyMap);
+    }
+
+    private void readObject(ObjectInputStream in)
+        throws ClassNotFoundException, IOException
+    {
+        in.defaultReadObject();
+        equalBodyMap = (EqualSOAPDataMap) in.readObject();
+        if ( equalBodyMap == null) {
+            throw new InvalidObjectException("null");
+        }
+    }
 }
