RCPTT runtime reporting enhancements
diff --git a/core/org.eclipse.rcptt.core.ecl.core/META-INF/MANIFEST.MF b/core/org.eclipse.rcptt.core.ecl.core/META-INF/MANIFEST.MF
index d51533b..0ff319c 100644
--- a/core/org.eclipse.rcptt.core.ecl.core/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.rcptt.core.ecl.core/META-INF/MANIFEST.MF
@@ -20,6 +20,7 @@
  org.eclipse.rcptt.reporting;bundle-version="[2.2.0,3.0.0)";visibility:=reexport,
  org.eclipse.rcptt.tesla.ecl;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.rcptt.verifications;bundle-version="[2.2.0,3.0.0)",
- org.eclipse.rcptt.util;bundle-version="[2.2.0,3.0.0)"
+ org.eclipse.rcptt.util;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.rcptt.ecl.operations
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.rcptt.core.internal.ecl.core.Activator
diff --git a/core/org.eclipse.rcptt.core.ecl.core/src/org/eclipse/rcptt/core/internal/ecl/core/commands/EclCommandEventProvider.java b/core/org.eclipse.rcptt.core.ecl.core/src/org/eclipse/rcptt/core/internal/ecl/core/commands/EclCommandEventProvider.java
index 19c2d1a..1f07e5b 100644
--- a/core/org.eclipse.rcptt.core.ecl.core/src/org/eclipse/rcptt/core/internal/ecl/core/commands/EclCommandEventProvider.java
+++ b/core/org.eclipse.rcptt.core.ecl.core/src/org/eclipse/rcptt/core/internal/ecl/core/commands/EclCommandEventProvider.java
@@ -27,6 +27,7 @@
 import org.eclipse.rcptt.core.ecl.core.model.SetCommandsDelay;
 import org.eclipse.rcptt.core.ecl.core.model.SetQ7Features;
 import org.eclipse.rcptt.ecl.core.Command;
+import org.eclipse.rcptt.ecl.core.Foreach;
 import org.eclipse.rcptt.ecl.core.ISessionListener;
 import org.eclipse.rcptt.ecl.core.Pipeline;
 import org.eclipse.rcptt.ecl.core.RestoreState;
@@ -38,6 +39,8 @@
 import org.eclipse.rcptt.ecl.core.util.CommandToStringConverter;
 import org.eclipse.rcptt.ecl.gen.ast.AstExec;
 import org.eclipse.rcptt.ecl.internal.core.CorePlugin;
+import org.eclipse.rcptt.ecl.operations.Each;
+import org.eclipse.rcptt.ecl.operations.Repeat;
 import org.eclipse.rcptt.reporting.ItemKind;
 import org.eclipse.rcptt.reporting.Q7Info;
 import org.eclipse.rcptt.reporting.ReportingFactory;
@@ -71,11 +74,22 @@
 		if (isIgnoredCommand(command)) {
 			return;
 		}
+
 		String cmdName = buildName(command);
-		final INodeBuilder node = ReportManager.getCurrentReportNode().beginTask(cmdName);
+		INodeBuilder node;
+		INodeBuilder currentNode = ReportManager.getCurrentReportNode();
+		if (ReportHelper.isIterable(currentNode)) {
+			node = currentNode.appendTask(cmdName);
+		} else {
+			node = currentNode.beginTask(cmdName);
+		}
+
 		Q7Info info = ReportingFactory.eINSTANCE.createQ7Info();
 		info.setType(ItemKind.ECL_COMMAND);
 		ReportHelper.setInfo(node, info);
+		if (isIterableCommand(command)) {
+			ReportHelper.markIterable(node);
+		}
 		INodeBuilder previousValue = openNodes.putIfAbsent(command, node);
 		if (previousValue != null) {
 			throw new IllegalStateException("A node for command " + cmdName + " is already opened");
@@ -120,6 +134,12 @@
 				|| command instanceof ExecVerification;
 	}
 
+	private boolean isIterableCommand(Command command) {
+		return command instanceof Each
+				|| command instanceof Foreach
+				|| command instanceof Repeat;
+	}
+
 	public void endCommand(Command command, final IStatus status) {
 		if (isIgnoredCommand(command)) {
 			return;
diff --git a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/IQ7ReportConstants.java b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/IQ7ReportConstants.java
index fef7449..f36f043 100644
--- a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/IQ7ReportConstants.java
+++ b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/IQ7ReportConstants.java
@@ -18,4 +18,5 @@
 	public static final String ROOT_STATS = "q7.stats";
 	public static final String PROFILE_RAW = "q7.profile.raw";
 	public static final String AGENTID = "q7.execution.agentId";
+	public static final String ITERABLE = "q7.command.iterable";
 }
diff --git a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportHelper.java b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportHelper.java
index 74ba202..c4cd59f 100644
--- a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportHelper.java
+++ b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportHelper.java
@@ -16,8 +16,10 @@
 import org.eclipse.emf.common.util.EMap;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.rcptt.ecl.core.BoxedValue;
 import org.eclipse.rcptt.ecl.core.ProcessStatus;
 import org.eclipse.rcptt.ecl.internal.core.ProcessStatusConverter;
+import org.eclipse.rcptt.ecl.runtime.BoxedValues;
 import org.eclipse.rcptt.reporting.Q7Info;
 import org.eclipse.rcptt.reporting.ReportingFactory;
 import org.eclipse.rcptt.sherlock.core.INodeBuilder;
@@ -66,7 +68,6 @@
 			if (value == null && create) {
 				value = InfoFactory.eINSTANCE.createQ7WaitInfoRoot();
 				value.setStartTime(System.currentTimeMillis());
-				value.setTick(0); // Indicated current object index
 				node.getProperties().put(IQ7ReportConstants.ROOT_WAIT, value);
 			}
 			return (Q7WaitInfoRoot) value;
@@ -109,6 +110,14 @@
 		return ReportingFactory.eINSTANCE.createQ7Info();
 	}
 
+	public static void startWaitInfo(INodeBuilder node, final String kind, final String className) {
+		Q7WaitUtils.startInfo(kind, className, getWaitInfo(node));
+	}
+
+	public static void finishWaitInfo(INodeBuilder node, final String kind, final String className) {
+		Q7WaitUtils.finishInfo(kind, className, getWaitInfo(node));
+	}
+
 	public static void updateWaitInfo(INodeBuilder node, final String kind, final String className) {
 		Q7WaitUtils.updateInfo(kind, className, getWaitInfo(node));
 	}
@@ -158,4 +167,21 @@
 	public static void takeSnapshot(INodeBuilder node) {
 		EventProviderManager.getInstance().takeSnapshot(node);
 	}
+
+	public static boolean isIterable(INodeBuilder node) {
+		EObject eIsIterable = node.getProperty(IQ7ReportConstants.ITERABLE);
+		if (eIsIterable == null) {
+			return false;
+		}
+		assert eIsIterable instanceof BoxedValue;
+		Object oIsIterable = BoxedValues.unbox((BoxedValue) eIsIterable);
+
+		assert oIsIterable instanceof Boolean;
+		return ((Boolean) oIsIterable).booleanValue();
+	}
+
+	public static void markIterable(INodeBuilder node) {
+		node.setProperty(IQ7ReportConstants.ITERABLE, BoxedValues.box(true));
+	}
+
 }
diff --git a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportManager.java b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportManager.java
index e2af6c4..3a35c01 100644
--- a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportManager.java
+++ b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportManager.java
@@ -82,6 +82,11 @@
 		}
 
 		@Override
+		public INodeBuilder appendTask(String name) {
+			return null;
+		}
+
+		@Override
 		public void endTask() {
 		}
 
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoNode.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoNode.java
index 40b7321..33ccb4d 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoNode.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoNode.java
@@ -21,12 +21,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.InfoNode#getChildren <em>Children</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.InfoNode#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.InfoNode#getProperties <em>Properties</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getInfoNode()
  * @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoPackage.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoPackage.java
index db9185b..3c5e7ae 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoPackage.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoPackage.java
@@ -398,13 +398,31 @@
 	int Q7_WAIT_INFO__TICKS = 5;
 
 	/**
+	 * The feature id for the '<em><b>Duration</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int Q7_WAIT_INFO__DURATION = 6;
+
+	/**
+	 * The feature id for the '<em><b>Last Start Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int Q7_WAIT_INFO__LAST_START_TIME = 7;
+
+	/**
 	 * The number of structural features of the '<em>Q7 Wait Info</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int Q7_WAIT_INFO_FEATURE_COUNT = 6;
+	int Q7_WAIT_INFO_FEATURE_COUNT = 8;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl <em>Q7 Wait Info Root</em>}' class.
@@ -852,6 +870,28 @@
 	EAttribute getQ7WaitInfo_Ticks();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getDuration <em>Duration</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Duration</em>'.
+	 * @see org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getDuration()
+	 * @see #getQ7WaitInfo()
+	 * @generated
+	 */
+	EAttribute getQ7WaitInfo_Duration();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getLastStartTime <em>Last Start Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Last Start Time</em>'.
+	 * @see org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getLastStartTime()
+	 * @see #getQ7WaitInfo()
+	 * @generated
+	 */
+	EAttribute getQ7WaitInfo_LastStartTime();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot <em>Q7 Wait Info Root</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1213,6 +1253,20 @@
 		 */
 		EAttribute Q7_WAIT_INFO__TICKS = eINSTANCE.getQ7WaitInfo_Ticks();
 		/**
+		 * The meta object literal for the '<em><b>Duration</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute Q7_WAIT_INFO__DURATION = eINSTANCE.getQ7WaitInfo_Duration();
+		/**
+		 * The meta object literal for the '<em><b>Last Start Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute Q7_WAIT_INFO__LAST_START_TIME = eINSTANCE.getQ7WaitInfo_LastStartTime();
+		/**
 		 * The meta object literal for the '{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl <em>Q7 Wait Info Root</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/JobEntry.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/JobEntry.java
index 8d174b6..036e034 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/JobEntry.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/JobEntry.java
@@ -19,6 +19,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.JobEntry#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.JobEntry#getName <em>Name</em>}</li>
@@ -27,7 +28,6 @@
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.JobEntry#getRule <em>Rule</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.JobEntry#getRuleClass <em>Rule Class</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getJobEntry()
  * @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/NodeProperty.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/NodeProperty.java
index 59e3d6b..4293eed 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/NodeProperty.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/NodeProperty.java
@@ -19,11 +19,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.NodeProperty#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.NodeProperty#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getNodeProperty()
  * @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfo.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfo.java
index 0fade95..cdf0178 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfo.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfo.java
@@ -19,6 +19,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getStartTime <em>Start Time</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getEndTime <em>End Time</em>}</li>
@@ -26,8 +27,9 @@
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getClassId <em>Class Id</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getTypeId <em>Type Id</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getTicks <em>Ticks</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getDuration <em>Duration</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getLastStartTime <em>Last Start Time</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getQ7WaitInfo()
  * @model
@@ -190,4 +192,56 @@
 	 */
 	void setTicks(long value);
 
+	/**
+	 * Returns the value of the '<em><b>Duration</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Duration</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Duration</em>' attribute.
+	 * @see #setDuration(long)
+	 * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getQ7WaitInfo_Duration()
+	 * @model
+	 * @generated
+	 */
+	long getDuration();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getDuration <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Duration</em>' attribute.
+	 * @see #getDuration()
+	 * @generated
+	 */
+	void setDuration(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Last Start Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Last Start Time</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Last Start Time</em>' attribute.
+	 * @see #setLastStartTime(long)
+	 * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getQ7WaitInfo_LastStartTime()
+	 * @model
+	 * @generated
+	 */
+	long getLastStartTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getLastStartTime <em>Last Start Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Last Start Time</em>' attribute.
+	 * @see #getLastStartTime()
+	 * @generated
+	 */
+	void setLastStartTime(long value);
+
 } // Q7WaitInfo
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfoRoot.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfoRoot.java
index ed83813..548ebcb 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfoRoot.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfoRoot.java
@@ -21,6 +21,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot#getInfos <em>Infos</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot#getStartTime <em>Start Time</em>}</li>
@@ -29,7 +30,6 @@
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot#getTypesNames <em>Types Names</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot#getInnerClassMap <em>Inner Class Map</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getQ7WaitInfoRoot()
  * @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/StackTraceEntry.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/StackTraceEntry.java
index 9a49f13..a67614f 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/StackTraceEntry.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/StackTraceEntry.java
@@ -21,13 +21,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.StackTraceEntry#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.StackTraceEntry#getStackTrace <em>Stack Trace</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.StackTraceEntry#getThreadName <em>Thread Name</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.StackTraceEntry#getThreadClass <em>Thread Class</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getStackTraceEntry()
  * @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/AdvancedInformationImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/AdvancedInformationImpl.java
index f974166..c1578ca 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/AdvancedInformationImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/AdvancedInformationImpl.java
@@ -34,13 +34,13 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.AdvancedInformationImpl#getThreads <em>Threads</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.AdvancedInformationImpl#getJobs <em>Jobs</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.AdvancedInformationImpl#getMessage <em>Message</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.AdvancedInformationImpl#getNodes <em>Nodes</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoNodeImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoNodeImpl.java
index b07221e..fc5461d 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoNodeImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoNodeImpl.java
@@ -31,12 +31,12 @@
  * <em><b>Node</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.InfoNodeImpl#getChildren <em>Children</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.InfoNodeImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.InfoNodeImpl#getProperties <em>Properties</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoPackageImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoPackageImpl.java
index 0066916..6c2eaae 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoPackageImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoPackageImpl.java
@@ -435,6 +435,24 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getQ7WaitInfo_Duration() {
+		return (EAttribute)q7WaitInfoEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getQ7WaitInfo_LastStartTime() {
+		return (EAttribute)q7WaitInfoEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getQ7WaitInfoRoot() {
 		return q7WaitInfoRootEClass;
 	}
@@ -584,6 +602,8 @@
 		createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__CLASS_ID);
 		createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__TYPE_ID);
 		createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__TICKS);
+		createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__DURATION);
+		createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__LAST_START_TIME);
 
 		q7WaitInfoRootEClass = createEClass(Q7_WAIT_INFO_ROOT);
 		createEReference(q7WaitInfoRootEClass, Q7_WAIT_INFO_ROOT__INFOS);
@@ -664,6 +684,8 @@
 		initEAttribute(getQ7WaitInfo_ClassId(), ecorePackage.getEInt(), "classId", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getQ7WaitInfo_TypeId(), ecorePackage.getEInt(), "typeId", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getQ7WaitInfo_Ticks(), ecorePackage.getELong(), "ticks", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getQ7WaitInfo_Duration(), ecorePackage.getELong(), "duration", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getQ7WaitInfo_LastStartTime(), ecorePackage.getELong(), "lastStartTime", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(q7WaitInfoRootEClass, Q7WaitInfoRoot.class, "Q7WaitInfoRoot", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getQ7WaitInfoRoot_Infos(), this.getQ7WaitInfo(), null, "infos", null, 0, -1, Q7WaitInfoRoot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/JobEntryImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/JobEntryImpl.java
index 119c945..e712ba7 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/JobEntryImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/JobEntryImpl.java
@@ -26,6 +26,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.JobEntryImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.JobEntryImpl#getName <em>Name</em>}</li>
@@ -34,7 +35,6 @@
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.JobEntryImpl#getRule <em>Rule</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.JobEntryImpl#getRuleClass <em>Rule Class</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/NodePropertyImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/NodePropertyImpl.java
index 412b9e9..2638287 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/NodePropertyImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/NodePropertyImpl.java
@@ -26,11 +26,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.NodePropertyImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.NodePropertyImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoImpl.java
index 8a5c792..269c050 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoImpl.java
@@ -24,6 +24,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getStartTime <em>Start Time</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getEndTime <em>End Time</em>}</li>
@@ -31,8 +32,9 @@
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getClassId <em>Class Id</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getTypeId <em>Type Id</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getTicks <em>Ticks</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getDuration <em>Duration</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getLastStartTime <em>Last Start Time</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
@@ -158,6 +160,46 @@
 	protected long ticks = TICKS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDuration()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long DURATION_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDuration()
+	 * @generated
+	 * @ordered
+	 */
+	protected long duration = DURATION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLastStartTime() <em>Last Start Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLastStartTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long LAST_START_TIME_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getLastStartTime() <em>Last Start Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLastStartTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected long lastStartTime = LAST_START_TIME_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -307,6 +349,48 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public long getDuration() {
+		return duration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDuration(long newDuration) {
+		long oldDuration = duration;
+		duration = newDuration;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, InfoPackage.Q7_WAIT_INFO__DURATION, oldDuration, duration));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getLastStartTime() {
+		return lastStartTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLastStartTime(long newLastStartTime) {
+		long oldLastStartTime = lastStartTime;
+		lastStartTime = newLastStartTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, InfoPackage.Q7_WAIT_INFO__LAST_START_TIME, oldLastStartTime, lastStartTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
@@ -322,6 +406,10 @@
 				return getTypeId();
 			case InfoPackage.Q7_WAIT_INFO__TICKS:
 				return getTicks();
+			case InfoPackage.Q7_WAIT_INFO__DURATION:
+				return getDuration();
+			case InfoPackage.Q7_WAIT_INFO__LAST_START_TIME:
+				return getLastStartTime();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -352,6 +440,12 @@
 			case InfoPackage.Q7_WAIT_INFO__TICKS:
 				setTicks((Long)newValue);
 				return;
+			case InfoPackage.Q7_WAIT_INFO__DURATION:
+				setDuration((Long)newValue);
+				return;
+			case InfoPackage.Q7_WAIT_INFO__LAST_START_TIME:
+				setLastStartTime((Long)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -382,6 +476,12 @@
 			case InfoPackage.Q7_WAIT_INFO__TICKS:
 				setTicks(TICKS_EDEFAULT);
 				return;
+			case InfoPackage.Q7_WAIT_INFO__DURATION:
+				setDuration(DURATION_EDEFAULT);
+				return;
+			case InfoPackage.Q7_WAIT_INFO__LAST_START_TIME:
+				setLastStartTime(LAST_START_TIME_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -406,6 +506,10 @@
 				return typeId != TYPE_ID_EDEFAULT;
 			case InfoPackage.Q7_WAIT_INFO__TICKS:
 				return ticks != TICKS_EDEFAULT;
+			case InfoPackage.Q7_WAIT_INFO__DURATION:
+				return duration != DURATION_EDEFAULT;
+			case InfoPackage.Q7_WAIT_INFO__LAST_START_TIME:
+				return lastStartTime != LAST_START_TIME_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -432,6 +536,10 @@
 		result.append(typeId);
 		result.append(", ticks: ");
 		result.append(ticks);
+		result.append(", duration: ");
+		result.append(duration);
+		result.append(", lastStartTime: ");
+		result.append(lastStartTime);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoInnerClassMapImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoInnerClassMapImpl.java
index 3b165d0..7ea82c9 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoInnerClassMapImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoInnerClassMapImpl.java
@@ -29,11 +29,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoInnerClassMapImpl#getTypedKey <em>Key</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoInnerClassMapImpl#getTypedValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoRootImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoRootImpl.java
index b3366f4..e1f2fa9 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoRootImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoRootImpl.java
@@ -37,6 +37,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl#getInfos <em>Infos</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl#getStartTime <em>Start Time</em>}</li>
@@ -45,7 +46,6 @@
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl#getTypesNames <em>Types Names</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl#getInnerClassMap <em>Inner Class Map</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/StackTraceEntryImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/StackTraceEntryImpl.java
index e1612d3..74d7cef 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/StackTraceEntryImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/StackTraceEntryImpl.java
@@ -27,13 +27,13 @@
  * <em><b>Stack Trace Entry</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.StackTraceEntryImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.StackTraceEntryImpl#getStackTrace <em>Stack Trace</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.StackTraceEntryImpl#getThreadName <em>Thread Name</em>}</li>
  *   <li>{@link org.eclipse.rcptt.tesla.core.info.impl.StackTraceEntryImpl#getThreadClass <em>Thread Class</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/core/org.eclipse.rcptt.tesla.core/models/info.ecore b/core/org.eclipse.rcptt.tesla.core/models/info.ecore
index a2abe72..1cf6ef2 100644
--- a/core/org.eclipse.rcptt.tesla.core/models/info.ecore
+++ b/core/org.eclipse.rcptt.tesla.core/models/info.ecore
@@ -43,6 +43,8 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="classId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="ticks" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="duration" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lastStartTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Q7WaitInfoRoot">
     <eStructuralFeatures xsi:type="ecore:EReference" name="infos" upperBound="-1"
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/Q7WaitUtils.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/Q7WaitUtils.java
index 10dc66f..6d69951 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/Q7WaitUtils.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/Q7WaitUtils.java
@@ -12,89 +12,133 @@
 
 import java.util.List;
 
-import org.eclipse.emf.common.util.EList;
-
 import org.eclipse.rcptt.tesla.core.info.InfoFactory;
 import org.eclipse.rcptt.tesla.core.info.Q7WaitInfo;
 import org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot;
 
 public class Q7WaitUtils {
 
-	public static void updateInfo(String kind, String className, Q7WaitInfoRoot info) {
-		if (info == null || className == null) {
+	public static void startInfo(String kind, String className, Q7WaitInfoRoot root) {
+		if (root == null || className == null) {
 			return;
 		}
-		synchronized (info) {
-			// Update class name if contains $ to contain method name instead
-			int pos = className.indexOf("$");
-			if (pos != -1) {
-				String methodValue = info.getInnerClassMap().get(className);
-				if (methodValue == null) {
-					StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
-					String clName = className.substring(0, pos);
-					for (int i1 = 0; i1 < stackTrace.length; i1++) {
-
-						if (stackTrace[i1].getClassName().startsWith(clName)) {
-							methodValue = stackTrace[i1].getMethodName() + ":"
-									+ stackTrace[i1].getLineNumber();
-							break;
-						}
-						if (stackTrace[i1].getClassName().equals("org.eclipse.rcptt.tesla.internal.ui.player.SWTUIPlayer")
-								&& stackTrace[i1].getMethodName().equals("exec")) {
-							methodValue = stackTrace[i1 + 1].getMethodName() + ":"
-									+ stackTrace[i1 + 1].getLineNumber();
-							break;
-						}
-					}
-					if (methodValue != null) {
-						info.getInnerClassMap().put(className, /*className.substring(0, pos) + "." + */methodValue);
-					}
-				}
-			}
-
-			int classId = getID(className, info.getClassNames());
-			int typeId = getID(kind, info.getTypesNames());
-
+		synchronized (root) {
+			updateClassName(className, root);
 			long currentTime = System.currentTimeMillis();
-			long currentTick = info.getTick();
-			if (classId != -1 && typeId != -1) {
-				EList<Q7WaitInfo> infos = info.getInfos();
-				for (Q7WaitInfo i : infos) {
-					if (i.getTypeId() == typeId && i.getClassId() == classId) {
-						long lastTick = i.getLastTick();
-						if (lastTick == currentTick || lastTick == currentTick - 1
-								|| i.getEndTime() == currentTime) {
-							// This is previous execution counter here
-							i.setEndTime(currentTime);
-							i.setLastTick(currentTick);
-							if (lastTick != currentTick) {
-								i.setTicks(i.getTicks() + 1);
-							}
-							return;
-						}
-					}
+
+			Q7WaitInfo info = findInfo(kind, className, root);
+			if (info != null) {
+				if (infoNodeIsOpen(info)) {
+					return;
 				}
+				root.setTick(root.getTick() + 1);
+				info.setLastTick(root.getTick());
+				info.setLastStartTime(currentTime);
+				info.setTicks(info.getTicks() + 1);
+				return;
 			}
-			if (classId == -1) {
-				classId = info.getClassNames().size();
-				info.getClassNames().add(className);
+			info = createInfo(kind, className, root);
+			info.setStartTime(currentTime);
+			info.setLastStartTime(currentTime);
+		}
+	}
+
+	public static void finishInfo(String kind, String className, Q7WaitInfoRoot root) {
+		if (root == null || className == null) {
+			return;
+		}
+		synchronized (root) {
+			updateClassName(className, root);
+			long currentTime = System.currentTimeMillis();
+
+			Q7WaitInfo info = findInfo(kind, className, root);
+			if (info != null) {
+				info.setEndTime(currentTime);
+				long duration = info.getEndTime() - info.getLastStartTime();
+				info.setDuration(info.getDuration() + duration);
+				return;
 			}
-			if (typeId == -1) {
-				typeId = info.getTypesNames().size();
-				info.getTypesNames().add(kind);
+			info = createInfo(kind, className, root);
+			info.setStartTime(root.getStartTime());
+			info.setLastStartTime(currentTime);
+			info.setEndTime(currentTime);
+		}
+	}
+
+	public static void updateInfo(String kind, String className, Q7WaitInfoRoot root) {
+		if (root == null || className == null) {
+			return;
+		}
+		synchronized (root) {
+			updateClassName(className, root);
+			long currentTick = root.getTick();
+			long currentTime = System.currentTimeMillis();
+
+			Q7WaitInfo info = findInfo(kind, className, root);
+			if (info != null) {
+				long lastTick = info.getLastTick();
+				if (lastTick == currentTick) {
+					// This is previous execution counter here
+					info.setEndTime(currentTime);
+					long duration = info.getEndTime() - info.getLastStartTime();
+					info.setDuration(info.getDuration() + duration);
+				}
+				root.setTick(root.getTick() + 1);
+				info.setLastTick(root.getTick());
+				info.setLastStartTime(currentTime);
+				return;
 			}
 
-			Q7WaitInfo i = InfoFactory.eINSTANCE.createQ7WaitInfo();
-			info.getInfos().add(i);
-			i.setTypeId(typeId);
-			i.setClassId(classId);
-			i.setStartTime(currentTime);
-			i.setTicks(1);
-			i.setLastTick(currentTick);// Set current counter
-			i.setEndTime(i.getStartTime());
+			info = createInfo(kind, className, root);
+			info.setStartTime(currentTime);
+			info.setLastStartTime(currentTime);
+			info.setEndTime(currentTime);
 		}
 	}
 
+	private static Q7WaitInfo findInfo(String kind, String className, Q7WaitInfoRoot root) {
+		int typeId = getID(kind, root.getTypesNames());
+		int classId = getID(className, root.getClassNames());
+		if (classId == -1 || typeId == -1) {
+			return null;
+		}
+
+		for (Q7WaitInfo info : root.getInfos()) {
+			if (info.getTypeId() == typeId && info.getClassId() == classId) {
+				return info;
+			}
+		}
+		return null;
+	}
+
+	private static Q7WaitInfo createInfo(String kind, String className, Q7WaitInfoRoot root) {
+		int typeId = getID(kind, root.getTypesNames());
+		int classId = getID(className, root.getClassNames());
+
+		if (typeId == -1) {
+			typeId = root.getTypesNames().size();
+			root.getTypesNames().add(kind);
+		}
+		if (classId == -1) {
+			classId = root.getClassNames().size();
+			root.getClassNames().add(className);
+		}
+
+		Q7WaitInfo info = InfoFactory.eINSTANCE.createQ7WaitInfo();
+		root.getInfos().add(info);
+		root.setTick(root.getTick() + 1);
+
+		info.setTypeId(typeId);
+		info.setClassId(classId);
+		info.setTicks(1);
+		info.setLastTick(root.getTick());
+		return info;
+	}
+
+	private static boolean infoNodeIsOpen(Q7WaitInfo info) {
+		return info.getLastStartTime() > info.getEndTime();
+	}
+
 	private static int getID(String kind, List<String> values) {
 		for (int i = 0; i < values.size(); i++) {
 			String typeName = values.get(i);
@@ -105,4 +149,32 @@
 		return -1;
 	}
 
+	private static void updateClassName(String className, Q7WaitInfoRoot info) {
+		// Update class name if contains $ to contain method name instead
+		int pos = className.indexOf("$");
+		if (pos != -1) {
+			String methodValue = info.getInnerClassMap().get(className);
+			if (methodValue == null) {
+				StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
+				String clName = className.substring(0, pos);
+				for (int i1 = 0; i1 < stackTrace.length; i1++) {
+					if (stackTrace[i1].getClassName().startsWith(clName)) {
+						methodValue = stackTrace[i1].getMethodName() + ":"
+								+ stackTrace[i1].getLineNumber();
+						break;
+					}
+					if (stackTrace[i1].getClassName().equals("org.eclipse.rcptt.tesla.internal.ui.player.SWTUIPlayer")
+							&& stackTrace[i1].getMethodName().equals("exec")) {
+						methodValue = stackTrace[i1 + 1].getMethodName() + ":"
+								+ stackTrace[i1 + 1].getLineNumber();
+						break;
+					}
+				}
+				if (methodValue != null) {
+					info.getInnerClassMap().put(className, /* className.substring(0, pos) + "." + */methodValue);
+				}
+			}
+		}
+	}
+
 }
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
index 1349c89..c9c9d29 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
@@ -59,6 +59,7 @@
 	public final static String REPORT_LOGGING_SIZE_OF_ROTATION_PART = "com.xored.reporting.logging.rotation.size";
 	public final static String REPORT_INCLUDE_IGNORED_WAIT_DETAILS = "com.xored.reporting.include.ignored.wait.details";
 	public final static String REPORT_PASSED_WAIT_DETAILS = "com.xored.reporting.include.passed.wait.details";
+	public final static String REPORT_INCLUDE_ECLIPSE_METHODS_WAIT_DETAILS = "com.xored.reporting.include.eclipse.wait.details";
 
 	// Code:
 	private static TeslaFeatures features;
@@ -151,6 +152,15 @@
 						"RCPTT widget wait details will be also added to passed reports as separate section")
 				.editable(true).showIn(ADV_OPTIONS);
 
+		option(REPORT_INCLUDE_ECLIPSE_METHODS_WAIT_DETAILS).category(CAT_REPORTING)
+				.name("Include eclipse methods into 'wait details' info")
+				.value("false")
+				.defaultValue("false")
+				.values(AbstractFeatureManager.BOOLEAN_VALUES)
+				.description(
+						"Eclipse methods will be added into 'wait details' info")
+				.editable(true).showIn(ADV_OPTIONS);
+
 		option(RECORD_ALL_SELECTIONS)
 				.name("Record all selections for tables and trees")
 				.value("false")
@@ -229,6 +239,10 @@
 		return getInstance().isTrue(TeslaFeatures.REPORT_PASSED_WAIT_DETAILS);
 	}
 
+	public static boolean isIncludeEclipseMethodsWaitDetails() {
+		return getInstance().isTrue(TeslaFeatures.REPORT_INCLUDE_ECLIPSE_METHODS_WAIT_DETAILS);
+	}
+
 	public static boolean isProtectedEnabled() {
 		return getInstance().isTrue(ENABLE_PROTECTED_MEMBERS);
 	}
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/internal/core/AbstractTeslaClient.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/internal/core/AbstractTeslaClient.java
index 628e0b3..6be162e 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/internal/core/AbstractTeslaClient.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/internal/core/AbstractTeslaClient.java
@@ -133,7 +133,7 @@
 
 	public void hasEvent(String kind, String name, Q7WaitInfoRoot info) {
 		hasEvents.incrementAndGet();
-		Q7WaitUtils.updateInfo(kind, name, info);
+		Q7WaitUtils.startInfo(kind, name, info);
 	}
 
 	protected boolean canProceed(Context context, Q7WaitInfoRoot info) {
diff --git a/core/org.eclipse.rcptt.util/src/org/eclipse/rcptt/util/TableTreeItemPathUtil.java b/core/org.eclipse.rcptt.util/src/org/eclipse/rcptt/util/TableTreeItemPathUtil.java
index 5246c16..c081465 100644
--- a/core/org.eclipse.rcptt.util/src/org/eclipse/rcptt/util/TableTreeItemPathUtil.java
+++ b/core/org.eclipse.rcptt.util/src/org/eclipse/rcptt/util/TableTreeItemPathUtil.java
@@ -16,19 +16,23 @@
 import java.util.regex.Pattern;
 
 public class TableTreeItemPathUtil {
+
+	public static final String COLUMN_DELIMITER = "#@&#@";
+	private static final String COLUMN_ITEM_REGEX = String
+			.format("(.*?)%s(.*)%s", COLUMN_DELIMITER, COLUMN_DELIMITER);
 	private static final Pattern columnItemPattern = Pattern
-			.compile("(.*?)\\#(.*)\\#");
+			.compile(COLUMN_ITEM_REGEX);
 
 	public static String appendSegmentColumnName(String segment, String columnName) {
 		if (findColumnName(segment) == null && columnName != null) {
-			return segment + "#" + columnName + "#";
+			return segment + COLUMN_DELIMITER + columnName + COLUMN_DELIMITER;
 		}
 		return segment;
 	}
 
 	public static String getAppendingColumnName(String columnName) {
 		if (columnName != null) {
-			return "#" + columnName + "#";
+			return COLUMN_DELIMITER + columnName + COLUMN_DELIMITER;
 		} else {
 			return "";
 		}
@@ -108,4 +112,5 @@
 		}
 		return m.group(1);
 	}
+
 }
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore b/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
index 98cbaf0..c72b242 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
@@ -59,6 +59,7 @@
       <details key="example" value="// Implicit item: sent to an input pipe of inner script&#xA;list-launch-configurations | foreach { get name | log }&#xA;&#xA;// Explicit item:&#xA;list-launch-configuration | foreach [val item] {&#xA;   $item | get-name | log&#xA;}"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="item" eType="#//Val" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Val"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="do" eType="#//Command"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="input" unique="false" upperBound="-1"
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
index 5ad23b5..3275ccd 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
@@ -590,13 +590,22 @@
 	int FOREACH__ITEM = COMMAND_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FOREACH__INDEX = COMMAND_FEATURE_COUNT + 1;
+
+	/**
 	 * The feature id for the '<em><b>Do</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int FOREACH__DO = COMMAND_FEATURE_COUNT + 1;
+	int FOREACH__DO = COMMAND_FEATURE_COUNT + 2;
 
 	/**
 	 * The feature id for the '<em><b>Input</b></em>' reference list.
@@ -605,7 +614,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int FOREACH__INPUT = COMMAND_FEATURE_COUNT + 2;
+	int FOREACH__INPUT = COMMAND_FEATURE_COUNT + 3;
 
 	/**
 	 * The number of structural features of the '<em>Foreach</em>' class.
@@ -614,7 +623,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int FOREACH_FEATURE_COUNT = COMMAND_FEATURE_COUNT + 3;
+	int FOREACH_FEATURE_COUNT = COMMAND_FEATURE_COUNT + 4;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.rcptt.ecl.core.impl.ProcessStatusImpl <em>Process Status</em>}' class.
@@ -2414,6 +2423,17 @@
 	EReference getForeach_Item();
 
 	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.rcptt.ecl.core.Foreach#getIndex <em>Index</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Index</em>'.
+	 * @see org.eclipse.rcptt.ecl.core.Foreach#getIndex()
+	 * @see #getForeach()
+	 * @generated
+	 */
+	EReference getForeach_Index();
+
+	/**
 	 * Returns the meta object for the containment reference '{@link org.eclipse.rcptt.ecl.core.Foreach#getDo <em>Do</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3752,6 +3772,14 @@
 		EReference FOREACH__ITEM = eINSTANCE.getForeach_Item();
 
 		/**
+		 * The meta object literal for the '<em><b>Index</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FOREACH__INDEX = eINSTANCE.getForeach_Index();
+
+		/**
 		 * The meta object literal for the '<em><b>Do</b></em>' containment reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Foreach.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Foreach.java
index 3436312..ccbdb62 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Foreach.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Foreach.java
@@ -24,6 +24,7 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.ecl.core.Foreach#getItem <em>Item</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.ecl.core.Foreach#getIndex <em>Index</em>}</li>
  *   <li>{@link org.eclipse.rcptt.ecl.core.Foreach#getDo <em>Do</em>}</li>
  *   <li>{@link org.eclipse.rcptt.ecl.core.Foreach#getInput <em>Input</em>}</li>
  * </ul>
@@ -60,6 +61,32 @@
 	void setItem(Val value);
 
 	/**
+	 * Returns the value of the '<em><b>Index</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Index</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Index</em>' reference.
+	 * @see #setIndex(Val)
+	 * @see org.eclipse.rcptt.ecl.core.CorePackage#getForeach_Index()
+	 * @model
+	 * @generated
+	 */
+	Val getIndex();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Foreach#getIndex <em>Index</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Index</em>' reference.
+	 * @see #getIndex()
+	 * @generated
+	 */
+	void setIndex(Val value);
+
+	/**
 	 * Returns the value of the '<em><b>Do</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
index 25b5101..402fe44 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
@@ -662,10 +662,11 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getForeach_Do() {
+	public EReference getForeach_Index() {
 		return (EReference)foreachEClass.getEStructuralFeatures().get(1);
 	}
 
@@ -673,7 +674,7 @@
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getForeach_Input() {
+	public EReference getForeach_Do() {
 		return (EReference)foreachEClass.getEStructuralFeatures().get(2);
 	}
 
@@ -681,6 +682,14 @@
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EReference getForeach_Input() {
+		return (EReference)foreachEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getProcessStatus() {
 		return processStatusEClass;
 	}
@@ -1577,6 +1586,7 @@
 
 		foreachEClass = createEClass(FOREACH);
 		createEReference(foreachEClass, FOREACH__ITEM);
+		createEReference(foreachEClass, FOREACH__INDEX);
 		createEReference(foreachEClass, FOREACH__DO);
 		createEReference(foreachEClass, FOREACH__INPUT);
 
@@ -1820,6 +1830,7 @@
 
 		initEClass(foreachEClass, Foreach.class, "Foreach", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getForeach_Item(), this.getVal(), null, "item", null, 0, 1, Foreach.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getForeach_Index(), this.getVal(), null, "index", null, 0, 1, Foreach.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getForeach_Do(), this.getCommand(), null, "do", null, 0, 1, Foreach.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getForeach_Input(), ecorePackage.getEObject(), null, "input", null, 0, -1, Foreach.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/ForeachImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/ForeachImpl.java
index d76eb92..3be3a1d 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/ForeachImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/ForeachImpl.java
@@ -33,6 +33,7 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.ecl.core.impl.ForeachImpl#getItem <em>Item</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.ecl.core.impl.ForeachImpl#getIndex <em>Index</em>}</li>
  *   <li>{@link org.eclipse.rcptt.ecl.core.impl.ForeachImpl#getDo <em>Do</em>}</li>
  *   <li>{@link org.eclipse.rcptt.ecl.core.impl.ForeachImpl#getInput <em>Input</em>}</li>
  * </ul>
@@ -51,6 +52,16 @@
 	protected Val item;
 
 	/**
+	 * The cached value of the '{@link #getIndex() <em>Index</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndex()
+	 * @generated
+	 * @ordered
+	 */
+	protected Val index;
+
+	/**
 	 * The cached value of the '{@link #getDo() <em>Do</em>}' containment reference.
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see #getDo()
@@ -129,6 +140,44 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Val getIndex() {
+		if (index != null && index.eIsProxy()) {
+			InternalEObject oldIndex = (InternalEObject)index;
+			index = (Val)eResolveProxy(oldIndex);
+			if (index != oldIndex) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, CorePackage.FOREACH__INDEX, oldIndex, index));
+			}
+		}
+		return index;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Val basicGetIndex() {
+		return index;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIndex(Val newIndex) {
+		Val oldIndex = index;
+		index = newIndex;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.FOREACH__INDEX, oldIndex, index));
+	}
+
+	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
@@ -203,6 +252,9 @@
 		switch (featureID) {
 			case CorePackage.FOREACH__ITEM:
 				return getItem();
+			case CorePackage.FOREACH__INDEX:
+				if (resolve) return getIndex();
+				return basicGetIndex();
 			case CorePackage.FOREACH__DO:
 				return getDo();
 			case CorePackage.FOREACH__INPUT:
@@ -222,6 +274,9 @@
 			case CorePackage.FOREACH__ITEM:
 				setItem((Val)newValue);
 				return;
+			case CorePackage.FOREACH__INDEX:
+				setIndex((Val)newValue);
+				return;
 			case CorePackage.FOREACH__DO:
 				setDo((Command)newValue);
 				return;
@@ -243,6 +298,9 @@
 			case CorePackage.FOREACH__ITEM:
 				setItem((Val)null);
 				return;
+			case CorePackage.FOREACH__INDEX:
+				setIndex((Val)null);
+				return;
 			case CorePackage.FOREACH__DO:
 				setDo((Command)null);
 				return;
@@ -262,6 +320,8 @@
 		switch (featureID) {
 			case CorePackage.FOREACH__ITEM:
 				return item != null;
+			case CorePackage.FOREACH__INDEX:
+				return index != null;
 			case CorePackage.FOREACH__DO:
 				return do_ != null;
 			case CorePackage.FOREACH__INPUT:
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/commands/IfService.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/commands/IfService.java
index 4d1da92..2d429a6 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/commands/IfService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/commands/IfService.java
@@ -15,13 +15,16 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.rcptt.ecl.core.BoxedValue;
 import org.eclipse.rcptt.ecl.core.Command;
+import org.eclipse.rcptt.ecl.core.CoreFactory;
 import org.eclipse.rcptt.ecl.core.If;
+import org.eclipse.rcptt.ecl.core.Let;
 import org.eclipse.rcptt.ecl.runtime.BoxedValues;
 import org.eclipse.rcptt.ecl.runtime.ICommandService;
 import org.eclipse.rcptt.ecl.runtime.IProcess;
 import org.eclipse.rcptt.ecl.runtime.ISession;
 
 public class IfService implements ICommandService {
+
 	public IStatus service(Command command, IProcess context)
 			throws InterruptedException, CoreException {
 		if (!(command instanceof If)) {
@@ -38,8 +41,14 @@
 		if (branch == null) {
 			return Status.OK_STATUS; // nothing to do
 		}
-		return session.execute(branch, context.getInput(), context.getOutput())
+		return session.execute(wrapBody(branch), context.getInput(), context.getOutput())
 				.waitFor();
 	}
 
+	private static Command wrapBody(Command body) {
+		Let let = CoreFactory.eINSTANCE.createLet();
+		let.setBody(body);
+		return let;
+	}
+
 }
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/ForeachService.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/ForeachService.java
index b042793..acf38c6 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/ForeachService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/ForeachService.java
@@ -13,10 +13,15 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.rcptt.ecl.core.Command;
+import org.eclipse.rcptt.ecl.core.CoreFactory;
 import org.eclipse.rcptt.ecl.core.Foreach;
+import org.eclipse.rcptt.ecl.core.Let;
 import org.eclipse.rcptt.ecl.core.Val;
+import org.eclipse.rcptt.ecl.runtime.BoxedValues;
 import org.eclipse.rcptt.ecl.runtime.CoreUtils;
 import org.eclipse.rcptt.ecl.runtime.ICommandService;
 import org.eclipse.rcptt.ecl.runtime.IPipe;
@@ -30,8 +35,12 @@
 		Foreach foreach = (Foreach) command;
 		IStatus status = Status.OK_STATUS;
 		Val val = foreach.getItem();
+		Val indexVal = foreach.getIndex();
 		boolean valSet = val != null;
-		for (EObject o : foreach.getInput()) {
+
+		EList<EObject> objects = foreach.getInput();
+		for (int i = 0, size = objects.size(); i < size; i++) {
+			EObject o = objects.get(i);
 			ISession session = context.getSession();
 			IPipe in = null;
 			if (valSet) {
@@ -45,7 +54,7 @@
 			IPipe out = session.createPipe();
 			Command doCommand = foreach.getDo();
 
-			status = session.execute(doCommand, in, out).waitFor();
+			status = session.execute(wrapBody(i, indexVal, doCommand), in, out).waitFor();
 			if (status.getSeverity() != IStatus.OK) {
 				break;
 			}
@@ -55,4 +64,16 @@
 		}
 		return status;
 	}
+
+	private static Command wrapBody(int i, Val indexVal, Command body) {
+		Let let = CoreFactory.eINSTANCE.createLet();
+		let.setBody(EcoreUtil.copy(body));
+
+		if (indexVal != null) {
+			indexVal.setValue(BoxedValues.box(i));
+			let.getVals().add(indexVal);
+		}
+		return let;
+	}
+
 }
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.operations/src/org/eclipse/rcptt/ecl/operations/internal/commands/RepeatService.java b/ecl/plugins/org.eclipse.rcptt.ecl.operations/src/org/eclipse/rcptt/ecl/operations/internal/commands/RepeatService.java
index 54ebe94..d2e3a05 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.operations/src/org/eclipse/rcptt/ecl/operations/internal/commands/RepeatService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.operations/src/org/eclipse/rcptt/ecl/operations/internal/commands/RepeatService.java
@@ -75,14 +75,14 @@
 	}
 
 	private static Command wrapBody(int i, Val indexVal, Command body) {
-		if (indexVal == null) {
-			return body;
-		}
-
 		Let let = CoreFactory.eINSTANCE.createLet();
-		indexVal.setValue(BoxedValues.box(i));
-		let.getVals().add(indexVal);
 		let.setBody(body);
+
+		if (indexVal != null) {
+			indexVal.setValue(BoxedValues.box(i));
+			let.getVals().add(indexVal);
+		}
 		return let;
 	}
+
 }
diff --git a/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/PrepareExecutionWrapper.java b/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/PrepareExecutionWrapper.java
index fc98f04..13a758c 100644
--- a/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/PrepareExecutionWrapper.java
+++ b/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/PrepareExecutionWrapper.java
@@ -243,6 +243,7 @@
 	private static void closeAllNodes(long endTime, Node node) {
 		if (node.getEndTime() == 0) {
 			node.setEndTime(endTime);
+			node.setDuration(node.getEndTime() - node.getStartTime());
 		}
 		Q7Info info = ReportHelper.getInfo(node);
 		for (Node child : node.getChildren()) {
@@ -316,6 +317,7 @@
 		Report report = TestSuiteUtils.generateReport(getActualElement(), status);
 		Node root = report.getRoot();
 		root.setEndTime(root.getStartTime() + getTime());
+		root.setDuration(root.getEndTime() - root.getStartTime());
 		ReportHelper.appendLog(root, LoggingCategory.NORMAL, getLog());
 		return report;
 	}
diff --git a/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/reporting/ReportMaker.java b/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/reporting/ReportMaker.java
index 018d60a..b03aa69 100644
--- a/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/reporting/ReportMaker.java
+++ b/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/reporting/ReportMaker.java
@@ -136,6 +136,7 @@
 		nde.setName(iExecutable.getName());
 		nde.setStartTime(0);
 		nde.setEndTime(iExecutable.getTime());
+		nde.setDuration(nde.getEndTime() - nde.getStartTime());
 		Q7Info info = ReportHelper.getInfo(nde);
 		setProperties(iExecutable, info);
 		assert info.getType() != null;
diff --git a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/FullSingleTestHtmlRenderer.java b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/FullSingleTestHtmlRenderer.java
index 37a39a5..64cc235 100644
--- a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/FullSingleTestHtmlRenderer.java
+++ b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/FullSingleTestHtmlRenderer.java
@@ -44,6 +44,7 @@
 import org.eclipse.rcptt.sherlock.core.model.sherlock.report.Snaphot;
 import org.eclipse.rcptt.sherlock.core.reporting.ReportBuilder;
 import org.eclipse.rcptt.sherlock.core.reporting.SimpleReportGenerator;
+import org.eclipse.rcptt.tesla.core.TeslaFeatures;
 import org.eclipse.rcptt.tesla.core.info.AdvancedInformation;
 import org.eclipse.rcptt.tesla.core.info.InfoNode;
 import org.eclipse.rcptt.tesla.core.info.JobEntry;
@@ -173,11 +174,15 @@
 		writer.println("<th>Class</th>");
 		writer.println("<th>Time taken (ms)</th></tr>");
 		for (Q7WaitInfo info : nonIgnored) {
-			long duration = info.getEndTime() - info.getStartTime();
+			long duration = info.getDuration();
 			String type = SimpleReportGenerator.getType(root, info);
 			assert type != null : "Should be prefiltered";
-			row(type, SimpleReportGenerator.getClassName(root, info), ""
-					+ duration);
+			String className = SimpleReportGenerator.getClassName(root, info);
+			if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+					&& className.startsWith("org.eclipse")) { //$NON-NLS-1$
+				continue;
+			}
+			row(type, className, "" + duration);
 		}
 		writer.println("</table>");
 	}
@@ -187,7 +192,15 @@
 			return;
 		renderHeader(2, "Events", "");
 		for (Event e : events) {
-			renderHeader(3, dateFormat.format(e.getTime()), "");
+			if (e.getCount() == 1) {
+				renderHeader(3, "Event at " + dateFormat.format(e.getTime()), "");
+			} else {
+				String header = "Event: "
+						+ e.getCount()
+						+ " times, first at "
+						+ dateFormat.format(e.getTime());
+				renderHeader(3, header, "");
+			}
 			renderEvent(e.getData());
 		}
 	}
@@ -427,7 +440,7 @@
 	};
 
 	private static float durationSeconds(Node node) {
-		long millseconds = node.getEndTime() - node.getStartTime();
+		long millseconds = node.getDuration();
 		return (millseconds) / 1000f;
 	}
 
diff --git a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReportRenderer.java b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReportRenderer.java
index 5814ac5..ec26993 100644
--- a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReportRenderer.java
+++ b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReportRenderer.java
@@ -142,7 +142,7 @@
 	protected void renderNameAndDuration(PrintWriter writer, Report report, IContentFactory content)
 			throws CoreException {
 		Node root = report.getRoot();
-		long millseconds = root.getEndTime() - root.getStartTime();
+		long millseconds = root.getDuration();
 		String duration = durationFormat.format((float) (millseconds) / 1000f);
 		writer.println("<tr><td>" + root.getName() + "</td><td>" + duration + " s</td></tr>");
 	}
diff --git a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReporter.java b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReporter.java
index a706e76..f5b88d3 100644
--- a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReporter.java
+++ b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReporter.java
@@ -69,7 +69,7 @@
 			writer.println("<tr><td>Empty report</td><td></td></tr>");
 			return;
 		}
-		long millseconds = root.getEndTime() - root.getStartTime();
+		long millseconds = root.getDuration();
 		String duration = durationFormat.format((float) (millseconds) / 1000f);
 		writer.println("<tr><td>");
 		String fileName = getNewFileName(root, content);
diff --git a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/JUnitXMLReportGenerator.java b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/JUnitXMLReportGenerator.java
index 55d3566..0fb9bc0 100644
--- a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/JUnitXMLReportGenerator.java
+++ b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/JUnitXMLReportGenerator.java
@@ -31,7 +31,7 @@
 public class JUnitXMLReportGenerator {
 
 	private static final String formatTime(Node nde) {
-		return ReportUtils.formatTime(nde.getEndTime() - nde.getStartTime());
+		return ReportUtils.formatTime(nde.getDuration());
 	}
 
 	public void writeContent(Reports reports, OutputStream stream)
diff --git a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/RcpttReportGenerator.java b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/RcpttReportGenerator.java
index 06c65e2..ffb6e90 100644
--- a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/RcpttReportGenerator.java
+++ b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/RcpttReportGenerator.java
@@ -122,7 +122,17 @@
 	}
 
 	private void writeEvent(Event event, int tabs) throws IOException {
-		writeTabs(tabs + 1).println("Event " + TimeFormatHelper.format(event.getTime() - startTime));
+		if (event.getCount() == 1) {
+			writeTabs(tabs + 1)
+					.append("Event at ")
+					.println(TimeFormatHelper.format(event.getTime() - startTime));
+		} else {
+			writeTabs(tabs + 1).append("Event: ")
+					.append(String.valueOf(event.getCount()))
+					.append(" times, first at ")
+					.append(TimeFormatHelper.format(event.getTime() - startTime))
+					.println();
+		}
 		printObject(event.getData(), tabs + 2);
 	}
 
@@ -222,52 +232,82 @@
 
 	public void writeQ7WaitInfo(int tabs, Q7WaitInfoRoot info) {
 		List<Q7WaitInfo> infos = new ArrayList<Q7WaitInfo>(info.getInfos());
-		Collections.sort(infos, new Comparator<Q7WaitInfo>() {
-			@Override
-			public int compare(Q7WaitInfo o1, Q7WaitInfo o2) {
-				return Long.valueOf(o1.getLastTick()).compareTo(Long.valueOf(o2.getLastTick()));
-			}
-		});
 		if (infos.size() == 0) {
 			return;
 		}
-		long endTime = info.getStartTime();
-		int total = 0;
+		Comparator<Q7WaitInfo> comparator = new Comparator<Q7WaitInfo>() {
+			@Override
+			public int compare(Q7WaitInfo info1, Q7WaitInfo info2) {
+				return Long.compare(info1.getDuration(), info2.getDuration());
+			}
+		};
+		Collections.sort(infos, Collections.reverseOrder(comparator));
+
+		String classNameColumn = "Method name"; //$NON-NLS-1$
+		String totalTimeColumn = "Time"; //$NON-NLS-1$
+		int classNameLength = classNameColumn.length();
+		int totalTimeLength = totalTimeColumn.length();
+		boolean isEmpty = true;
+
 		for (Q7WaitInfo q7WaitInfo : infos) {
-			if (getType(info, q7WaitInfo) == null) {
-				continue;
-			}
-			if (endTime < q7WaitInfo.getEndTime()) {
-				endTime = q7WaitInfo.getEndTime();
-			}
-			total++;
-		}
-		if (total == 0) {
-			return;
-		}
-		writeTabs(tabs + 4).append("--> q7 wait details <-- total wait time: ")
-				.append(Long.toString(endTime - info.getStartTime()))
-				.println();
-		for (Q7WaitInfo i : infos) {
-			long totalTime = i.getEndTime() - i.getStartTime();
-			String className = SimpleReportGenerator.getClassName(info, i);
-			String type = getType(info, i);
+			long totalTime = q7WaitInfo.getDuration();
+			String type = getType(info, q7WaitInfo);
+			String className = SimpleReportGenerator.getClassName(info, q7WaitInfo);
 			if (type == null) {
 				continue;
 			}
-			writeTabs(tabs + 8).append(type).append(": ")
-					.append(className);
-			// writer.append(" time: ").append(Long.toString(i.getStartTime())).append(" - ").append(i.getEndTime());
-			if (totalTime != 0)
-				writer.append(", total time: ").append(Long.toString(totalTime));
-			if (i.getLastTick() > 0) {
-				// writer.append(", total ticks: ").append(Long.toString(i.getTicks()));
-				writer.append(", ticks: ").append(Long.toString(i.getLastTick() - i.getTicks() + 1));
-				writer.append(" to ").append(Long.toString(i.getLastTick()));
+			if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+					&& className.startsWith("org.eclipse")) { //$NON-NLS-1$
+				continue;
 			}
-			// if( i.getLastTick() != 0) {
-			// }
-			writer.println();
+			if (totalTime == 0) {
+				continue;
+			}
+
+			// calculate column length
+			String methodName = String.format("%s: %s", type, className);
+			if (methodName.length() > classNameLength) {
+				classNameLength = methodName.length();
+			}
+			if (String.valueOf(totalTime).length() > totalTimeLength) {
+				totalTimeLength = String.valueOf(totalTime).length();
+			}
+
+			isEmpty = false;
+		}
+		if (isEmpty) {
+			return;
+		}
+
+		writeTabs(tabs + 4).println("--> Wait details <--");
+		writeTabs(tabs + 8)
+				.append(String.format("%" + -classNameLength + "s", classNameColumn))
+				.append("   ")
+				.append(String.format("%" + -totalTimeLength + "s", totalTimeColumn))
+				.println();
+
+		for (Q7WaitInfo i : infos) {
+			long totalTime = i.getDuration();
+			String type = getType(info, i);
+			String className = SimpleReportGenerator.getClassName(info, i);
+			if (type == null) {
+				continue;
+			}
+			if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+					&& className.startsWith("org.eclipse")) { //$NON-NLS-1$
+				continue;
+			}
+			if (totalTime == 0) {
+				continue;
+			}
+
+			String methodName = String.format("%s: %s", type, className);
+			writeTabs(tabs + 8)
+					.append(String.format("%" + -classNameLength + "s", methodName))
+					.append("   ")
+					.append(String.format("%" + totalTimeLength + "s", totalTime))
+					.println();
+
 			addWaitTime(type, className, totalTime);
 		}
 	}
@@ -298,7 +338,7 @@
 			writer.
 					append(" ")
 					.append("time: " +
-							TimeFormatHelper.format(infoNode.getEndTime() - infoNode.getStartTime()))
+							TimeFormatHelper.format(infoNode.getDuration()))
 					.println();
 			writeResult(tabs + 1, q7Info.getResult());
 		}
@@ -361,7 +401,8 @@
 		if (!(type.equals("job") || type.equals("sync") || type.equals("async"))) { //$NON-NLS-1$
 			return;
 		}
-		if (className.startsWith("org.eclipse")) { //$NON-NLS-1$
+		if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+				&& className.startsWith("org.eclipse")) { //$NON-NLS-1$
 			return;
 		}
 
@@ -385,6 +426,9 @@
 		String totalWaitTimeTable = "Total wait time:"; //$NON-NLS-1$
 		String methodNameColumn = "Method name"; //$NON-NLS-1$
 		String totalTimeColumn = "Time"; //$NON-NLS-1$
+		String noWaitInfoMessage = TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+				? "There were no methods RCPTT was waiting for"
+				: "There were no third-party methods RCPTT was waiting for";
 
 		int methodNameLength = methodNameColumn.length();
 		if (methodNameLength > maxMethodNameLength) {
@@ -400,7 +444,7 @@
 		
 		if (totalWaitTime.isEmpty()) {
 			writer.append("  ")
-					.append("There were no third-party methods RCPTT was waiting for") //$NON-NLS-1$
+					.append(noWaitInfoMessage) // $NON-NLS-1$
 					.println();
 			return;
 		}
diff --git a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/ReportUtils.java b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/ReportUtils.java
index e3d24e5..c1adfb9 100644
--- a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/ReportUtils.java
+++ b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/ReportUtils.java
@@ -107,7 +107,7 @@
 			}
 			startTime = Math.min(startTime, localRoot.getStartTime());
 			endTime = Math.max(endTime, localRoot.getEndTime());
-			totalTime += (localRoot.getEndTime() - localRoot.getStartTime());
+			totalTime += (localRoot.getDuration());
 		}
 
 		statistics.setTime((int) totalTime);
@@ -451,7 +451,7 @@
 	}
 
 	public static final String getTime(Node nde) {
-		return formatTime(nde.getEndTime() - nde.getStartTime());
+		return formatTime(nde.getDuration());
 	}
 
 }
diff --git a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/XMLReportGenerator.java b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/XMLReportGenerator.java
index 87daf57..ef0179a 100644
--- a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/XMLReportGenerator.java
+++ b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/XMLReportGenerator.java
@@ -107,7 +107,7 @@
 		// nodeElement.setAttribute("terminateTime",
 		// Long.toString(infoNode.getEndTime()));
 		nodeElement.setAttribute("totalTime",
-				Long.toString(infoNode.getEndTime() - infoNode.getStartTime()));
+				Long.toString(infoNode.getDuration()));
 
 		processAttributes(nodeElement, infoNode.getProperties());
 		if (!infoNode.getChildren().isEmpty()) {
@@ -139,6 +139,7 @@
 		childrenElement.appendChild(eventElement);
 
 		eventElement.setAttribute("time", Long.toString(child.getTime()));
+		eventElement.setAttribute("count", Integer.toString(child.getCount()));
 		if (child.getSource() != null) {
 			eventElement.setAttribute(
 					"source",
diff --git a/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReportRendererTest.java b/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReportRendererTest.java
index 0d7d66c..138b3d9 100644
--- a/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReportRendererTest.java
+++ b/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReportRendererTest.java
@@ -113,9 +113,11 @@
 		Report report = createReport("1", IStatus.OK);
 		report.getRoot().setStartTime(1000);
 		report.getRoot().setEndTime(3500);
+		report.getRoot().setDuration(report.getRoot().getEndTime() - report.getRoot().getStartTime());
 		Report report2 = createReport("2", IStatus.OK);
 		report2.getRoot().setStartTime(4000);
 		report2.getRoot().setEndTime(6000);
+		report2.getRoot().setDuration(report2.getRoot().getEndTime() - report2.getRoot().getStartTime());
 		String result = generate(asList(report, report2)).replaceAll("\\s", "");
 		char separator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
 		Assert.assertTrue("Statistics should have proper Execution time",
diff --git a/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReporterTest.java b/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReporterTest.java
index 4dea993..a075585 100644
--- a/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReporterTest.java
+++ b/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReporterTest.java
@@ -130,9 +130,11 @@
 		Report report = createReport("1", IStatus.OK);
 		report.getRoot().setStartTime(1000);
 		report.getRoot().setEndTime(3500);
+		report.getRoot().setDuration(report.getRoot().getEndTime() - report.getRoot().getStartTime());
 		Report report2 = createReport("2", IStatus.OK);
 		report2.getRoot().setStartTime(4000);
 		report2.getRoot().setEndTime(6000);
+		report2.getRoot().setDuration(report2.getRoot().getEndTime() - report2.getRoot().getStartTime());
 		String result = generate(asList(report, report2)).replaceAll("\\s", "");
 		char separator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
 		Assert.assertTrue("Statistics should have proper Execution time",
diff --git a/modules/nebula/plugins/org.eclipse.rcptt.tesla.nebula.ecl.impl/src/org/eclipse/rcptt/tesla/nebula/ecl/internal/impl/commands/SelectorServiceExtension.java b/modules/nebula/plugins/org.eclipse.rcptt.tesla.nebula.ecl.impl/src/org/eclipse/rcptt/tesla/nebula/ecl/internal/impl/commands/SelectorServiceExtension.java
index d7fb51a..277b97e 100644
--- a/modules/nebula/plugins/org.eclipse.rcptt.tesla.nebula.ecl.impl/src/org/eclipse/rcptt/tesla/nebula/ecl/internal/impl/commands/SelectorServiceExtension.java
+++ b/modules/nebula/plugins/org.eclipse.rcptt.tesla.nebula.ecl.impl/src/org/eclipse/rcptt/tesla/nebula/ecl/internal/impl/commands/SelectorServiceExtension.java
@@ -16,8 +16,6 @@
 import org.eclipse.rcptt.ecl.core.Command;
 import org.eclipse.rcptt.ecl.dispatch.IScriptletExtension;
 import org.eclipse.rcptt.ecl.runtime.IProcess;
-
-import org.eclipse.rcptt.util.TableTreeItemPathUtil;
 import org.eclipse.rcptt.tesla.core.protocol.ElementKind;
 import org.eclipse.rcptt.tesla.ecl.impl.TeslaBridge;
 import org.eclipse.rcptt.tesla.ecl.model.ControlHandler;
@@ -25,6 +23,7 @@
 import org.eclipse.rcptt.tesla.ecl.model.Selector;
 import org.eclipse.rcptt.tesla.ecl.model.TeslaFactory;
 import org.eclipse.rcptt.tesla.nebula.ecl.NebulaElementKinds;
+import org.eclipse.rcptt.util.TableTreeItemPathUtil;
 
 /**
  * Special logic for getting Nebula Grid items.
@@ -70,7 +69,9 @@
 				path += "%" + index + "%";
 			}
 			if (column != null) {
-				path += "#" + column + "#";
+				path += TableTreeItemPathUtil.COLUMN_DELIMITER
+						+ column
+						+ TableTreeItemPathUtil.COLUMN_DELIMITER;
 			}
 			handler.setKind(ElementKind.Item);
 			handler.setParent(parent.getParent());
diff --git a/modules/rap/bundles/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl.rap/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java b/modules/rap/bundles/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl.rap/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
index 10ed227..5a28042 100644
--- a/modules/rap/bundles/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl.rap/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
+++ b/modules/rap/bundles/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl.rap/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
@@ -125,7 +125,9 @@
 				path += "%" + index + "%";
 			}
 			if (column != null) {
-				path += "#" + column + "#";
+				path += TableTreeItemPathUtil.COLUMN_DELIMITER
+						+ column
+						+ TableTreeItemPathUtil.COLUMN_DELIMITER;
 			}
 			handler.setKind(ElementKind.Item);
 			handler.setParent(parent.getParent());
diff --git a/modules/testrail/plugins/org.eclipse.rcptt.testrail/src/org/eclipse/rcptt/testrail/TestRailService.java b/modules/testrail/plugins/org.eclipse.rcptt.testrail/src/org/eclipse/rcptt/testrail/TestRailService.java
index 70ce4a0..898606e 100644
--- a/modules/testrail/plugins/org.eclipse.rcptt.testrail/src/org/eclipse/rcptt/testrail/TestRailService.java
+++ b/modules/testrail/plugins/org.eclipse.rcptt.testrail/src/org/eclipse/rcptt/testrail/TestRailService.java
@@ -379,7 +379,7 @@
 
 	private String getTestRailDuration(Report report) {
 		Node reportRoot = report.getRoot();
-		long duration = (reportRoot.getEndTime() - reportRoot.getStartTime()) / 1000;
+		long duration = (reportRoot.getDuration()) / 1000;
 
 		if (duration != 0) {
 			return MessageFormat.format("{0}s", String.format("%d", duration));
diff --git a/rcp/contexts/org.eclipse.rcptt.ctx.parameters.ui/src/org/eclipse/rcptt/ctx/parameters/ui/ParametersContextEditor.java b/rcp/contexts/org.eclipse.rcptt.ctx.parameters.ui/src/org/eclipse/rcptt/ctx/parameters/ui/ParametersContextEditor.java
index 523c78b..a1b2d5f 100644
--- a/rcp/contexts/org.eclipse.rcptt.ctx.parameters.ui/src/org/eclipse/rcptt/ctx/parameters/ui/ParametersContextEditor.java
+++ b/rcp/contexts/org.eclipse.rcptt.ctx.parameters.ui/src/org/eclipse/rcptt/ctx/parameters/ui/ParametersContextEditor.java
@@ -288,7 +288,7 @@
 
 	private static Collection<Conflict> findConflicts(
 			Map<String, String> first, Map<String, String> second) {
-		List<Conflict> rv = new ArrayList<>();
+		List<Conflict> rv = new ArrayList<Conflict>();
 		
 		for (Object key: (Diffs.computeMapDiff(first, second).getChangedKeys())) {
 			String name = (String) key;
@@ -369,7 +369,7 @@
 		Object[] result = dialog.getResult();
 		if (result == null)
 			return null;
-		List<Conflict> rv = new ArrayList<>();
+		List<Conflict> rv = new ArrayList<Conflict>();
 		for (Object object : result) {
 			rv.add((Conflict) object);
 		}
@@ -428,7 +428,7 @@
 				}
 			}
 
-			Map<String, Parameter> paramMap = new HashMap<>();
+			Map<String, Parameter> paramMap = new HashMap<String, Parameter>();
 			for (Parameter parameter : element.getParameters()) {
 				paramMap.put(parameter.getName(), parameter);
 			}
diff --git a/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/ReportEntryContentProvider.java b/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/ReportEntryContentProvider.java
index a0bbcde..bca5f42 100644
--- a/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/ReportEntryContentProvider.java
+++ b/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/ReportEntryContentProvider.java
@@ -88,8 +88,8 @@
 					StringWriter writer = new StringWriter();
 					new RcpttReportGenerator(new PrintWriter(writer), new ArrayList<ImageEntry>()).writeResult(0,
 							info.getResult());
-					entries.add(new ReportEntry(root.getName(), info.getId(), (int) (root.getEndTime() - root
-							.getStartTime()), info.getResult(), writer.toString()));
+					entries.add(new ReportEntry(root.getName(), info.getId(), (int) root.getDuration(),
+							info.getResult(), writer.toString()));
 				}
 			}
 			ReportEntryContentProvider.this.entries = entries;
diff --git a/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/TestCaseComposite.java b/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/TestCaseComposite.java
index c91eaea..d4138ae 100644
--- a/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/TestCaseComposite.java
+++ b/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/TestCaseComposite.java
@@ -112,8 +112,7 @@
 				}
 				return "";
 			case 2:// time
-				return TimeFormatHelper.format(entry.getEndTime()
-						- entry.getStartTime());
+				return TimeFormatHelper.format(entry.getDuration());
 				// case 3:// location
 				// return entry.location;
 			}
diff --git a/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java b/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
index 4813600..2ce4eaa 100644
--- a/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
+++ b/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
@@ -14,7 +14,6 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.rcptt.ecl.core.Command;
-import org.eclipse.rcptt.ecl.core.util.ISessionPropertyConstants;
 import org.eclipse.rcptt.ecl.dispatch.ServiceDispatchingUtils;
 import org.eclipse.rcptt.ecl.runtime.ICommandService;
 import org.eclipse.rcptt.ecl.runtime.IProcess;
@@ -127,7 +126,9 @@
 				path += "%" + index + "%";
 			}
 			if (column != null) {
-				path += "#" + column + "#";
+				path += TableTreeItemPathUtil.COLUMN_DELIMITER
+						+ column
+						+ TableTreeItemPathUtil.COLUMN_DELIMITER;
 			}
 			handler.setKind(ElementKind.Item);
 			handler.setParent(parent.getParent());
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/AsyncInfoSupport.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/AsyncInfoSupport.java
index 329f44d..22cf3c2 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/AsyncInfoSupport.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/AsyncInfoSupport.java
@@ -143,7 +143,7 @@
 			if (this.sync.contains(async)) {
 				kind = "sync";
 			}
-			ReportHelper.updateWaitInfo(builder.getCurrent(), kind, className);
+			ReportHelper.startWaitInfo(builder.getCurrent(), kind, className);
 		}
 	}
 
@@ -167,7 +167,7 @@
 				kind = "sync";
 				this.sync.remove(async);
 			}
-			ReportHelper.updateWaitInfo(builder.getCurrent(), kind, className);
+			ReportHelper.finishWaitInfo(builder.getCurrent(), kind, className);
 		}
 	}
 
@@ -180,7 +180,7 @@
 			if (sync) {
 				this.sync.add(async);
 			}
-			ReportHelper.updateWaitInfo(builder.getCurrent(), kind, className);
+			ReportHelper.startWaitInfo(builder.getCurrent(), kind, className);
 		}
 	}
 
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/JobsInfoSupport.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/JobsInfoSupport.java
index 0a4c2b9..8b5a18b 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/JobsInfoSupport.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/JobsInfoSupport.java
@@ -36,7 +36,7 @@
 
 	@Override
 	public void jobSchedule(InternalJob job, long delay, boolean reshedule) {
-		jobUpdate(job);
+		jobStart(job);
 	}
 
 	@Override
@@ -46,7 +46,12 @@
 
 	@Override
 	public void endJob(InternalJob job, IStatus status, boolean notify) {
-		jobUpdate(job);
+		jobFinish(job);
+	}
+
+	@Override
+	public void jobCanceled(InternalJob job) {
+		jobFinish(job);
 	}
 
 	@Override
@@ -81,9 +86,26 @@
 		Job.getJobManager().removeJobChangeListener(this);
 	}
 
-	@Override
-	public void jobCanceled(InternalJob job) {
-		jobUpdate(job);
+	private void jobStart(final InternalJob job) {
+		JobStatus status = UIJobCollector.detectJobStatus((Job) job, 0);
+		if (status.equals(JobStatus.IGNORED)) {
+			return;
+		}
+		IReportBuilder[] builders = provider.getListeners();
+		for (IReportBuilder builder : builders) {
+			ReportHelper.startWaitInfo(builder.getCurrent(), "job", job.getClass().getName());
+		}
+	}
+
+	private void jobFinish(final InternalJob job) {
+		JobStatus status = UIJobCollector.detectJobStatus((Job) job, 0);
+		if (status.equals(JobStatus.IGNORED)) {
+			return;
+		}
+		IReportBuilder[] builders = provider.getListeners();
+		for (IReportBuilder builder : builders) {
+			ReportHelper.finishWaitInfo(builder.getCurrent(), "job", job.getClass().getName());
+		}
 	}
 
 	private void jobUpdate(final InternalJob job) {
diff --git a/watson/org.eclipse.rcptt.watson.core/META-INF/MANIFEST.MF b/watson/org.eclipse.rcptt.watson.core/META-INF/MANIFEST.MF
index d3f2c3c..bf8611c 100644
--- a/watson/org.eclipse.rcptt.watson.core/META-INF/MANIFEST.MF
+++ b/watson/org.eclipse.rcptt.watson.core/META-INF/MANIFEST.MF
@@ -22,6 +22,7 @@
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.core.resources;resolution:=optional;x-installation:=greedy,
- org.eclipse.rcptt.tesla.core;bundle-version="[2.2.0,3.0.0)"
+ org.eclipse.rcptt.tesla.core;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.rcptt.ecl.core
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.rcptt.sherlock.core.SherlockCore
diff --git a/watson/org.eclipse.rcptt.watson.core/model/report.ecore b/watson/org.eclipse.rcptt.watson.core/model/report.ecore
index e6aa770..6f2d0f4 100644
--- a/watson/org.eclipse.rcptt.watson.core/model/report.ecore
+++ b/watson/org.eclipse.rcptt.watson.core/model/report.ecore
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="report"
-    nsURI="http://eclipse.org/rcptt/sherlock/report" nsPrefix="org.eclipse.rcptt.sherlock.report">
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="report" nsURI="http://eclipse.org/rcptt/sherlock/report" nsPrefix="org.eclipse.rcptt.sherlock.report">
   <eClassifiers xsi:type="ecore:EClass" name="Report">
     <eStructuralFeatures xsi:type="ecore:EReference" name="root" eType="#//Node" containment="true"
         eOpposite="#//Node/report"/>
@@ -28,6 +26,8 @@
         eOpposite="#//Report/root"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="snapshots" upperBound="-1"
         eType="#//Snaphot" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="duration" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="0"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Event">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="time" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
@@ -38,6 +38,8 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="#//EventSource"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//EventKind"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="color" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="count" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="1"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="EventKind">
     <eLiterals name="Info"/>
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Event.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Event.java
index 0855dc3..2536cae 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Event.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Event.java
@@ -21,6 +21,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getTime <em>Time</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getProperties <em>Properties</em>}</li>
@@ -28,8 +29,8 @@
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getSource <em>Source</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getKind <em>Kind</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getColor <em>Color</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getCount <em>Count</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getEvent()
  * @model
@@ -186,4 +187,31 @@
 	 */
 	void setColor(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Count</b></em>' attribute.
+	 * The default value is <code>"1"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Count</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Count</em>' attribute.
+	 * @see #setCount(int)
+	 * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getEvent_Count()
+	 * @model default="1"
+	 * @generated
+	 */
+	int getCount();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getCount <em>Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Count</em>' attribute.
+	 * @see #getCount()
+	 * @generated
+	 */
+	void setCount(int value);
+
 } // Event
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventKind.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventKind.java
index 19e8568..a9be957 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventKind.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventKind.java
@@ -126,6 +126,8 @@
 	 * Returns the '<em><b>Event Kind</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static EventKind get(String literal) {
@@ -142,6 +144,8 @@
 	 * Returns the '<em><b>Event Kind</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static EventKind getByName(String name) {
@@ -158,6 +162,8 @@
 	 * Returns the '<em><b>Event Kind</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static EventKind get(int value) {
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventSource.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventSource.java
index 9aa00cd..662a80d 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventSource.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventSource.java
@@ -21,11 +21,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource#getProperties <em>Properties</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getEventSource()
  * @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingCategory.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingCategory.java
index c0978a5..6c1ad37 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingCategory.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingCategory.java
@@ -126,6 +126,8 @@
 	 * Returns the '<em><b>Logging Category</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static LoggingCategory get(String literal) {
@@ -142,6 +144,8 @@
 	 * Returns the '<em><b>Logging Category</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static LoggingCategory getByName(String name) {
@@ -158,6 +162,8 @@
 	 * Returns the '<em><b>Logging Category</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static LoggingCategory get(int value) {
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingData.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingData.java
index 26a55c4..2a3cd0b 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingData.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingData.java
@@ -19,11 +19,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.LoggingData#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.LoggingData#getCategory <em>Category</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getLoggingData()
  * @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Node.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Node.java
index b65f84f..482742a 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Node.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Node.java
@@ -22,6 +22,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getStartTime <em>Start Time</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getEndTime <em>End Time</em>}</li>
@@ -32,8 +33,8 @@
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getParent <em>Parent</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getReport <em>Report</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getSnapshots <em>Snapshots</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getDuration <em>Duration</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getNode()
  * @model
@@ -241,4 +242,31 @@
 	 */
 	EList<Snaphot> getSnapshots();
 
+	/**
+	 * Returns the value of the '<em><b>Duration</b></em>' attribute.
+	 * The default value is <code>"0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Duration</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Duration</em>' attribute.
+	 * @see #setDuration(long)
+	 * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getNode_Duration()
+	 * @model default="0"
+	 * @generated
+	 */
+	long getDuration();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getDuration <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Duration</em>' attribute.
+	 * @see #getDuration()
+	 * @generated
+	 */
+	void setDuration(long value);
+
 } // Node
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Report.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Report.java
index c2d7079..71151f7 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Report.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Report.java
@@ -21,11 +21,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Report#getRoot <em>Root</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Report#getSources <em>Sources</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getReport()
  * @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportBuilderStore.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportBuilderStore.java
index 5a875e7..c3f5061 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportBuilderStore.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportBuilderStore.java
@@ -19,11 +19,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportBuilderStore#getReport <em>Report</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportBuilderStore#getCurrentNode <em>Current Node</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getReportBuilderStore()
  * @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportContainer.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportContainer.java
index 4703299..e6af5a7 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportContainer.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportContainer.java
@@ -19,10 +19,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportContainer#getContent <em>Content</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getReportContainer()
  * @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportPackage.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportPackage.java
index 48f09b4..9b683a7 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportPackage.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportPackage.java
@@ -221,13 +221,22 @@
 	int NODE__SNAPSHOTS = 8;
 
 	/**
+	 * The feature id for the '<em><b>Duration</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE__DURATION = 9;
+
+	/**
 	 * The number of structural features of the '<em>Node</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int NODE_FEATURE_COUNT = 9;
+	int NODE_FEATURE_COUNT = 10;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl <em>Event</em>}' class.
@@ -294,13 +303,22 @@
 	int EVENT__COLOR = 5;
 
 	/**
+	 * The feature id for the '<em><b>Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EVENT__COUNT = 6;
+
+	/**
 	 * The number of structural features of the '<em>Event</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EVENT_FEATURE_COUNT = 6;
+	int EVENT_FEATURE_COUNT = 7;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventSourceImpl <em>Event Source</em>}' class.
@@ -764,6 +782,17 @@
 	EReference getNode_Snapshots();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getDuration <em>Duration</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Duration</em>'.
+	 * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getDuration()
+	 * @see #getNode()
+	 * @generated
+	 */
+	EAttribute getNode_Duration();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event <em>Event</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -840,6 +869,17 @@
 	EAttribute getEvent_Color();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getCount <em>Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Count</em>'.
+	 * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getCount()
+	 * @see #getEvent()
+	 * @generated
+	 */
+	EAttribute getEvent_Count();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource <em>Event Source</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1255,6 +1295,14 @@
 		EReference NODE__SNAPSHOTS = eINSTANCE.getNode_Snapshots();
 
 		/**
+		 * The meta object literal for the '<em><b>Duration</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute NODE__DURATION = eINSTANCE.getNode_Duration();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl <em>Event</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -1313,6 +1361,14 @@
 		EAttribute EVENT__COLOR = eINSTANCE.getEvent_Color();
 
 		/**
+		 * The meta object literal for the '<em><b>Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EVENT__COUNT = eINSTANCE.getEvent_Count();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventSourceImpl <em>Event Source</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Screenshot.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Screenshot.java
index 3d32a8b..c03bbbd 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Screenshot.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Screenshot.java
@@ -19,12 +19,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Screenshot#getData <em>Data</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Screenshot#getKind <em>Kind</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Screenshot#getMessage <em>Message</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getScreenshot()
  * @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ScreenshotKind.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ScreenshotKind.java
index 2147668..89f864a 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ScreenshotKind.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ScreenshotKind.java
@@ -74,6 +74,8 @@
 	 * Returns the '<em><b>Screenshot Kind</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ScreenshotKind get(String literal) {
@@ -90,6 +92,8 @@
 	 * Returns the '<em><b>Screenshot Kind</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ScreenshotKind getByName(String name) {
@@ -106,6 +110,8 @@
 	 * Returns the '<em><b>Screenshot Kind</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ScreenshotKind get(int value) {
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Snaphot.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Snaphot.java
index 3e1c378..a3d1b27 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Snaphot.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Snaphot.java
@@ -21,12 +21,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Snaphot#getTime <em>Time</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Snaphot#getProperties <em>Properties</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Snaphot#getData <em>Data</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getSnaphot()
  * @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/TraceData.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/TraceData.java
index bce48aa..c6150e6 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/TraceData.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/TraceData.java
@@ -19,10 +19,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.TraceData#getMessage <em>Message</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getTraceData()
  * @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventImpl.java
index ed40f95..e4a022b 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventImpl.java
@@ -37,6 +37,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getTime <em>Time</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getProperties <em>Properties</em>}</li>
@@ -44,8 +45,8 @@
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getSource <em>Source</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getKind <em>Kind</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getColor <em>Color</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getCount <em>Count</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
@@ -141,6 +142,26 @@
 	protected String color = COLOR_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #getCount() <em>Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int COUNT_EDEFAULT = 1;
+
+	/**
+	 * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected int count = COUNT_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -320,6 +341,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public int getCount() {
+		return count;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCount(int newCount) {
+		int oldCount = count;
+		count = newCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ReportPackage.EVENT__COUNT, oldCount, count));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
@@ -353,6 +395,8 @@
 				return getKind();
 			case ReportPackage.EVENT__COLOR:
 				return getColor();
+			case ReportPackage.EVENT__COUNT:
+				return getCount();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -383,6 +427,9 @@
 			case ReportPackage.EVENT__COLOR:
 				setColor((String)newValue);
 				return;
+			case ReportPackage.EVENT__COUNT:
+				setCount((Integer)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -413,6 +460,9 @@
 			case ReportPackage.EVENT__COLOR:
 				setColor(COLOR_EDEFAULT);
 				return;
+			case ReportPackage.EVENT__COUNT:
+				setCount(COUNT_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -437,6 +487,8 @@
 				return kind != KIND_EDEFAULT;
 			case ReportPackage.EVENT__COLOR:
 				return COLOR_EDEFAULT == null ? color != null : !COLOR_EDEFAULT.equals(color);
+			case ReportPackage.EVENT__COUNT:
+				return count != COUNT_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -457,6 +509,8 @@
 		result.append(kind);
 		result.append(", color: ");
 		result.append(color);
+		result.append(", count: ");
+		result.append(count);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventSourceImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventSourceImpl.java
index 2852504..b61d0a6 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventSourceImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventSourceImpl.java
@@ -35,11 +35,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventSourceImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventSourceImpl#getProperties <em>Properties</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/LoggingDataImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/LoggingDataImpl.java
index 2caab0e..9226dcb 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/LoggingDataImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/LoggingDataImpl.java
@@ -27,11 +27,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.LoggingDataImpl#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.LoggingDataImpl#getCategory <em>Category</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/NodeImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/NodeImpl.java
index cf72b06..9a7db63 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/NodeImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/NodeImpl.java
@@ -44,6 +44,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getStartTime <em>Start Time</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getEndTime <em>End Time</em>}</li>
@@ -54,8 +55,8 @@
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getParent <em>Parent</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getReport <em>Report</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getSnapshots <em>Snapshots</em>}</li>
+ *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getDuration <em>Duration</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
@@ -161,6 +162,26 @@
 	protected EList<Snaphot> snapshots;
 
 	/**
+	 * The default value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDuration()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long DURATION_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDuration()
+	 * @generated
+	 * @ordered
+	 */
+	protected long duration = DURATION_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -377,6 +398,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public long getDuration() {
+		return duration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDuration(long newDuration) {
+		long oldDuration = duration;
+		duration = newDuration;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ReportPackage.NODE__DURATION, oldDuration, duration));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
@@ -462,6 +504,8 @@
 				return getReport();
 			case ReportPackage.NODE__SNAPSHOTS:
 				return getSnapshots();
+			case ReportPackage.NODE__DURATION:
+				return getDuration();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -505,6 +549,9 @@
 				getSnapshots().clear();
 				getSnapshots().addAll((Collection<? extends Snaphot>)newValue);
 				return;
+			case ReportPackage.NODE__DURATION:
+				setDuration((Long)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -544,6 +591,9 @@
 			case ReportPackage.NODE__SNAPSHOTS:
 				getSnapshots().clear();
 				return;
+			case ReportPackage.NODE__DURATION:
+				setDuration(DURATION_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -574,6 +624,8 @@
 				return getReport() != null;
 			case ReportPackage.NODE__SNAPSHOTS:
 				return snapshots != null && !snapshots.isEmpty();
+			case ReportPackage.NODE__DURATION:
+				return duration != DURATION_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -594,6 +646,8 @@
 		result.append(endTime);
 		result.append(", name: ");
 		result.append(name);
+		result.append(", duration: ");
+		result.append(duration);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/PropertyMapImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/PropertyMapImpl.java
index 136627f..43c2251 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/PropertyMapImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/PropertyMapImpl.java
@@ -31,11 +31,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.PropertyMapImpl#getTypedKey <em>Key</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.PropertyMapImpl#getTypedValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportBuilderStoreImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportBuilderStoreImpl.java
index 827b488..2ec9f7a 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportBuilderStoreImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportBuilderStoreImpl.java
@@ -30,11 +30,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportBuilderStoreImpl#getReport <em>Report</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportBuilderStoreImpl#getCurrentNode <em>Current Node</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportContainerImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportContainerImpl.java
index f935210..066221c 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportContainerImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportContainerImpl.java
@@ -26,10 +26,10 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportContainerImpl#getContent <em>Content</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportFactoryImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportFactoryImpl.java
index de9798f..c3ac657 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportFactoryImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportFactoryImpl.java
@@ -18,6 +18,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.rcptt.sherlock.core.model.sherlock.report.*;
 import org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event;
 import org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventKind;
 import org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource;
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportImpl.java
index 4f2d8e4..4f2ea7b 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportImpl.java
@@ -37,11 +37,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportImpl#getRoot <em>Root</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportImpl#getSources <em>Sources</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportPackageImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportPackageImpl.java
index 291be22..8e2bf3b 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportPackageImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportPackageImpl.java
@@ -342,6 +342,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getNode_Duration() {
+		return (EAttribute)nodeEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getEvent() {
 		return eventEClass;
 	}
@@ -405,6 +414,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getEvent_Count() {
+		return (EAttribute)eventEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getEventSource() {
 		return eventSourceEClass;
 	}
@@ -670,6 +688,7 @@
 		createEReference(nodeEClass, NODE__PARENT);
 		createEReference(nodeEClass, NODE__REPORT);
 		createEReference(nodeEClass, NODE__SNAPSHOTS);
+		createEAttribute(nodeEClass, NODE__DURATION);
 
 		eventEClass = createEClass(EVENT);
 		createEAttribute(eventEClass, EVENT__TIME);
@@ -678,6 +697,7 @@
 		createEReference(eventEClass, EVENT__SOURCE);
 		createEAttribute(eventEClass, EVENT__KIND);
 		createEAttribute(eventEClass, EVENT__COLOR);
+		createEAttribute(eventEClass, EVENT__COUNT);
 
 		eventSourceEClass = createEClass(EVENT_SOURCE);
 		createEAttribute(eventSourceEClass, EVENT_SOURCE__NAME);
@@ -761,6 +781,7 @@
 		initEReference(getNode_Parent(), this.getNode(), this.getNode_Children(), "parent", null, 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getNode_Report(), this.getReport(), this.getReport_Root(), "report", null, 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getNode_Snapshots(), this.getSnaphot(), null, "snapshots", null, 0, -1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getNode_Duration(), ecorePackage.getELong(), "duration", "0", 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(eventEClass, Event.class, "Event", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getEvent_Time(), ecorePackage.getELong(), "time", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -769,6 +790,7 @@
 		initEReference(getEvent_Source(), this.getEventSource(), null, "source", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getEvent_Kind(), this.getEventKind(), "kind", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getEvent_Color(), ecorePackage.getEString(), "color", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getEvent_Count(), ecorePackage.getEInt(), "count", "1", 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(eventSourceEClass, EventSource.class, "EventSource", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getEventSource_Name(), ecorePackage.getEString(), "name", null, 0, 1, EventSource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ScreenshotImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ScreenshotImpl.java
index ae9781a..8b42d70 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ScreenshotImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ScreenshotImpl.java
@@ -27,12 +27,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ScreenshotImpl#getData <em>Data</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ScreenshotImpl#getKind <em>Kind</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ScreenshotImpl#getMessage <em>Message</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/SnaphotImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/SnaphotImpl.java
index ad7aef1..31ffff0 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/SnaphotImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/SnaphotImpl.java
@@ -35,12 +35,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.SnaphotImpl#getTime <em>Time</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.SnaphotImpl#getProperties <em>Properties</em>}</li>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.SnaphotImpl#getData <em>Data</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/TraceDataImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/TraceDataImpl.java
index a679b88..09b3633 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/TraceDataImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/TraceDataImpl.java
@@ -26,10 +26,10 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.TraceDataImpl#getMessage <em>Message</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/INodeBuilder.java b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/INodeBuilder.java
index 52d2d8b..d9a78fa 100644
--- a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/INodeBuilder.java
+++ b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/INodeBuilder.java
@@ -32,6 +32,11 @@
 	public INodeBuilder beginTask(String name);
 
 	/**
+	 * Find existing subnode by name and index and make it active.
+	 */
+	public INodeBuilder appendTask(String name);
+
+	/**
 	 * End current task and go level up
 	 */
 	public void endTask();
diff --git a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/ReportBuilder.java b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/ReportBuilder.java
index f49f63a..a86f810 100644
--- a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/ReportBuilder.java
+++ b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/ReportBuilder.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
+import org.eclipse.rcptt.ecl.runtime.BoxedValues;
 import org.eclipse.rcptt.sherlock.core.INodeBuilder;
 import org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event;
 import org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource;
@@ -32,6 +33,9 @@
  * Build a complex report.
  */
 public class ReportBuilder implements IReportBuilder {
+	private static final String NODE_INDEX_PROPERTY = "rcptt.watson.node.index";
+	private static final String NODE_LASTSTARTTIME_PROPERTY = "rcptt.watson.node.last-start-time";
+
 	private final Report report;
 	private NodeBuilder currentNode;
 	
@@ -39,6 +43,8 @@
 	private class NodeBuilder implements INodeBuilder {
 		private final Node node;
 		private NodeBuilder parent;
+		private int currentChildIndex = 0;
+
 		private NodeBuilder(NodeBuilder parent, Node node){
 			if (parent == null) {
 				EObject container = node.eContainer();
@@ -49,21 +55,60 @@
 			this.parent = parent;
 			this.node = node;
 		}
+
 		/**
 		 * Will add new node to current one and go one level down.
 		 */
 		@Override
 		public INodeBuilder beginTask(String name) {
+			NodeBuilder childNode = findChildNode(name);
+			if (childNode != null) {
+				return childNode;
+			}
 			Node child = ReportFactory.eINSTANCE.createNode();
 			child.setName(name);
 			child.setStartTime(getTime());
+			setNodeIndex(child, currentChildIndex);
+			setNodeLastStartTime(child, child.getStartTime());
 			synchronized (report) {
-				node.getChildren().add(child);
+				node.getChildren().add(getChildPosition(name), child);
 				currentNode = new NodeBuilder(this, child);
 			}
+			currentChildIndex++;
 			return currentNode;
 		}
 		
+		private NodeBuilder findChildNode(String name) {
+			for (Node child : node.getChildren()) {
+				if (name.equals(child.getName())
+						&& currentChildIndex == getNodeIndex(child)) {
+					setNodeLastStartTime(child, getTime());
+					synchronized (report) {
+						currentNode = new NodeBuilder(this, child);
+					}
+					currentChildIndex++;
+					return currentNode;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * Find existing subnode by name and index and make it active.
+		 */
+		public INodeBuilder appendTask(String name) {
+			for (Node child : node.getChildren()) {
+				if (name.equals(child.getName())) {
+					setNodeLastStartTime(child, getTime());
+					synchronized (report) {
+						currentNode = new NodeBuilder(this, child);
+					}
+					return currentNode;
+				}
+			}
+			return beginTask(name);
+		}
+
 		/**
 		 * Will go one level up.
 		 */
@@ -71,6 +116,8 @@
 		public void endTask() {
 			synchronized (report) {
 				node.setEndTime(getTime());
+				long duration = node.getEndTime() - getNodeLastStartTime(node);
+				node.setDuration(node.getDuration() + duration);
 				if (parent == null)
 					throw new IllegalStateException("Root report node can't be closed.");
 				currentNode = parent;
@@ -80,13 +127,26 @@
 		@Override
 		public void createEvent(Event event) {
 			synchronized (report) {
+				Event childEvent = findChildEvent(event);
+				if (childEvent != null) {
+					childEvent.setCount(childEvent.getCount() + 1);
+					return;
+				}
 				Event copy = EcoreUtil.copy(event);
 				copy.setTime(getTime());
 				node.getEvents().add(copy);
 			}
 		}
-		
-		
+
+		private Event findChildEvent(Event event) {
+			for (Event childEvent : node.getEvents()) {
+				if (EcoreUtil.equals(event.getData(), childEvent.getData())) {
+					return childEvent;
+				}
+			}
+			return null;
+		}
+
 		/*
 		 * Add or append existing log entry into current node.
 		 */
@@ -109,8 +169,6 @@
 		public void setProperty(String key, EObject value) {
 			EObject copy = EcoreUtil.copy(value);
 			synchronized (report) {
-				if (node.getProperties().containsKey(key))
-					throw new IllegalStateException("Property " + key+ " is already set for node" + node.getName());
 				node.getProperties().put(key, copy);
 			}
 		}
@@ -153,6 +211,18 @@
 			return node.getName();
 		}
 
+		private int getChildPosition(String name) {
+			int position = -1;
+			int size = node.getChildren().size();
+			for (int i = 0; i < size; i++) {
+				Node child = node.getChildren().get(i);
+				if (currentChildIndex == getNodeIndex(child)) {
+					position = i;
+				}
+			}
+			return position == -1 ? size : (position + 1);
+		}
+
 	}
 
 	static private Report createReport() {
@@ -163,7 +233,7 @@
 		root.setStartTime(getTime());
 		return report;
 	}
-	
+
 	private ReportBuilder(Report report, Node currentNode) {
 		this.report = report;
 		this.currentNode = new NodeBuilder(null, currentNode);
@@ -206,8 +276,9 @@
 	public Report getReportCopy() {
 		synchronized (report) {
 			Report reportCopy = EcoreUtil.copy(report);
-			reportCopy.getRoot().setEndTime(getTime());
-
+			Node root = reportCopy.getRoot();
+			root.setEndTime(getTime());
+			root.setDuration(root.getEndTime() - root.getStartTime());
 			return reportCopy;
 		}
 	}
@@ -297,7 +368,9 @@
 		}
 		assert store.getCurrentNode() != null;
 		assert store.getCurrentNode().eContainer() != null;
-		store.getReport().getRoot().setEndTime(getTime());
+		Node root = store.getReport().getRoot();
+		root.setEndTime(getTime());
+		root.setDuration(root.getEndTime() - root.getStartTime());
 		return store;
 	}
 	
@@ -314,4 +387,27 @@
 		}
 		return snapshot;
 	}
+
+	private static int getNodeIndex(Node node) {
+		Object index = BoxedValues.unbox(node.getProperties().get(NODE_INDEX_PROPERTY));
+		assert index != null;
+		assert index instanceof Integer;
+		return ((Integer) index).intValue();
+	}
+
+	private static void setNodeIndex(Node node, int index) {
+		node.getProperties().put(NODE_INDEX_PROPERTY, BoxedValues.box(index));
+	}
+
+	private static long getNodeLastStartTime(Node node) {
+		Object index = BoxedValues.unbox(node.getProperties().get(NODE_LASTSTARTTIME_PROPERTY));
+		assert index != null;
+		assert index instanceof Long;
+		return ((Long) index).longValue();
+	}
+
+	private static void setNodeLastStartTime(Node node, long startTime) {
+		node.getProperties().put(NODE_LASTSTARTTIME_PROPERTY, BoxedValues.box(startTime));
+	}
+
 }
diff --git a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/SimpleReportGenerator.java b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/SimpleReportGenerator.java
index 848aa2f..96a3954 100644
--- a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/SimpleReportGenerator.java
+++ b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/SimpleReportGenerator.java
@@ -53,8 +53,7 @@
 		appendTabs(stream, tabs);
 		stream.append(infoNode.getName())
 				.append(" ")
-				.append(Long.toString(infoNode.getEndTime()
-						- infoNode.getStartTime()));
+				.append(Long.toString(infoNode.getDuration()));
 		stream.append(" {").append(LINE_SEPARATOR);
 
 		EMap<String, EObject> list = infoNode.getProperties();
@@ -96,54 +95,59 @@
 		}
 	}
 
-	public void printWaitInfo(StringBuilder stream, int tabs, String key, Q7WaitInfoRoot value) {
-		Q7WaitInfoRoot info = (Q7WaitInfoRoot) value;
+	public void printWaitInfo(StringBuilder stream, int tabs, String key, Q7WaitInfoRoot info) {
 		List<Q7WaitInfo> infos = new ArrayList<Q7WaitInfo>(info.getInfos());
-		Collections.sort(infos, new Comparator<Q7WaitInfo>() {
-			@Override
-			public int compare(Q7WaitInfo o1, Q7WaitInfo o2) {
-				return Long.valueOf(o1.getLastTick()).compareTo(Long.valueOf(o2.getLastTick()));
-			}
-		});
 		if (infos.size() == 0) {
 			return;
 		}
-		long endTime = info.getStartTime();
-		int total = 0;
+		Comparator<Q7WaitInfo> comparator = new Comparator<Q7WaitInfo>() {
+			@Override
+			public int compare(Q7WaitInfo info1, Q7WaitInfo info2) {
+				return Long.compare(info1.getDuration(), info2.getDuration());
+			}
+		};
+		Collections.sort(infos, Collections.reverseOrder(comparator));
+
+		boolean isEmpty = true;
 		for (Q7WaitInfo q7WaitInfo : infos) {
 			if (getType(info, q7WaitInfo) == null) {
 				continue;
 			}
-			if (endTime < q7WaitInfo.getEndTime()) {
-				endTime = q7WaitInfo.getEndTime();
+			if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+					&& getClassName(info, q7WaitInfo).startsWith("org.eclipse")) { //$NON-NLS-1$
+				continue;
 			}
-			total++;
+			if (q7WaitInfo.getDuration() == 0) {
+				continue;
+			}
+			isEmpty = false;
+			break;
 		}
-		if (total == 0) {
+		if (isEmpty) {
 			return;
 		}
-		appendTabs(stream, tabs + 4).append("--> q7 wait details <-- total wait time: ")
-				.append(Long.toString(endTime - info.getStartTime()))
+		appendTabs(stream, tabs + 4).append("--> Wait details <--")
 				.append(LINE_SEPARATOR);
 		for (Q7WaitInfo i : infos) {
-			long totalTime = i.getEndTime() - i.getStartTime();
-			String className = getClassName(value, i);
+			long totalTime = i.getDuration();
 			String type = getType(info, i);
+			String className = getClassName(info, i);
 			if (type == null) {
 				continue;
 			}
+			if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+					&& className.startsWith("org.eclipse")) { //$NON-NLS-1$
+				continue;
+			}
+			if (totalTime == 0) {
+				continue;
+			}
 			appendTabs(stream, tabs + 8).append(type).append(": ")
 					.append(className);
-			// stream.append(" time: ").append(Long.toString(i.getStartTime())).append(" - ").append(i.getEndTime());
+
 			if (totalTime != 0)
 				stream.append(", total time: ").append(Long.toString(totalTime));
-			if (i.getLastTick() > 0) {
-				// stream.append(", total ticks: ").append(Long.toString(i.getTicks()));
-				stream.append(", ticks: ").append(Long.toString(i.getLastTick() - i.getTicks() + 1));
-				stream.append(" to ").append(Long.toString(i.getLastTick()));
-			}
-			// if( i.getLastTick() != 0) {
-			// }
+
 			stream.append(LINE_SEPARATOR);
 		}
 	}
diff --git a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/internal/EventLogEventProvider.java b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/internal/EventLogEventProvider.java
index 3048d4a..9cbfc71 100644
--- a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/internal/EventLogEventProvider.java
+++ b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/internal/EventLogEventProvider.java
@@ -45,7 +45,6 @@
 				Event event = ReportFactory.eINSTANCE.createEvent();
 				EclipseStatus data = SherlockCore.convert(status);
 				event.setData(data);
-				data.setThreadName(Thread.currentThread().getName());
 				builder.getCurrent().createEvent(event);
 			}
 		}
diff --git a/watson/org.eclipse.rcptt.watson.ui/src/org/eclipse/rcptt/sherlock/ui/reportdetails/ReportTimelineComposite.java b/watson/org.eclipse.rcptt.watson.ui/src/org/eclipse/rcptt/sherlock/ui/reportdetails/ReportTimelineComposite.java
index bf31aa7..5d76d4c 100644
--- a/watson/org.eclipse.rcptt.watson.ui/src/org/eclipse/rcptt/sherlock/ui/reportdetails/ReportTimelineComposite.java
+++ b/watson/org.eclipse.rcptt.watson.ui/src/org/eclipse/rcptt/sherlock/ui/reportdetails/ReportTimelineComposite.java
@@ -948,8 +948,8 @@
 				.append("\n");
 		builder.append(
 				"Time spend:"
-						+ TimeFormatHelper.format(node.getEndTime()
-								- node.getStartTime())).append("\n");
+						+ TimeFormatHelper.format(node.getDuration()))
+				.append("\n");
 
 		SimpleReportGenerator gen = new SimpleReportGenerator();
 		for (EventSource source : sources.keySet()) {