diff --git a/.gitignore b/.gitignore
index e00ec70b1681e8e921195d51802b1a297943e2fc..af76913d69121f6761533b4e5df9ad850f488ba2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,7 @@
 .classpath
 .settings/
 target/
+
+*.bench
+
+benchmark-collector/build\.sh
diff --git a/benchmark-collector/.gitignore b/benchmark-collector/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53
--- /dev/null
+++ b/benchmark-collector/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/benchmark-collector/pom.xml b/benchmark-collector/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..beadd8d8f330c1d6550259ecd32826110b2f817b
--- /dev/null
+++ b/benchmark-collector/pom.xml
@@ -0,0 +1,42 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>it4i-fiji</groupId>
+	<artifactId>benchmark-collector</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<plugins>
+			<plugin>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.7.0</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>3.1.0</version>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+						<configuration>
+							<transformers>
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+									<mainClass>it4i.fiji.benchmark_collector.Run</mainClass>
+								</transformer>
+							</transformers>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+
+	</build>
+</project>
\ No newline at end of file
diff --git a/benchmark-collector/src/it4i/fiji/benchmark_collector/Run.java b/benchmark-collector/src/it4i/fiji/benchmark_collector/Run.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b70fb909f8640b77ecba16829a66fcd2571b489
--- /dev/null
+++ b/benchmark-collector/src/it4i/fiji/benchmark_collector/Run.java
@@ -0,0 +1,55 @@
+package it4i.fiji.benchmark_collector;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+public class Run {
+	public static void main(String[] args) throws IOException {
+
+		try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(args[0]), "snakejob.*.*.sh.e*")) {
+			Pattern p = Pattern.compile("snakejob[\\.]([^\\.]+)[\\.][0-9]+[\\.]sh[\\.]e([0-9]*)");
+			Map<String, List<String>> taskName2Jobsid = new HashMap<>();
+			for (Path file : stream) {
+				String fileName = file.getFileName().toString();
+				Matcher m = p.matcher(fileName);
+				m.matches();
+				String taskName = m.group(1);
+				String jobId = m.group(2);
+				List<String> jobIds = taskName2Jobsid.computeIfAbsent(taskName, k -> new ArrayList<String>());
+				jobIds.add(jobId);
+			}
+			try (BufferedWriter pw = Files.newBufferedWriter(Paths.get(args[1]))) {
+				for (Entry<String, List<String>> entry : taskName2Jobsid.entrySet()) {
+					pw.write("Task name: " + entry.getKey() + "\n");
+					pw.write("Jobs count: " + entry.getValue().size() + "\n");
+					pw.write("Jobs: " + entry.getValue().stream().collect(Collectors.joining(", ")) + "\n");
+					for (String jobId : entry.getValue()) {
+						Process proc = new ProcessBuilder("qstat", "-xf", jobId).start();
+						try (BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
+							String line;
+							while (null != (line = br.readLine())) {
+								pw.write(line);
+								pw.newLine();
+							}
+						}
+					}
+
+				}
+			}
+		}
+	}
+}
diff --git a/benchmark-collector/src/it4i/fiji/benchmark_collector/package-info.java b/benchmark-collector/src/it4i/fiji/benchmark_collector/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..724dfa88663e9029db099778eac3f92cccfe9a76
--- /dev/null
+++ b/benchmark-collector/src/it4i/fiji/benchmark_collector/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * 
+ */
+/**
+ * @author koz01
+ *
+ */
+package it4i.fiji.benchmark_collector;
\ No newline at end of file
diff --git a/benchmark-collector/src/it4i/fiji/benchmark_extractor/Extractor.java b/benchmark-collector/src/it4i/fiji/benchmark_extractor/Extractor.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b9917692d3446e1bb74947a48629294981a455e
--- /dev/null
+++ b/benchmark-collector/src/it4i/fiji/benchmark_extractor/Extractor.java
@@ -0,0 +1,181 @@
+package it4i.fiji.benchmark_extractor;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.text.NumberFormat;
+import java.time.Duration;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+
+public class Extractor {
+
+	private static Logger log = Logger.getLogger(it4i.fiji.benchmark_extractor.Extractor.class.getName());
+
+	private Set<String> valuesToExport;
+	private Path inputFile;
+	private OutputStream out;
+
+	private Map<String, String> valueWithTypes;
+
+	public Extractor(Path inputFile, Set<String> valuesToExport, Map<String, String> valuesWithTypes, OutputStream out) {
+		this.inputFile = inputFile;
+		this.valuesToExport = valuesToExport;
+		this.valueWithTypes = valuesWithTypes;
+		this.out = out;
+	}
+
+	public void doExtraction() {
+		PrintWriter pw = new PrintWriter(out);
+		try (BufferedReader br = Files.newBufferedReader(inputFile)) {
+			String line;
+			P_Collector collector = new EmptyP_Collector();
+			P_ValueCollector valueCollector = new P_ValueCollector();
+			while (null != (line = br.readLine())) {
+				line = line.trim();
+				if (line.isEmpty()) {
+					continue;
+				}
+				if (line.startsWith("Task name:")) {
+					valueCollector.flush(collector);
+					collector.writeToOuput(pw);
+					collector = new P_Collector(line.split(":")[1].trim());
+				} else if (line.startsWith("Job Id:")) {
+					collector.addJob(line.split(":")[1].trim());
+				} else {
+					if (line.contains(" = ")) {
+						String[] tokens = line.split(" = ");
+						valueCollector.startNew(collector, tokens[0], tokens[1]);
+					} else {
+						valueCollector.append(line);
+					}
+				}
+			}
+		} catch (IOException e) {
+			log.log(Level.SEVERE, e.getMessage(), e);
+		} finally {
+			pw.flush();
+		}
+	}
+
+	private class P_Collector {
+		private List<String> ids = new LinkedList<>();
+		private Map<String, List<String>> values4Job = new HashMap<>();
+
+		private String taskName;
+
+		public P_Collector(String taskName) {
+			super();
+			this.taskName = taskName;
+		}
+
+		public void addJob(String jobId) {
+			ids.add(jobId);
+		}
+
+		public void addValue(String key, String value) {
+			List<String> values = values4Job.computeIfAbsent(key, this::factoryForMap);
+			values.add(value);
+		}
+
+		public void writeToOuput(PrintWriter out) {
+			addNullForMissingValues();
+			out.printf("Task name;%s\n", taskName);
+			out.printf("jobs #;%d\n", ids.size());
+			out.printf("job ids;%s\n", String.join(";", ids));
+			for (String key : valuesToExport) {
+				out.printf("%s;%s\n", key, String.join(";", convert(key,values4Job.get(key))));
+			}
+		}
+
+		private List<String> convert(String key, List<String> list) {
+			if(!valueWithTypes.containsKey(key)) {
+				return list;
+			}
+			Function<String, String> conversion = getConversion(valueWithTypes.get(key));
+			return list.stream().map(conversion).collect(Collectors.toList());
+		}
+
+		private Function<String, String> getConversion(String format) {
+			Locale l =new Locale("cs");
+			NumberFormat nf = NumberFormat.getNumberInstance(l);
+			switch(format) {
+			case "kb":
+				return str->nf.format(Double.parseDouble(str.replace("kb", ""))/1024.);
+			case "tm":
+				return str-> Duration.between(LocalTime.of(0, 0, 0), LocalTime.parse(str, DateTimeFormatter.ofPattern("H:m:s"))).getSeconds() + "";
+			}
+			
+			return str->str;
+
+		}
+
+		private void addNullForMissingValues() {
+			for (String key : valuesToExport) {
+				List<String> values = values4Job.computeIfAbsent(key, this::factoryForMap);
+				if (values.size() < ids.size()) {
+					values.add(null);
+				}
+			}
+
+		}
+
+		private List<String> factoryForMap(String key) {
+			return new LinkedList<>();
+		}
+	}
+
+	private class EmptyP_Collector extends P_Collector {
+
+		public EmptyP_Collector() {
+			super(null);
+		}
+
+		@Override
+		public void addValue(String key, String value) {
+		}
+
+		@Override
+		public void writeToOuput(PrintWriter out) {
+		}
+
+	}
+
+	private class P_ValueCollector {
+		private String key;
+		private StringBuilder value = new StringBuilder();
+
+		public void flush(P_Collector collector) {
+			if (key != null) {
+				collector.addValue(key, value.toString());
+				key = null;
+				value.setLength(0);
+			}
+		}
+
+		public void append(String line) {
+			if (key != null) {
+				this.value.append(line);
+			}
+		}
+
+		public void startNew(P_Collector collector, String key, String value) {
+			flush(collector);
+			this.key = key;
+			this.value.append(value);
+		}
+	}
+}
diff --git a/benchmark-collector/src/it4i/fiji/benchmark_extractor/Run.java b/benchmark-collector/src/it4i/fiji/benchmark_extractor/Run.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ab44bcb2e6cc6b6437b99e49c2c14109ac0c612
--- /dev/null
+++ b/benchmark-collector/src/it4i/fiji/benchmark_extractor/Run.java
@@ -0,0 +1,37 @@
+package it4i.fiji.benchmark_extractor;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class Run {
+
+	public static void main(String[] args) {
+		Path outputFile = Paths.get(args[0]);
+		List<String> arguments = getAsSublist(args,1, args.length);
+		Set<String> valuesToExport = new LinkedHashSet<>(arguments
+				                                         .stream()
+				                                         .map(str->str.contains(":")?str.split(":")[0]:str)
+				                                         .collect(Collectors.toList()));
+		Map<String,String> valuesWithTypes = arguments
+				                             .stream()
+				                             .filter(str->str.contains(":"))
+				                             .map(str->str.split(":"))
+				                             .collect(Collectors.toMap(pair->pair[0], pair->pair[1]));
+		new Extractor(outputFile, valuesToExport,valuesWithTypes,System.out).doExtraction();
+	}
+
+	private static List<String> getAsSublist(String[] args, int start, int end) {
+		List<String> result = new LinkedList<>();
+		for(int i = start; i <end; i++ ) {
+			result.add(args[i]);
+		}
+		return result;
+	}
+
+}
diff --git a/benchmark-collector/src/it4i/fiji/benchmark_extractor/package-info.java b/benchmark-collector/src/it4i/fiji/benchmark_extractor/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..753616504c00108c141df478c7a58b7725225f73
--- /dev/null
+++ b/benchmark-collector/src/it4i/fiji/benchmark_extractor/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * 
+ */
+/**
+ * @author koz01
+ *
+ */
+package it4i.fiji.benchmark_extractor;
\ No newline at end of file