diff --git a/src/template/ast/Collections.tt b/src/template/ast/Collections.tt
index dda5d29c0cb19d245d93f8c8c7b5064edd4fcfcb..b9e44fe5ff8cd7ad2f377bdaaf5f01c903f49f1e 100644
--- a/src/template/ast/Collections.tt
+++ b/src/template/ast/Collections.tt
@@ -234,15 +234,17 @@ $endif
 ]]
 
 CollEq.contributeStatement [[
-$include(CollEq.traceContributionBegin)
+    $include(CollEq.traceContributionBegin)
 $if(#hasCondition)
     if (#getCondition) {
       $include(CollEq.addValueToCollection)
+      $include(CollEq.traceContributionEnd)
     }
 $else
     $include(CollEq.addValueToCollection)
+    $include(CollEq.traceContributionEnd)
 $endif
-$include(CollEq.traceContributionEnd)
+    $include(CollEq.traceContributionEnd)
 ]]
 
 CollEq.addValueToCollection [[
diff --git a/src/template/trace/TraceHooks.tt b/src/template/trace/TraceHooks.tt
index e99d06e2dcb7847ca91ae034e7eecca5c359891c..3140582bd09ce7e1c0818dcaac02d9f020cae199 100644
--- a/src/template/trace/TraceHooks.tt
+++ b/src/template/trace/TraceHooks.tt
@@ -323,14 +323,20 @@ state().trace().flushAttr(this, "#hostClassName.#signatureJavaStyle", "", #(sign
 $endif
 ]]
 
-CollEq.traceContributionBegin [[
+CollEq.traceContributionCheckBegin [[
 $if (TraceColl)
-state().trace().contributionBegin(this, "#collectionId");
+state().trace().contributionCheckBegin(this, "#collectionId", "#getCondition");
 $endif
 ]]
 
-CollEq.traceContributionEnd [[
+CollEq.traceContributionCheckEnd [[
 $if (TraceColl)
-state().trace().contributionEnd(this, "#collectionId");
+state().trace().contributionCheckEnd(this, "#collectionId", "#getCondition");
+$endif
+]]
+
+CollEq.traceContributionCheckMatch [[
+$if (TraceColl)
+state().trace().contributionCheckMatch(this, "#collectionId", "#getCondition", "#getValue");
 $endif
 ]]
diff --git a/src/template/trace/Tracer.tt b/src/template/trace/Tracer.tt
index ee3b37d304ab987e5ad521b23d42339467b51003..7346ed001353445587eaaa57f98938e54b21901b 100644
--- a/src/template/trace/Tracer.tt
+++ b/src/template/trace/Tracer.tt
@@ -82,8 +82,9 @@ public static class Trace {
     INC_FLUSH_ATTR,
 
     // Flag: --tracing=coll
-    CONTRIBUTION_BEGIN,
-    CONTRIBUTION_END;
+    CONTRIBUTION_CHECK_BEGIN,
+    CONTRIBUTION_CHECK_MATCH,
+    CONTRIBUTION_CHECK_END;
   }
 
   /**
@@ -338,18 +339,26 @@ public static class Trace {
   }
 
   /**
-   * Trace that a contribution to a collection attribute begun.
+   * Trace that a contribution check to a collection attribute begun.
    */
-  public void contributionBegin($ASTNode node, String attr) {
-    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_BEGIN, node, attr, "", "");
+  public void contributioniCheckBegin($ASTNode node, String attr, String check) {
+    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_CHECK_BEGIN, node, attr, check, "");
   }
 
   /**
-   * Trace that a contribution to a collection attribute ended.
+   * Trace that a contribution check to a collection attribute ended.
    */
-  public void contributionEnd($ASTNode node, String attr) {
-    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_END, node, attr, "", "");
+  public void contributionCheckEnd($ASTNode node, String attr, String check) {
+    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_CHECK_END, node, attr, check, "");
   }
+
+  /**
+   * Trace that a contribution check to a collection attribute found a match.
+   */
+  public void contributionCheckMatch($ASTNode node, String attr, String check, Object value) {
+    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_CHECK_MATCH, node, attr, check, value);
+  }
+
 }
 $endif
 ]]