diff --git a/src/template/incremental/ASTChange.tt b/src/template/incremental/ASTChange.tt
index 3bd945d2971b4687a58ec18e974a1deff4c89215..53b7519163511d7cf3d73ebff8be38bf818f559c 100644
--- a/src/template/incremental/ASTChange.tt
+++ b/src/template/incremental/ASTChange.tt
@@ -63,6 +63,10 @@ $endif
 
 ASTNode.incHookSetChild1 = [[
 $if(IncrementalEnabled)
+$if (TraceFlush)
+Object flushIncToken = new Object();
+state().trace().flushIncStart(this, "setChild", flushIncToken);
+$endif
 
 $if(IncrementalLevelParam)
 if (state().disableDeps == 0 && !state().IN_ATTR_STORE_EVAL) {
@@ -162,7 +166,9 @@ $endif
 
 ASTNode.incHookSetChild5 = [[
 $if(IncrementalEnabled)
-
+$if (TraceFlush)
+state().trace().flushIncEnd(this, "setChild", flushIncToken);
+$endif
 $endif
 ]]
 
@@ -320,6 +326,10 @@ $endif
 
 TokenComponent.incHookSetToken = [[
 $if(IncrementalEnabled)
+$if (TraceFlush)
+Object flushIncToken = new Object();
+state().trace().flushIncStart(this, "set$(Id)", flushIncToken);
+$endif
 
 $if(IncrementalLevelParam)
 if (state().disableDeps == 0 && !state().IN_ATTR_STORE_EVAL) {
@@ -390,6 +400,8 @@ if (state().disableDeps == 0 && !(state().IN_COMPUTATION > 0)) {
 $endif
 
 }
-
+$if (TraceFlush)
+state().trace().flushIncEnd(this, "set$(Id)", flushIncToken);
+$endif
 $endif
 ]]
diff --git a/src/template/trace/Tracer.tt b/src/template/trace/Tracer.tt
index 0a90a599f74e7775c12397c6386d681cac74b15c..dfce9e9c136402a7f952006c4b7264da68b04150 100644
--- a/src/template/trace/Tracer.tt
+++ b/src/template/trace/Tracer.tt
@@ -79,7 +79,9 @@ public static class Trace {
     FLUSH_ATTR,
     FLUSH_REWRITE,
     FLUSH_REWRITE_INIT,
+    INC_FLUSH_START,
     INC_FLUSH_ATTR,
+    INC_FLUSH_END,
 
     // Flag: --tracing=coll
     CONTRIBUTION_CHECK_BEGIN,
@@ -341,6 +343,20 @@ public static class Trace {
     receiver.accept($StateClass.Trace.Event.INC_FLUSH_ATTR, node, attr, params, value);
   }
 
+  /**
+   * Trace that flushing done by incremental evaluation begun.
+   */
+  public void flushIncStart($ASTNode node, String child, Object value) {
+    receiver.accept($StateClass.Trace.Event.INC_FLUSH_START, node, child, "", value);
+  }
+
+  /**
+   * Trace that flushing done by incremental evaluation ended.
+   */
+  public void flushIncEnd($ASTNode node, String child, Object value) {
+    receiver.accept($StateClass.Trace.Event.INC_FLUSH_END, node, child, "", value);
+  }
+
   /**
    * Trace that a contribution check to a collection attribute begun.
    */