diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index 34e4787a57a6c9e91a0650d1750fef58e8e843e7..5c5023fa5333283193e3103313625cdcc644393d 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python -u
 #
 
 # Copyright (C) 2007, 2008, 2009, 2010 Google Inc.
@@ -44,6 +44,16 @@ from ganeti import rapi
 import ganeti.rapi.client
 
 
+def _FormatHeader(line, end=72, char="-"):
+  """Fill a line up to the end column.
+
+  """
+  line = "---- " + line + " "
+  line += "-" * (end-len(line))
+  line = line.rstrip()
+  return line
+
+
 def RunTest(fn, *args):
   """Runs a test after printing a header.
 
@@ -51,16 +61,22 @@ def RunTest(fn, *args):
   if fn.__doc__:
     desc = fn.__doc__.splitlines()[0].strip()
   else:
-    desc = '%r' % fn
+    desc = "%r" % fn
 
-  now = str(datetime.datetime.now())
+  desc = desc.rstrip(".")
+
+  tstart = datetime.datetime.now()
 
   print
-  print '---', now, ('-' * (55 - len(now)))
-  print desc
-  print '-' * 60
+  print _FormatHeader("%s start %s" % (tstart, desc))
 
-  return fn(*args)
+  try:
+    retval = fn(*args)
+    return retval
+  finally:
+    tstop = datetime.datetime.now()
+    tdelta = tstop - tstart
+    print _FormatHeader("%s time=%s %s" % (tstop, tdelta, desc))
 
 
 def RunEnvTests():