diff --git a/erp5/util/benchmark/report.py b/erp5/util/benchmark/report.py
index 267e469f711d02674de1945be61e6acb947b02d7..4ff4f09901a8e368e3278fd8c67faa1f9e512625 100755
--- a/erp5/util/benchmark/report.py
+++ b/erp5/util/benchmark/report.py
@@ -216,7 +216,56 @@ import pylab
 
 from matplotlib import pyplot, ticker
 
-def drawBarDiagram(pdf, title, stat_list, only_average=False):
+def drawDecorator(xlabel, ylabel, with_table=False):
+  def inner(f):
+    def decorate(pdf, title, *args, **kwargs):
+      # Create the figure
+      figure = pyplot.figure(figsize=(11.69, 8.29))
+
+      if with_table:
+        figure.subplots_adjust(bottom=0.13, right=0.98, top=0.95)
+      else:
+        figure.subplots_adjust(bottom=0.1, right=0.98, left=0.07, top=0.95)
+
+      pyplot.title(title)
+
+      pyplot.grid(True, linewidth=1.5)
+
+      # Create the axes
+      axes = figure.add_subplot(111)
+
+      x_major, x_minor, y_major, y_minor = f(axes, *args, **kwargs)
+
+      if x_major:
+        axes.xaxis.set_major_locator(x_major)
+        axes.xaxis.grid(True, 'minor')
+      if x_minor:
+        axes.xaxis.set_minor_locator(x_minor)
+
+      if y_major:
+        axes.yaxis.set_major_locator(y_major)
+        axes.yaxis.grid(True, 'minor')
+      if y_minor:
+        axes.yaxis.set_minor_locator(y_minor)
+
+      # Display legend at the best position
+      axes.legend(loc=0)
+
+      # Add axes labels
+      if xlabel:
+        axes.set_xlabel(xlabel)
+      if ylabel:
+        axes.set_ylabel(ylabel)
+
+      pdf.savefig()
+      pylab.close()
+
+    return decorate
+
+  return inner
+
+@drawDecorator(xlabel=None, ylabel='Seconds', with_table=True)
+def drawBarDiagram(axes, stat_list, only_average=False):
   mean_list = []
   yerr_list = []
   minimum_list = []
@@ -240,21 +289,8 @@ def drawBarDiagram(pdf, title, stat_list, only_average=False):
   yerr_upper = numpy.minimum(max_array - mean_array, yerr_list)
 
   ## Draw diagrams
-  # Create the figure
-  figure = pyplot.figure(figsize=(11.69, 8.29))
-  figure.subplots_adjust(bottom=0.13, right=0.98, top=0.95)
-  pyplot.title(title)
-
-  # Create the axes along with their labels
-  axes = figure.add_subplot(111)
-  axes.set_ylabel('Seconds')
   axes.set_xticks([])
 
-  axes.yaxis.set_major_locator(ticker.MaxNLocator(nbins=20))
-  axes.yaxis.set_minor_locator(ticker.AutoMinorLocator())
-  axes.yaxis.grid(True, 'major', linewidth=1.5)
-  axes.yaxis.grid(True, 'minor')
-
   # Create the bars
   ind = numpy.arange(len(label_list))
   width = 0.33
@@ -270,9 +306,6 @@ def drawBarDiagram(pdf, title, stat_list, only_average=False):
     max_rects = axes.bar(ind + width * 2, maximum_list, width, label='Maximum',
                          color='g')
 
-  # Add the legend of bars
-  axes.legend(loc=0)
-
   axes.table(rowLabels=['Minimum', 'Average', 'Std. deviation', 'Maximum', 'Errors'],
              colLabels=label_list,
              cellText=[formatFloatList(minimum_list),
@@ -286,44 +319,11 @@ def drawBarDiagram(pdf, title, stat_list, only_average=False):
              rowLoc='center',
              cellLoc='center')
 
-  pdf.savefig()
-  pylab.close()
-
-def drawPlotDecorator(xlabel, ylabel):
-  def inner(f):
-    def decorate(pdf, title, *args, **kwargs):
-      figure = pyplot.figure(figsize=(11.69, 8.29), frameon=False)
-      figure.subplots_adjust(bottom=0.1, right=0.98, left=0.07, top=0.95)
-      pyplot.title(title)
-      pyplot.grid(True, linewidth=1.5)
-
-      axes = figure.add_subplot(111)
-
-      x_major, x_minor, y_major, y_minor = f(axes, *args, **kwargs)
-
-      axes.xaxis.set_major_locator(x_major)
-      if x_minor:
-        axes.xaxis.set_minor_locator(x_minor)
-      axes.xaxis.grid(True, 'minor')
-
-      axes.yaxis.set_major_locator(y_major)
-      if y_minor:
-        axes.yaxis.set_minor_locator(y_minor)
-      axes.yaxis.grid(True, 'minor')
-
-      axes.legend(loc=0)
-      axes.set_xlabel(xlabel)
-      axes.set_ylabel(ylabel)
-
-      pdf.savefig()
-      pylab.close()
-
-    return decorate
-
-  return inner
+  return (None, None,
+          ticker.MaxNLocator(nbins=20), ticker.AutoMinorLocator())
 
-@drawPlotDecorator(xlabel='Time (in hours)',
-                   ylabel='Use cases')
+@drawDecorator(xlabel='Time (in hours)',
+               ylabel='Use cases')
 def drawUseCasePerNumberOfUserPlot(axes,
                                    use_case_count_list,
                                    time_elapsed_list,
@@ -385,8 +385,8 @@ def drawUseCasePerNumberOfUserPlot(axes,
   return (ticker.MaxNLocator(nbins=20), ticker.AutoMinorLocator(),
           ticker.MaxNLocator(nbins=20), ticker.AutoMinorLocator())
 
-@drawPlotDecorator(xlabel='Concurrent Users',
-                   ylabel='Use cases/h')
+@drawDecorator(xlabel='Concurrent Users',
+               ylabel='Use cases/h')
 def drawConcurrentUsersUseCasePlot(axes,
                                    nb_users_list,
                                    use_case_stat_list,
@@ -452,8 +452,8 @@ def drawConcurrentUsersUseCasePlot(axes,
   return (ticker.FixedLocator(nb_users_list), None,
           ticker.MaxNLocator(nbins=20), ticker.AutoMinorLocator()) 
 
-@drawPlotDecorator(xlabel='Concurrent users',
-                   ylabel='Seconds')
+@drawDecorator(xlabel='Concurrent users',
+               ylabel='Seconds')
 def drawConcurrentUsersPlot(axes, nb_users_list, stat_list, only_average=False):
   min_array = numpy.array([stat.minimum for stat in stat_list])
   mean_array = numpy.array([stat.mean for stat in stat_list])