diff --git a/org.eclipse.modisco.infra.discovery.benchmark.core/META-INF/MANIFEST.MF b/org.eclipse.modisco.infra.discovery.benchmark.core/META-INF/MANIFEST.MF
index 376df88..3a9443e 100644
--- a/org.eclipse.modisco.infra.discovery.benchmark.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.modisco.infra.discovery.benchmark.core/META-INF/MANIFEST.MF
@@ -23,5 +23,6 @@
  org.eclipse.modisco.utils.chart.metamodel;bundle-version="0.10.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.modisco.infra.discovery.benchmark.core.internal.exported;x-friends:="org.eclipse.modisco.infra.discovery.benchmark.ui"
+Export-Package: org.eclipse.modisco.infra.discovery.benchmark.core.internal.exported;x-friends:="org.eclipse.modisco.infra.discovery.benchmark.ui",
+ org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal;x-internal:=true
 
diff --git a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/impl/DiscovererBenchmarkDiscoverer.java b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/impl/DiscovererBenchmarkDiscoverer.java
index 407b7ee..b33630d 100644
--- a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/impl/DiscovererBenchmarkDiscoverer.java
+++ b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/impl/DiscovererBenchmarkDiscoverer.java
@@ -1,11 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2012 INRIA. All rights reserved. This program and the
+ * Copyright (c) 2012, 2015 INRIA, and Mia-Software.
+ * 
+ * All rights reserved. This program and the
  * accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
- * Contributors: Guillaume Doux - INRIA - Initial API and implementation
- * 
+ * Contributors:
+ *    Guillaume Doux (INRIA) - Initial API and implementation
+ *    Grégoire Dupé (Mia-Software) - Bug 482672 - Benchmark command line interface
+ *    Grégoire Dupé (Mia-Software) - Bug 482857 - Discoverer Benchmark Report : wrong namespaces
  ******************************************************************************/
 package org.eclipse.modisco.infra.discovery.benchmark.core.internal.impl;
 
@@ -26,6 +30,8 @@
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -34,6 +40,8 @@
 import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EPackage.Registry;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
@@ -50,6 +58,7 @@
 import org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.BenchmarkChartGeneration;
 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.Benchmark;
 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.BenchmarkFactory;
+import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.BenchmarkPackage;
 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.Discovery;
 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.DiscoveryIteration;
 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.EndEvent;
@@ -181,9 +190,9 @@
 				setLaunchParameter(disco, discoverer);
 				String serializationLocation;
 				if (discoverer.getTargetURI() != null) {
-					serializationLocation = discoverer.getTargetURI().trimFileExtension().toPlatformString(false);
+					serializationLocation = discoverer.getTargetURI().trimFileExtension().toString();
 				} else {
-					serializationLocation = this.getTargetURI().trimFileExtension().toPlatformString(false);
+					serializationLocation = this.getTargetURI().trimFileExtension().toString();
 				}
 				for (int i = 1; i <= this.iterations;  i++) {
 					URI resultSerializationLocation =  URI.createURI(serializationLocation);
@@ -194,28 +203,31 @@
 					if (IEventNotifier.class.isInstance(discoverer)) {
 						((IEventNotifier) discoverer).addListener(this.recorder);
 					}
-
 					progressMonitor.subTask("Project discovery: iteration " + String.valueOf(getIterations()));
 					this.recorder.start();
-
 					try {
 						if (discoverer.isApplicableTo(project)) {
 							IProgressMonitor subProgressMonitor = new SubProgressMonitor(progressMonitor, EIGHT);
 							discoverer.discoverElement(project, subProgressMonitor);
 						} else {
-							MoDiscoLogger.logWarning("Discoverer " + discovererId + " is not applicable on project " + project.getName(),
-									org.eclipse.modisco.infra.discovery.benchmark.core.internal.Activator.getDefault());
+							final String message = String.format(
+									"Discoverer '%s' is not applicable on project '%s'", //$NON-NLS-1$
+									discovererId,
+									project.getName()
+									);
+							MoDiscoLogger.logWarning(
+									message, Activator.getDefault());
 						}
-					} catch (DiscoveryException e) {
+					} catch (Exception e) {
 						failure = true;
 						discoveryErrors.append(e.getStackTrace().toString());
+						final String message = String.format(
+								"Benchmark of discoverer '%s' fails on project '%s'", //$NON-NLS-1$
+								discovererId,
+								project.getName()
+								);
 						MoDiscoLogger.logError(e,
-								"Benchmark of discoverer " + discovererId + " fails on project" + project.getName(), org.eclipse.modisco.infra.discovery.benchmark.core.internal.Activator.getDefault()); //$NON-NLS-1$
-					} catch (ClassCastException e) {
-						failure = true;
-						discoveryErrors.append(e.getStackTrace().toString());
-						MoDiscoLogger.logError(e,
-								"Benchmark of discoverer " + discovererId + " fails on project" + project.getName(), org.eclipse.modisco.infra.discovery.benchmark.core.internal.Activator.getDefault()); //$NON-NLS-1$
+								message, Activator.getDefault());
 					}
 					this.recorder.stop();
 					this.events.addAll(this.recorder.getEvents());
@@ -229,9 +241,7 @@
 						discoveryIteration.setDiscoveryErrors(discoveryErrors.toString());
 					}
 					disco.getIterations().add(discoveryIteration);
-
 				}
-
 				postDiscoveryDiscoInit(disco, discoverer);
 				if (this.isTargetSerializationChosen()) {
 					try {
@@ -285,7 +295,7 @@
 				size++;
 			}
 		} else {
-			MoDiscoLogger.logWarning("Unable to compute the number of element of an unexisting model", Activator.getDefault());
+			MoDiscoLogger.logWarning("Unable to compute the number of element of an unexisting model: "+targetModel.getURI().toString(), Activator.getDefault());
 		}
 		return size;
 	}
@@ -306,34 +316,48 @@
 			targetURI = this.getTargetURI();
 		}
 		if (targetURI == null) {
-			MoDiscoLogger.logWarning("The HTML_REPORT_LOCATION or the TARGET_URI parameter should not be null", Activator.getDefault());
+			MoDiscoLogger.logWarning(
+					"The HTML_REPORT_LOCATION or the TARGET_URI parameter should not be null", //$NON-NLS-1$
+					Activator.getDefault());
 			return;
 		}
-		IContainer location = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(targetURI.path().replace("/resource", ""))).getParent();
-		String locationString = "";
-		if (targetURI == this.getTargetURI()) {
-			locationString = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() 
-					+ targetURI.trimSegments(1).toString().replace("platform:/resource", "") + "/HTMLReport";
+		final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		final IWorkspaceRoot wsRoot = workspace.getRoot();
+		java.io.File file = null;
+		IFile iFile = null;
+		String targetUriStr = targetURI.toString();
+		if (targetURI.isPlatformResource()) {
+			final String pathStr = 
+					targetUriStr.replaceAll("platform:/resource", ""); //$NON-NLS-1$//$NON-NLS-2$
+			iFile = wsRoot.getFile(new Path(pathStr));
+			iFile.getLocation().toFile();
+		} else if (targetURI.isFile()) {
+			file = new java.io.File(java.net.URI.create(targetUriStr));
 		} else {
-			locationString = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() 
-					+ targetURI.toString().replace("platform:/resource", "");
+			final String message = String.format(
+					"The following target URI '%s' is not managed. 'platform:/resource' or 'file:/' are expected.", //$NON-NLS-1$
+					targetURI.toString());
+			throw new IllegalArgumentException(message);
 		}
-		java.net.URI uri = java.net.URI.create(locationString);
-		java.io.File file = new java.io.File(uri.toString());
-
-		ArrayList<Object> arguments = new ArrayList<Object>();
+		final ArrayList<Object> arguments = new ArrayList<Object>();
 		//Generation of the HTML report
 		try {
 			HtmlReport report = new HtmlReport(benchmark, file, arguments);
 			report.doGenerate(null);
 		} catch (Exception e) {
-			MoDiscoLogger.logWarning(e, "Acceleo exception", org.eclipse.modisco.infra.discovery.benchmark.core.internal.Activator.getDefault());
+			MoDiscoLogger.logWarning(e,
+					"Acceleo exception", //$NON-NLS-1$
+					Activator.getDefault());
 		}
 		//Generation of the charts
-		BenchmarkChartGeneration chartGenerator = new BenchmarkChartGeneration(file, this.measureMemoryUse);
+		final BenchmarkChartGeneration chartGenerator = 
+				new BenchmarkChartGeneration(file, this.measureMemoryUse);
 		chartGenerator.generateAll(benchmark);
 
-		location.refreshLocal(IResource.DEPTH_INFINITE, progressMonitor);
+		if (iFile != null) {
+			final IContainer location = iFile.getParent();
+			location.refreshLocal(IResource.DEPTH_INFINITE, progressMonitor);
+		}
 	}
 
 	/**
diff --git a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.java b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.java
index 79c9b89..6b4507e 100644
--- a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.java
+++ b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     Obeo - initial API and implementation
  *     Guillaume Doux - INRIA
+ *     Grégoire Dupé (Mia-Software) - Bug 482857 - Discoverer Benchmark Report : wrong namespaces
  *******************************************************************************/
 package org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting;
 
@@ -36,7 +37,7 @@
      *
      * @generated
      */
-    public static final String MODULE_FILE_NAME = "/org/eclipse/modisco/infra/discovery/benchmark/reporting/HtmlReport";
+    public static final String MODULE_FILE_NAME = "/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport";
     
     /**
      * The name of the templates that are to be generated.
@@ -130,6 +131,13 @@
                 List<String> arguments = new ArrayList<String>();
                 
                 /*
+                 * If you want to change the content of this method, do NOT forget to change the "@generated"
+                 * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation
+                 * of the Acceleo module with the main template that has caused the creation of this class will
+                 * revert your modifications.
+                 */
+
+                /*
                  * Add in this list all the arguments used by the starting point of the generation
                  * If your main template is called on an element of your model and a String, you can
                  * add in "arguments" this "String" attribute.
@@ -139,14 +147,12 @@
                 
                 /*
                  * Add the properties from the launch arguments.
-                 * If you want to programmatically add new arguments, add them in "propertiesFiles"
+                 * If you want to programmatically add new properties, add them in "propertiesFiles"
                  * You can add the absolute path of a properties files, or even a project relative path.
                  * If you want to add another "protocol" for your properties files, please override 
                  * "getPropertiesLoaderService(AcceleoService)" in order to return a new property loader.
-                 * The basic properties loader will look for properties in the current project if the path
-                 * of the properties file is like this "packagea.packageb.packagec.default" for a properties
-                 * file named default.properties, or if the path is an absolute path. With a new property
-                 * loader you could for example, look for properties files in a bundle.
+                 * The behavior of the properties loader service is explained in the Acceleo documentation
+                 * (Help -> Help Contents).
                  */
                  
                 for (int i = 2; i < args.length; i++) {
@@ -183,6 +189,11 @@
 
         //org.eclipse.emf.ecore.util.EcoreUtil.resolveAll(model);
 
+        /*
+         * If you want to check for potential errors in your models before the launch of the generation, you
+         * use the code below.
+         */
+
         //if (model != null && model.eResource() != null) {
         //    List<org.eclipse.emf.ecore.resource.Resource.Diagnostic> errors = model.eResource().getErrors();
         //    for (org.eclipse.emf.ecore.resource.Resource.Diagnostic diagnostic : errors) {
@@ -261,13 +272,38 @@
     @Override
     public List<String> getProperties() {
         /*
+         * If you want to change the content of this method, do NOT forget to change the "@generated"
+         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation
+         * of the Acceleo module with the main template that has caused the creation of this class will
+         * revert your modifications.
+         */
+
+        /*
          * TODO if your generation module requires access to properties files, add their qualified path to the list here.
-         * Properties files are expected to be in source folders, and the path here to be the qualified path as if referring
-         * to a Java class. For example, if you have a file named "messages.properties" in package "org.eclipse.acceleo.sample",
-         * the path that needs be added to this list is "org.eclipse.acceleo.sample.messages". If you want to change the content
-         * of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method to "@generated NOT".
-         * Without this new tag, any compilation of the Acceleo module with the main template that has caused the creation of 
-         * this class will revert your modifications.
+         * 
+         * Properties files can be located in an Eclipse plug-in or in the file system (all Acceleo projects are Eclipse
+         * plug-in). In order to use properties files located in an Eclipse plugin, you need to add the path of the properties
+         * files to the "propertiesFiles" list:
+         * 
+         * final String prefix = "platform:/plugin/";
+         * final String pluginName = "org.eclipse.acceleo.module.sample";
+         * final String packagePath = "/org/eclipse/acceleo/module/sample/properties/";
+         * final String fileName = "default.properties";
+         * propertiesFiles.add(prefix + pluginName + packagePath + fileName);
+         * 
+         * With this mechanism, you can load properties files from your plugin or from another plugin.
+         * 
+         * You may want to load properties files from the file system, for that you need to add the absolute path of the file:
+         * 
+         * propertiesFiles.add("C:\Users\MyName\MyFile.properties");
+         * 
+         * If you want to let your users add properties files located in the same folder as the model:
+         *
+         * if (EMFPlugin.IS_ECLIPSE_RUNNING && model != null && model.eResource() != null) { 
+         *     propertiesFiles.addAll(AcceleoEngineUtils.getPropertiesFilesNearModel(model.eResource()));
+         * }
+         * 
+         * To learn more about Properties Files, have a look at the Acceleo documentation (Help -> Help Contents).
          */
         return propertiesFiles;
     }
@@ -305,35 +341,43 @@
     @Override
     public void registerPackages(ResourceSet resourceSet) {
         super.registerPackages(resourceSet);
-        //gdupe> The method isInWorkspace() does not exists in Helios. This avoid
-        // to be install MoDisco on an Helios. The code generator is not used in a
-        // workspace context : we do not need explicit load of the meta-models
-        // That why I've commented the following lines.
-        /*
         if (!isInWorkspace(org.eclipse.modisco.infra.discovery.catalog.CatalogPackage.class)) {
             resourceSet.getPackageRegistry().put(org.eclipse.modisco.infra.discovery.catalog.CatalogPackage.eINSTANCE.getNsURI(), org.eclipse.modisco.infra.discovery.catalog.CatalogPackage.eINSTANCE);
         }
         if (!isInWorkspace(org.eclipse.modisco.infra.discovery.launch.LaunchPackage.class)) {
             resourceSet.getPackageRegistry().put(org.eclipse.modisco.infra.discovery.launch.LaunchPackage.eINSTANCE.getNsURI(), org.eclipse.modisco.infra.discovery.launch.LaunchPackage.eINSTANCE);
         }
-        */
+        
         /*
-         * TODO If you need additional package registrations, you can register them here. The following line
-         * (in comment) is an example of the package registration for UML. If you want to change the content
-         * of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method to
-         * "@generated NOT". Without this new tag, any compilation of the Acceleo module with the main template
-         * that has caused the creation of this class will revert your modifications. You can use the method
-         * "isInWorkspace(Class c)" to check if the package that you are about to register is in the workspace.
-         * To register a package properly, please follow the following conventions:
+         * If you want to change the content of this method, do NOT forget to change the "@generated"
+         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation
+         * of the Acceleo module with the main template that has caused the creation of this class will
+         * revert your modifications.
+         */
+        
+        /*
+         * If you need additional package registrations, you can register them here. The following line
+         * (in comment) is an example of the package registration for UML.
          * 
+         * You can use the method  "isInWorkspace(Class c)" to check if the package that you are about to
+         * register is in the workspace.
+         * 
+         * To register a package properly, please follow the following conventions:
+         *
+         * If the package is located in another plug-in, already installed in Eclipse. The following content should
+         * have been generated at the beginning of this method. Do not register the package using this mechanism if
+         * the metamodel is located in the workspace.
+         *  
          * if (!isInWorkspace(UMLPackage.class)) {
          *     // The normal package registration if your metamodel is in a plugin.
          *     resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
-         * } else {
-         *     // The package registration that will be used if the metamodel is not deployed in a plugin.
-         *     // This should be used if your metamodel is in your workspace and if you are using binary resource serialization.
-         *     resourceSet.getPackageRegistry().put("/myproject/myfolder/mysubfolder/MyUMLMetamodel.ecore", UMLPackage.eINSTANCE);
          * }
+         * 
+         * If the package is located in another project in your workspace, the plugin containing the package has not
+         * been register by EMF and Acceleo should register it automatically. If you want to use the generator in
+         * stand alone, the regular registration (seen a couple lines before) is needed.
+         * 
+         * To learn more about Package Registration, have a look at the Acceleo documentation (Help -> Help Contents).
          */
     }
 
@@ -348,11 +392,19 @@
     public void registerResourceFactories(ResourceSet resourceSet) {
         super.registerResourceFactories(resourceSet);
         /*
+         * If you want to change the content of this method, do NOT forget to change the "@generated"
+         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation
+         * of the Acceleo module with the main template that has caused the creation of this class will
+         * revert your modifications.
+         */
+        
+        /*
          * TODO If you need additional resource factories registrations, you can register them here. the following line
-         * (in comment) is an example of the resource factory registration for UML. If you want to change the content
-         * of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method to "@generated NOT".
-         * Without this new tag, any compilation of the Acceleo module with the main template that has caused the creation
-         * of this class will revert your modifications. 
+         * (in comment) is an example of the resource factory registration for UML.
+         *
+         * If you want to use the generator in stand alone, the resource factory registration will be required.
+         *  
+         * To learn more about the registration of Resource Factories, have a look at the Acceleo documentation (Help -> Help Contents). 
          */ 
         
         // resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
diff --git a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.mtl b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.mtl
index 1dd5b60..a694c4c 100644
--- a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.mtl
+++ b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.mtl
@@ -5,15 +5,17 @@
  * Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
- * Contributors: Guillaume Doux - INRIA - Initial API and implementation
- * 
+ * Contributors:
+ *    Guillaume Doux (INRIA) - Initial API and implementation
+ *    Grégoire Dupé (Mia-Software) - Bug 482672 - Benchmark command line interface
+ *    Grégoire Dupé (Mia-Software) - Bug 482857 - Discoverer Benchmark Report : wrong namespaces
  ******************************************************************************/ /]
-[module HtmlReport('http://www.eclipse.org/modisco/infra/discovery/0.1.incubation/benchmark','http://www.eclipse.org/MoDisco/Discovery/0.1.incubation/discovery/catalog','http://www.eclipse.org/MoDisco/Discovery/0.1.incubation/discovery/launch')/]
+[module HtmlReport('http://www.eclipse.org/modisco/infra/discovery/benchmark/0.11.incubation/internal/benchmark','http://www.eclipse.org/MoDisco/Discovery/0.1.incubation/discovery/catalog','http://www.eclipse.org/MoDisco/Discovery/0.1.incubation/discovery/launch')/]
 
-[query public maxExecutionTime (iterations : Set(DiscoveryIteration)) : Real = invoke('org.eclipse.modisco.infra.discovery.benchmark.reporting.internal.ReportingUtilities', 'maxExecutionTime(java.util.Collection)', Sequence{iterations})/]
-[query public maxSaveTime (iterations : Set(DiscoveryIteration)) : Real = invoke('org.eclipse.modisco.infra.discovery.benchmark.reporting.internal.ReportingUtilities', 'maxSaveTime(java.util.Collection)', Sequence{iterations})/]
-[query public sizeWithUnit (value : Real) : String = invoke('org.eclipse.modisco.infra.discovery.benchmark.reporting.internal.ReportingUtilities', 'sizeWithUnit(java.lang.Double)', Sequence{value})/]
-[query public timeWithUnit (value : Real) : String = invoke('org.eclipse.modisco.infra.discovery.benchmark.reporting.internal.ReportingUtilities', 'timeWithUnit(java.lang.Double)', Sequence{value})/]
+[query public maxExecutionTime (iterations : Set(DiscoveryIteration)) : Real = invoke('org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.ReportingUtilities', 'maxExecutionTime(java.util.Collection)', Sequence{iterations})/]
+[query public maxSaveTime (iterations : Set(DiscoveryIteration)) : Real = invoke('org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.ReportingUtilities', 'maxSaveTime(java.util.Collection)', Sequence{iterations})/]
+[query public sizeWithUnit (value : Real) : String = invoke('org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.ReportingUtilities', 'sizeWithUnit(java.lang.Double)', Sequence{value})/]
+[query public timeWithUnit (value : Real) : String = invoke('org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.ReportingUtilities', 'timeWithUnit(java.lang.Double)', Sequence{value})/]
 
 [template public HtmlReport(b : Benchmark)]
 	
