Index: src/core/org/apache/jmeter/samplers/SampleResult.java
===================================================================
--- src/core/org/apache/jmeter/samplers/SampleResult.java	(revision 883115)
+++ src/core/org/apache/jmeter/samplers/SampleResult.java	(working copy)
@@ -1089,4 +1089,11 @@
     public void removeSubResults() {
         this.subResults = null;
     }
+
+	/**
+	 * @param pause
+	 */
+	public void incIdleTime(long pause) {
+		idleTime += pause;
+	}
 }
Index: src/core/org/apache/jmeter/control/TransactionController.java
===================================================================
--- src/core/org/apache/jmeter/control/TransactionController.java	(revision 883115)
+++ src/core/org/apache/jmeter/control/TransactionController.java	(working copy)
@@ -56,7 +56,18 @@
 
     private transient int noFailingSamples;
 
+    /**
+     * Cumulated pause time to exclude timer and post/pre processor times
+     */
+    private transient long pauseTime;
+    
+    /**
+     * Previous end time
+     */
+    private transient long prevEndTime;
+     
     private static final String PARENT = "TransactionController.parent";// $NON-NLS-1$
+    private final static String INCLUDE_TIMERS = "TransactionController.includeTimers";// $NON-NLS-1$
 
     /**
      * Creates a Transaction Controller
@@ -152,6 +163,8 @@
             // Assume success
             res.setSuccessful(true);
             res.sampleStart();
+            prevEndTime = res.getStartTime();
+            pauseTime = 0;
         }
 
         Sampler returnValue = super.next();
@@ -159,7 +172,8 @@
         if (returnValue == null) // Must be the end of the controller
         {
             if (res != null) {
-                res.sampleEnd();
+            	res.incIdleTime(pauseTime);
+            	res.sampleEnd();
                 res.setResponseMessage("Number of samples in transaction : " + calls + ", number of failing samples : " + noFailingSamples);
                 if(res.isSuccessful()) {
                     res.setResponseCodeOK();
@@ -196,6 +210,10 @@
                 SampleResult sampleResult = se.getResult();
                 res.setThreadName(sampleResult.getThreadName());
                 res.setBytes(res.getBytes() + sampleResult.getBytes());
+                if (!isIncludeTimers()) {
+                	pauseTime += sampleResult.getEndTime() - sampleResult.getTime() - prevEndTime;
+                	prevEndTime = sampleResult.getEndTime();
+                }
                 if(!sampleResult.isSuccessful()) {
                     res.setSuccessful(false);
                     noFailingSamples++;
@@ -212,4 +230,20 @@
 
     public void sampleStopped(SampleEvent e) {
     }
+    
+    /**
+     * Include timer and pre/post processor time
+     * @param b
+     */
+    public void setIncludeTimers(boolean b) {
+    	setProperty(new BooleanProperty(INCLUDE_TIMERS, b));
+    }
+
+    /**
+     * Include timer and pre/post processor time
+     * @return boolean (defaults to true for Ascending compatibility)
+     */
+    public boolean isIncludeTimers() {
+    	return getPropertyAsBoolean(INCLUDE_TIMERS, true);
+    }
 }
Index: src/core/org/apache/jmeter/control/gui/TransactionControllerGui.java
===================================================================
--- src/core/org/apache/jmeter/control/gui/TransactionControllerGui.java	(revision 883115)
+++ src/core/org/apache/jmeter/control/gui/TransactionControllerGui.java	(working copy)
@@ -32,6 +32,8 @@
 public class TransactionControllerGui extends AbstractControllerGui {
 
     private JCheckBox parent; // If selected, then generate parent sample, otherwise as per original controller
+	
+    private JCheckBox includeTimers; // if selected, add duration of timers to total runtime
 
     /**
      * Create a new TransactionControllerGui instance.
@@ -51,12 +53,16 @@
     public void configure(TestElement el) {
         super.configure(el);
         parent.setSelected(((TransactionController) el).isParent());
+		includeTimers.setSelected(((TransactionController) el).isIncludeTimers());
     }
 
     /* Implements JMeterGUIComponent.modifyTestElement(TestElement) */
     public void modifyTestElement(TestElement el) {
         configureTestElement(el);
-        ((TransactionController) el).setParent(parent.isSelected());
+        TransactionController tc = ((TransactionController) el);
+        tc.setParent(parent.isSelected());
+        tc.setIncludeTimers(includeTimers.isSelected());
+
     }
 
     public String getLabelResource() {
@@ -72,5 +78,7 @@
         add(makeTitlePanel());
         parent = new JCheckBox(JMeterUtils.getResString("transaction_controller_parent")); // $NON-NLS-1$
         add(parent);
+        includeTimers = new JCheckBox(JMeterUtils.getResString("transaction_controller_include_timers"), true); // $NON-NLS-1$
+        add(includeTimers);
     }
 }
