diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/HaaSOutputHolderImpl.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/HaaSOutputHolderImpl.java
index b2a5b68aab9b4e281678297c6d00f14ed97990fb..f127a6f8ad2cf99234a7d324ebe236dc3184720f 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/HaaSOutputHolderImpl.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/HaaSOutputHolderImpl.java
@@ -10,7 +10,6 @@ public class HaaSOutputHolderImpl implements HaaSOutputHolder {
 	private HaaSOutputSource source;
 	private SynchronizableFileType type;
 	public HaaSOutputHolderImpl(HaaSOutputSource source, SynchronizableFileType typeForHold) {
-		super();
 		this.source = source;
 		this.type = typeForHold;
 	}
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
index cecce16bc731b00f077ef5e3ff05b9dc43e088cd..aae1edd108273f5c0373a786f85c77e709ca6786 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
@@ -5,6 +5,7 @@ import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -213,7 +214,6 @@ public class Job {
 		private Progress progress;
 
 		public P_ProgressNotifierAdapter(Progress progress) {
-			super();
 			this.progress = progress;
 		}
 
@@ -243,6 +243,10 @@ public class Job {
 
 	}
 
+	public Collection<String> getChangedFiles() {
+		return haasClientSupplier.get().getChangedFiles(getId());
+	}
+
 	
 
 	
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
index 118fc52193e8a90bbec09c7cb0b955802672969d..0c627041ded87e945909f82191b9dc3aaf8eeeeb 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
@@ -102,7 +102,6 @@ public class JobManager {
 		private long offset;
 
 		public JobSynchronizableFile(SynchronizableFileType type, long offset) {
-			super();
 			this.type = type;
 			this.offset = offset;
 		}
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/PropertyHolder.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/PropertyHolder.java
index f3ccf7bc6614ed7551dac840b3efb355468df364..b57471fe24dcf5f9fa16d430b00ef68f93e98a64 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/PropertyHolder.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/PropertyHolder.java
@@ -13,7 +13,6 @@ public class PropertyHolder {
 	private Properties properties;
 
 	public PropertyHolder(Path storage) {
-		super();
 		this.storage = storage;
 	}
 
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueAdapter.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueAdapter.java
index 116c0290b8d361942928c6d1298bcd01a386d3a8..e06944a29f196186c71e00b41f3f163931a70418 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueAdapter.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueAdapter.java
@@ -17,7 +17,6 @@ public class ObservableValueAdapter<S, T> implements ObservableValue<T> {
 	private Map<ChangeListener<? super T>, ChangeListener<? super S>> mapOfListeners = new HashMap<>();
 
 	public ObservableValueAdapter(ObservableValue<S> decorated, Function<S, T> map) {
-		super();
 		this.adapted = decorated;
 		this.transformation = map;
 	}
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java
index abd2d4ec3d4816db0201e8a5dcd67bdd4c796896..a2d273ab1996b6482fb22d71831bcbf46b737741 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java
@@ -18,7 +18,6 @@ public class ObservableValueRegistry<T> {
 	
 	public ObservableValueRegistry(Function<T, UpdateStatus> updateFunction,Function<T,Object> stateProvider,
 			Consumer<T> removeConsumer) {
-		super();
 		this.updateFunction = updateFunction;
 		this.stateProvider = stateProvider;
 		this.removeConsumer = t-> {
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/TableViewContextMenu.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/TableViewContextMenu.java
index 1fbcf4eed3fb2bf331ab8d0e68c7463ddb379c5d..ed828856dc41ca8c3f311de33f0fc5849d26a362 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/TableViewContextMenu.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/TableViewContextMenu.java
@@ -55,7 +55,6 @@ public class TableViewContextMenu<T> {
 		private Predicate<T> enableHandler;
 
 		public P_MenuItem(String text, Consumer<T> eventHandler, Predicate<T> enableHandler) {
-			super();
 			this.enableHandler = enableHandler;
 			item = new MenuItem(text);
 			item.setOnAction(e -> eventHandler.accept(getSelectedItem()));
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/UpdatableObservableValue.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/UpdatableObservableValue.java
index c1cb5c2295529e68bf04583ed6dee602bddaa7ec..a4c41a15cfa241aa801cfcf6a7b5a5d33e906d30 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/UpdatableObservableValue.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/UpdatableObservableValue.java
@@ -17,7 +17,6 @@ public class UpdatableObservableValue<T> extends ObservableValueBase<T> {
 
 	public UpdatableObservableValue(T wrapped, Function<T, UpdateStatus> updateFunction,
 			Function<T, Object> stateProvider) {
-		super();
 		this.wrapped = wrapped;
 		this.updateFunction = updateFunction;
 		this.stateProvider = stateProvider;
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
index 62a5211c87463cf51b677d7099e9e368c88830af..97c7d31ef4b95b06af252393f7e63a9d297df049 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
@@ -207,7 +207,6 @@ public class HaaSClient {
 	}
 
 	public HaaSClient(Settings settings) {
-		super();
 		this.settings = settings;
 		this.templateId = settings.getTemplateId();
 		this.timeOut = settings.getTimeout();
@@ -434,7 +433,6 @@ public class HaaSClient {
 		private ProgressNotifier notifier;
 
 		public P_ProgressNotifierDecorator(ProgressNotifier notifier) {
-			super();
 			this.notifier = notifier;
 		}
 
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java
index ca8b6e99760b45f5ea0f129c988bf9a07067196d..6d59b42f6240640ab78a8f692f43d17e00e39bad 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java
@@ -32,7 +32,6 @@ class HaaSFileTransferImp implements HaaSFileTransfer {
 
 	public HaaSFileTransferImp(FileTransferMethodExt ft, String sessionId, long jobId, FileTransferWsSoap fileTransfer,
 			ScpClient scpClient, ProgressNotifier notifier) {
-		super();
 		this.ft = ft;
 		this.scpClient = scpClient;
 		this.fileTransfer = fileTransfer;
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/TransferFileProgressForHaaSClient.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/TransferFileProgressForHaaSClient.java
index 74a1fe5d18e69e58a468b24f95d04bc4d05d1f25..40fec855c342e8740f64aded4faf2f3c795a4b1c 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/TransferFileProgressForHaaSClient.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/TransferFileProgressForHaaSClient.java
@@ -15,7 +15,6 @@ class TransferFileProgressForHaaSClient implements TransferFileProgress {
 	
 	
 	public TransferFileProgressForHaaSClient(long totalSize, ProgressNotifier notifier) {
-		super();
 		this.totalSize = totalSize;
 		this.notifier = notifier;
 	}
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 756073c43933a14686576fb86313b30fa7a9e0cf..54e47a725e4c1abb97015b31b8717e6524c83b0c 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
@@ -1,7 +1,12 @@
 package cz.it4i.fiji.haas_spim_benchmark.core;
 
+import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.BENCHMARK_RESULT_FILE;
+import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.HAAS_UPDATE_TIMEOUT;
+import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.SPIM_OUTPUT_FILENAME_PATTERN;
+import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.STATISTICS_TASK_NAME_MAP;
+import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.UI_TO_HAAS_FREQUENCY_UPDATE_RATIO;
+
 import java.io.BufferedReader;
-import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -56,34 +61,34 @@ public class BenchmarkJobManager {
 		
 		private List<Task> tasks;
 
-		private SPIMComputationAccessor computationAccessor = new SPIMComputationAccessor() {
-			
-			private HaaSOutputHolder outputOfSnakemake =
-					new HaaSOutputHolderImpl(BenchmarkJob.this, SynchronizableFileType.StandardErrorFile);
-			
-			@Override
-			public String getActualOutput() {
-				return outputOfSnakemake.getActualOutput();
-			}
-			
-			@Override
-			public boolean fileExists(String filePath) {
-				File f = new File(job.getDirectory().resolve(filePath).toString());
-				return f.exists() && !f.isDirectory();
-			}
-		};
+		private SPIMComputationAccessor computationAccessor;
 		
 		
 		public BenchmarkJob(Job job) {
-			super();
 			this.job = job;
+			computationAccessor = new SPIMComputationAccessor() {
+				
+				private HaaSOutputHolder outputOfSnakemake =
+						new HaaSOutputHolderImpl(BenchmarkJob.this, SynchronizableFileType.StandardErrorFile);
+				
+				@Override
+				public String getActualOutput() {
+					return outputOfSnakemake.getActualOutput();
+				}
+				
+				public java.util.Collection<String> getChangedFiles() {
+					return job.getChangedFiles();
+				};
+			};
+			
+			computationAccessor = new SPIMComputationAccessorDecoratorWithTimeout(computationAccessor, HAAS_UPDATE_TIMEOUT/UI_TO_HAAS_FREQUENCY_UPDATE_RATIO);
 		}
 
 		public void startJob(Progress progress) throws IOException {
 			job.uploadFilesByName(Arrays.asList(Constants.CONFIG_YAML), progress);
 			String outputName = getOutputName(job.openLocalFile(Constants.CONFIG_YAML));
 			job.submit();
-			job.setProperty(Constants.SPIM_OUTPUT_FILENAME_PATTERN, outputName);
+			job.setProperty(SPIM_OUTPUT_FILENAME_PATTERN, outputName);
 			setDownloaded(false);
 		}
 
@@ -93,7 +98,7 @@ public class BenchmarkJobManager {
 
 		public void downloadData(Progress progress) throws IOException {
 			if (job.getState() == JobState.Finished) {
-				String filePattern = job.getProperty(Constants.SPIM_OUTPUT_FILENAME_PATTERN);
+				String filePattern = job.getProperty(SPIM_OUTPUT_FILENAME_PATTERN);
 				job.download(downloadFinishedData(filePattern), progress);
 			} else if (job.getState() == JobState.Failed) {
 				job.download(downloadFailedData(), progress);
@@ -104,7 +109,7 @@ public class BenchmarkJobManager {
 
 		public void downloadStatistics(Progress progress) throws IOException {
 			job.download(BenchmarkJobManager.downloadStatistics(), progress);
-			Path resultFile = job.getDirectory().resolve(Constants.BENCHMARK_RESULT_FILE);
+			Path resultFile = job.getDirectory().resolve(BENCHMARK_RESULT_FILE);
 			if (resultFile != null)
 				BenchmarkJobManager.formatResultFile(resultFile);
 		}
@@ -193,7 +198,7 @@ public class BenchmarkJobManager {
 			scanner.close();
 			
 			// Order tasks chronologically
-			List<String> chronologicList = Constants.STATISTICS_TASK_NAME_MAP.keySet().stream().collect(Collectors.toList());
+			List<String> chronologicList = STATISTICS_TASK_NAME_MAP.keySet().stream().collect(Collectors.toList());
 			Collections.sort(tasks, Comparator.comparingInt(task -> chronologicList.indexOf(task.getDescription())));
 		}
 		
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 9ecfeb47fe8183f8c78e75466f97ce1cd173ba26..300159a1dfd7ede7ee2323dbfb2b548cf99704ea 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
@@ -4,7 +4,8 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 public interface Constants {
-	long HAAS_UPDATE_TIMEOUT = 30000;
+	int HAAS_UPDATE_TIMEOUT = 30000;
+	short UI_TO_HAAS_FREQUENCY_UPDATE_RATIO = 10;
 	String HAAS_JOB_NAME = "HaaSSPIMBenchmark";
 	int HAAS_CLUSTER_NODE_TYPE = 6;
 	int HAAS_TEMPLATE_ID = 4;
@@ -39,4 +40,5 @@ public interface Constants {
 		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/PipelineBase.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/PipelineBase.java
index 1e3fc82ddf6815d1058d3832643cf6407409bb86..3de8b024c2eba53fcbd2009c254449537f77842f 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/PipelineBase.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/PipelineBase.java
@@ -9,7 +9,6 @@ abstract public class PipelineBase<T extends PipelineBase<?,?>,S> {
 	
 	
 	public PipelineBase( S id) {
-		super();
 		this.id = id;
 	}
 
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 5c01528dc5befd2462c2ee6c0eb1f7ca205181e6..b1dc0c1610248f7a639bc8106958db13622d74e7 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
@@ -1,9 +1,13 @@
 package cz.it4i.fiji.haas_spim_benchmark.core;
 
-import java.nio.file.Path;
+import java.util.Collection;
 
 import cz.it4i.fiji.haas.HaaSOutputHolder;
 
 public interface SPIMComputationAccessor extends HaaSOutputHolder {
-	boolean fileExists(String fileName);
+	default boolean fileExists(String fileName) {
+		return getChangedFiles().contains(fileName); 
+	}
+	
+	Collection<String> getChangedFiles();
 }
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java
new file mode 100644
index 0000000000000000000000000000000000000000..80fe9fcb2aa36496ef016fbe1af51bb6f5afb561
--- /dev/null
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java
@@ -0,0 +1,59 @@
+package cz.it4i.fiji.haas_spim_benchmark.core;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.function.Function;
+
+public class SPIMComputationAccessorDecoratorWithTimeout implements SPIMComputationAccessor {
+	private long intervalForQueryInMs;
+
+	private P_ResultCacheHolder<String> outputCache;
+
+	private P_ResultCacheHolder<Set<String>> changedFilesCache;
+
+	public SPIMComputationAccessorDecoratorWithTimeout(SPIMComputationAccessor decorated, long intervalForQueryInMs) {
+		this.intervalForQueryInMs = intervalForQueryInMs;
+		outputCache = new P_ResultCacheHolder<>(x -> decorated.getActualOutput());
+		changedFilesCache = new P_ResultCacheHolder<>(set -> {
+			if (set == null) {
+				set = new HashSet<>();
+			} else {
+				set.clear();
+			}
+			set.addAll(decorated.getChangedFiles());
+			return set;
+		});
+	}
+
+	@Override
+	public String getActualOutput() {
+
+		return outputCache.getResult();
+	}
+
+	@Override
+	public Collection<String> getChangedFiles() {
+		return changedFilesCache.getResult();
+	}
+
+	private class P_ResultCacheHolder<T> {
+		private Long lastQuery;
+		private T value;
+		private Function<T, T> producer;
+
+		public P_ResultCacheHolder(Function<T, T> producer) {
+			this.producer = producer;
+		}
+
+		public T getResult() {
+			long time = System.currentTimeMillis();
+
+			if (lastQuery == null || (time - lastQuery) > intervalForQueryInMs) {
+				value = producer.apply(value);
+				lastQuery = time;
+			}
+			return value;
+		}
+	}
+}
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/SPIMPipelineProgressViewController.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/SPIMPipelineProgressViewController.java
index c69cc99751738d145c6ba8859fe52239f30d1731..1c9d27ab2760c3a3120103476d1a3f3a0e4de2cc 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/SPIMPipelineProgressViewController.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/SPIMPipelineProgressViewController.java
@@ -3,7 +3,10 @@ package cz.it4i.fiji.haas_spim_benchmark.ui;
 import java.awt.Window;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.function.Function;
@@ -20,9 +23,40 @@ import javafx.fxml.FXML;
 import javafx.scene.control.TableCell;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
+import javafx.scene.paint.Color;
 
 public class SPIMPipelineProgressViewController implements FXFrame.Controller {
 
+	protected static final String RUNNING_STATE_COMPUTATION = Color.YELLOW.toString();
+
+	protected static final String FINISHED_STATE_COMPUTATION = null;
+
+	protected static final String UNKNOWN_STATE_COMPUTATION = Color.GRAY.toString();
+
+	private static final Map<JobState, Color> taskExecutionState2Color = new HashMap<>();
+	static {
+		taskExecutionState2Color.put(JobState.Running, Color.YELLOW);
+		taskExecutionState2Color.put(JobState.Finished, Color.GREEN);
+		taskExecutionState2Color.put(JobState.Failed, Color.RED);
+		taskExecutionState2Color.put(JobState.Unknown, Color.GRAY);
+	}
+	
+	private static String getColorTaskExecState(JobState jobState) {
+		Color result = null;
+		if(jobState == null) {
+			result = Color.GRAY;
+		} else {
+			result = taskExecutionState2Color.get(jobState);
+		}
+		return toCss(result != null? result : Color.ORANGE);
+	}
+	
+	private static String toCss(Color color) {
+		return "rgb(" + Math.round(color.getRed() * 255.0) + "," 
+				      + Math.round(color.getGreen() * 255.0) + "," 
+				      + Math.round(color.getBlue() * 255.0) + ")";
+	}
+
 	@FXML
 	private TableView<ObservableValue<Task>> tasks;
 
@@ -49,7 +83,6 @@ public class SPIMPipelineProgressViewController implements FXFrame.Controller {
 		this.job = job;
 	}
 
-	@SuppressWarnings("unchecked")
 	private void fillTable() {
 		List<Task> tasks = job.getTasks();
 		if (tasks == null) {
@@ -58,7 +91,7 @@ public class SPIMPipelineProgressViewController implements FXFrame.Controller {
 				public void run() {
 					fillTable();
 				}
-			}, Constants.HAAS_UPDATE_TIMEOUT / 10);
+			}, Constants.HAAS_UPDATE_TIMEOUT / Constants.UI_TO_HAAS_FREQUENCY_UPDATE_RATIO);
 		} else {
 			List<TaskComputation> computations = tasks.stream().map(task -> task.getComputations())
 					.collect(Collectors.<List<TaskComputation>>maxBy((a, b) -> a.size() - b.size())).get();
@@ -69,29 +102,7 @@ public class SPIMPipelineProgressViewController implements FXFrame.Controller {
 				this.tasks.getColumns().add(new TableColumn<>(tc.getTimepoint() + ""));
 				int index = i++;
 
-				FXFrame.Controller.setCellValueFactory(this.tasks, index, (Function<Task, JobState>) v -> {
-					if (v.getComputations().size() >= index) {
-						return v.getComputations().get(index - 1).getState();
-					} else {
-						return null;
-					}
-				});
-				((TableColumn<ObservableValue<Task>, JobState>)this.tasks.getColumns().get(index)).setCellFactory(column->new TableCell<ObservableValue<Task>,JobState>(){
-					@Override
-			        protected void updateItem(JobState state, boolean empty) {
-						if (state == null || empty) {
-			                setText(null);
-			                setStyle("");
-			            } else {
-			                // Format date.
-			                setText(state + "");
-			                if(state == JobState.Unknown) {
-			                	setStyle("-fx-background-color: yellow");
-			                }
-			            }
-						
-					}
-				});
+				constructCellFactory(index);
 
 			}
 
@@ -107,6 +118,30 @@ public class SPIMPipelineProgressViewController implements FXFrame.Controller {
 		}
 	}
 
+	@SuppressWarnings("unchecked")
+	private void constructCellFactory(int index) {
+		FXFrame.Controller.setCellValueFactory(this.tasks, index, (Function<Task, Optional<JobState>>) v -> {
+			if (v.getComputations().size() >= index) {
+				return Optional.of(v.getComputations().get(index - 1).getState());
+			} else {
+				return null;
+			}
+		});
+		((TableColumn<ObservableValue<Task>, Optional<JobState>>)this.tasks.getColumns().get(index)).setCellFactory(column->new TableCell<ObservableValue<Task>,Optional<JobState>>(){
+			@Override
+		    protected void updateItem(Optional<JobState> state, boolean empty) {
+				if (state == null || empty) {
+		            setText(null);
+		            setStyle("");
+		        } else {
+		            // Format date.
+		            setText( "" + (state.isPresent()?state.get():"N/A"));
+		            setStyle("-fx-background-color: " + getColorTaskExecState(state.get()));
+		        } 
+			}
+		});
+	}
+
 	private void updateTable() {
 		registry.update();
 	}
diff --git a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java
index 092a4a48a7a148c82d81d46b5acfc817cbb52431..49247986b3fd2a1234021e7647ea23366173ad1c 100644
--- a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java
+++ b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java
@@ -40,7 +40,6 @@ public class ScpClient implements Closeable {
 	}
 
 	public ScpClient(String hostName, String username, Identity privateKeyFile) throws JSchException {
-		super();
 		init(hostName, username, privateKeyFile);
 	}