Index: trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/JFCTraceCorrector.java
===================================================================
--- trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/JFCTraceCorrector.java	(revision 833)
+++ trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/JFCTraceCorrector.java	(revision 834)
@@ -318,4 +318,5 @@
             currentSession.dump(outFile);
             currentSession = null;
+            allSources.clear();
         }
         else if (qName.equals("newsession")) {
@@ -324,4 +325,5 @@
             currentSession.dump(outFile);
             currentSession = null;
+            allSources.clear();
         }
         else if (qName.equals("event")) {
@@ -330,6 +332,5 @@
         }
         else if (qName.equals("source")) {
-            rememberSource(currentSource);
-            currentEvent.source = currentSource;
+            currentEvent.source = getUniqueSource(currentSource);
             currentSource = null;
         }
@@ -351,15 +352,22 @@
      * @param source the source to store
      */
-    private void rememberSource(Source source) {
+    private Source getUniqueSource(Source source) {
         String toStringValue = getToStringParam(source);
-        
-        List<Source> sources = allSources.get(toStringValue);
-        
-        if (sources == null) {
-            sources = new ArrayList<Source>();
-            allSources.put(toStringValue, sources);
-        }
-        
-        sources.add(source);
+
+        Source existingSource = findSource(toStringValue);
+        
+        if (existingSource == null) {
+            List<Source> sources = allSources.get(toStringValue);
+        
+            if (sources == null) {
+                sources = new ArrayList<Source>();
+                allSources.put(toStringValue, sources);
+            }
+            
+            sources.add(source);
+            existingSource = source;
+        }
+        
+        return existingSource;
     }
 
@@ -385,7 +393,8 @@
             for (Source candidate : candidates) {
                 if (toStringValue.equals(getToStringParam(candidate)) &&
-                        (candidate.components != null) && (candidate.components.size() > 0))
+                    (candidate.components != null) && (candidate.components.size() > 0))
                 {
                     existingSource = candidate;
+                    break;
                 }
             }
