diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java
index 5e336bd62f5622a37f9f7aa3ee5ee6d58c7e627b..756073c43933a14686576fb86313b30fa7a9e0cf 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java
@@ -14,6 +14,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -65,8 +67,8 @@ public class BenchmarkJobManager {
 			}
 			
 			@Override
-			public boolean fileExists(Path filePath) {
-				File f = new File(filePath.toString());
+			public boolean fileExists(String filePath) {
+				File f = new File(job.getDirectory().resolve(filePath).toString());
 				return f.exists() && !f.isDirectory();
 			}
 		};
@@ -189,6 +191,10 @@ public class BenchmarkJobManager {
 				break;
 			}
 			scanner.close();
+			
+			// Order tasks chronologically
+			List<String> chronologicList = Constants.STATISTICS_TASK_NAME_MAP.keySet().stream().collect(Collectors.toList());
+			Collections.sort(tasks, Comparator.comparingInt(task -> chronologicList.indexOf(task.getDescription())));
 		}
 		
 		private void setDownloaded(boolean b) {
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java
index 2dcdc852be4c5132da36037174118f856e30e3e9..9ecfeb47fe8183f8c78e75466f97ce1cd173ba26 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java
@@ -1,6 +1,6 @@
 package cz.it4i.fiji.haas_spim_benchmark.core;
 
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 public interface Constants {
@@ -22,7 +22,7 @@ public interface Constants {
 	String STATISTICS_RESOURCES_WALL_TIME = "resources_used.walltime";
 	String STATISTICS_RESOURCES_CPU_PERCENTAGE = "resources_used.cpupercent";
 	
-	Map<String, String> STATISTICS_TASK_NAME_MAP = new HashMap<String, String>() {
+	Map<String, String> STATISTICS_TASK_NAME_MAP = new LinkedHashMap<String, String>() {
 		private static final long serialVersionUID = 1L;
 	{
 		put("define_xml_tif", "Define dataset");
@@ -36,6 +36,7 @@ public interface Constants {
 		put("define_output", "Define output");
 		put("hdf5_xml_output", "Define hdf5 output");
 		put("resave_hdf5_output", "Resave output to hdf5");
+		put("done", "Done");
 	}};
 	String STATISTICS_SUMMARY_FILENAME = "summary.csv";
 }
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java
index 39151ca434b506f873741dae844360934863ffbb..5c01528dc5befd2462c2ee6c0eb1f7ca205181e6 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java
@@ -5,5 +5,5 @@ import java.nio.file.Path;
 import cz.it4i.fiji.haas.HaaSOutputHolder;
 
 public interface SPIMComputationAccessor extends HaaSOutputHolder {
-	boolean fileExists(Path fileName);
+	boolean fileExists(String fileName);
 }
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java
index af869e56765636d16a861800e6a58341e7449fe5..82fd4bce4a05f7096db730aa6a5fd5c00d154ba4 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java
@@ -24,6 +24,7 @@ public class TaskComputation {
 		}
 	}
 
+	private final SPIMComputationAccessor computationAccessor;
 	private final Task task;
 	private final int timepoint;
 	private final Collection<String> inputs;
@@ -34,14 +35,16 @@ public class TaskComputation {
 	//TASK 1011 what states will be defined and how it will be defined
 	private JobState state = JobState.Unknown;
 	
-	public TaskComputation(SPIMComputationAccessor outputHolder, Task task, int timepoint) {
+	public TaskComputation(SPIMComputationAccessor computationAccessor, Task task, int timepoint) {
+		this.computationAccessor = computationAccessor;
 		this.task = task;
-		this.timepoint = timepoint;		
-		ParsedTaskComputationValues parsedValues = parseStuff(outputHolder);
+		this.timepoint = timepoint;
+		ParsedTaskComputationValues parsedValues = parseStuff(computationAccessor);
 		this.inputs = parsedValues.inputs;
 		this.outputs = parsedValues.outputs;
 		this.logs = parsedValues.logs;
 		this.id = parsedValues.id;
+		updateState();
 	}
 
 	public JobState getState() {
@@ -59,14 +62,39 @@ public class TaskComputation {
 	private void updateState() {
 		//TASK 1011 This should never happen, add some error handling to resolveId()
 		if (id == null) {
+			state = JobState.Unknown;
 			return;
 		}
 		
-		//String snakeOutput = outputHolder.getActualOutput();
-
-		//TASK 1011 
-		//resolve if job is queued (defined id), started (exists log file), finished (in log is Finished job 10.) or
-		//or failed (some error in log)
+		state = JobState.Queued;
+		
+		// Check whether a log file exists
+		if (!logs.stream().anyMatch(logFile -> computationAccessor.fileExists(logFile))) {
+			return;
+		}
+		
+		state = JobState.Running;
+		
+		// Check whether the corresponding job has finished
+		final String OUTPUT_PARSING_FINISHED_JOB = "Finished job ";
+		final String desiredPatternFinishedJob = OUTPUT_PARSING_FINISHED_JOB + id.toString();
+		final String OUTPUT_PARSING_ERRONEOUS_JOB = "Error job ";
+		final String desiredPatternErroneousJob = OUTPUT_PARSING_ERRONEOUS_JOB + id.toString();
+		String currentLine;
+		Scanner scanner = new Scanner(computationAccessor.getActualOutput());
+		while (scanner.hasNextLine()) {
+			currentLine = scanner.nextLine();
+			if (currentLine.contains(desiredPatternErroneousJob)) {
+				state = JobState.Failed;
+				break;
+			} else if (currentLine.contains(desiredPatternFinishedJob)) {
+				state = JobState.Finished;
+				break;
+			}
+		}
+		scanner.close();
+		
+		return;
 	}
 
 	private Long getId() {