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 8f8961048e40ffb3b7c3a9783e36d6d557bfff90..1b0eea1e19d7e24ff87de7bf18f653122ffdc0e7 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
@@ -22,12 +22,12 @@ import cz.it4i.fiji.haas.JobManager.JobManager4Job;
 import cz.it4i.fiji.haas.JobManager.JobSynchronizableFile;
 import cz.it4i.fiji.haas.data_transfer.Synchronization;
 import cz.it4i.fiji.haas_java_client.HaaSClient;
-import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile;
 import cz.it4i.fiji.haas_java_client.HaaSFileTransfer;
 import cz.it4i.fiji.haas_java_client.JobInfo;
 import cz.it4i.fiji.haas_java_client.JobState;
 import cz.it4i.fiji.haas_java_client.ProgressNotifier;
 import cz.it4i.fiji.haas_java_client.TransferFileProgressForHaaSClient;
+import cz.it4i.fiji.haas_java_client.UploadingFile;
 import cz.it4i.fiji.scpclient.TransferFileProgress;
 /***
  * TASK - napojit na UI 
@@ -50,22 +50,29 @@ public class Job {
 	
 	private static final String JOB_IS_UPLOADED = "job.uploaded";
 
-	public static boolean isJobPath(Path p) {
-		return isValidPath(p);
+	public static boolean isValidJobPath(Path path) {
+		try {
+			getJobId(path);
+		} catch (NumberFormatException e) {
+			return false;
+		}
+		return Files.isRegularFile(path.resolve(JOB_INFO_FILENAME));
 	}
 
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.Job.class);
 
 	private Path jobDir;
 
-	private Supplier<HaaSClient> haasClientSupplier;
+	private final Supplier<HaaSClient> haasClientSupplier;
 
-	// private JobState state;
-	// private Boolean needsDownload;
 	private JobInfo jobInfo;
+	
 	private Long jobId;
+	
 	private PropertyHolder propertyHolder;
-	private JobManager4Job jobManager;
+	
+	private final JobManager4Job jobManager;
+	
 	private Synchronization synchronization;
 	
 	
@@ -146,7 +153,7 @@ public class Job {
 	}
 
 	
-	public boolean canBeDownload() {
+	public boolean canBeDownloaded() {
 		return Boolean.parseBoolean(getProperty(JOB_CAN_BE_DOWNLOADED));
 	}
 	
@@ -416,16 +423,6 @@ public class Job {
 		jobInfo = getHaaSClient().obtainJobInfo(getId());
 	}
 
-	private static boolean isValidPath(Path path) {
-
-		try {
-			getJobId(path);
-		} catch (NumberFormatException e) {
-			return false;
-		}
-		return Files.isRegularFile(path.resolve(JOB_INFO_FILENAME));
-	}
-
 	private static long getJobId(Path path) {
 		return Long.parseLong(path.getFileName().toString());
 	}
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 0bb11806e120ae263f0c6de22b4d22050ee86b9e..862562e515eac0d1d48d6e81e87a5557f20324eb 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
@@ -12,7 +12,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import cz.it4i.fiji.haas_java_client.HaaSClient;
-import cz.it4i.fiji.haas_java_client.JobState;
 import cz.it4i.fiji.haas_java_client.Settings;
 import cz.it4i.fiji.haas_java_client.SynchronizableFileType;
 
@@ -22,18 +21,17 @@ public class JobManager implements Closeable {
 		boolean remove(Job job);
 	}
 
-	@SuppressWarnings("unused")
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.JobManager.class);
 
-	private Path workDirectory;
+	private final Path workDirectory;
 
 	private Collection<Job> jobs;
 
 	private HaaSClient haasClient;
 
-	private Settings settings;
+	private final Settings settings;
 
-	private JobManager4Job remover = new JobManager4Job() {
+	private final JobManager4Job remover = new JobManager4Job() {
 
 		@Override
 		public boolean remove(Job job) {
@@ -47,32 +45,18 @@ public class JobManager implements Closeable {
 	}
 
 	public Job createJob() throws IOException {
-		Job job;
-		if (jobs == null) {
-			jobs = new LinkedList<>();
-		}
-		jobs.add(job = new Job(remover, settings.getJobName(), workDirectory, this::getHaasClient));
-		return job;
+		Job result;
+		initJobsIfNecessary();
+		jobs.add(result = new Job(remover, settings.getJobName(), workDirectory, this::getHaasClient));
+		return result;
 	}
 
 	public Collection<Job> getJobs() {
-		if (jobs == null) {
-			jobs = new LinkedList<>();
-			try {
-				Files.list(this.workDirectory).filter(p -> Files.isDirectory(p) && Job.isJobPath(p)).forEach(p -> {
-					jobs.add(new Job(remover, p, this::getHaasClient));
-				});
-			} catch (IOException e) {
-				log.error(e.getMessage(), e);
-			}
-		}
+		initJobsIfNecessary();
 		return Collections.unmodifiableCollection(jobs);
 	}
 
-	public JobState getState(long id) {
-		return getHaasClient().obtainJobInfo(id).getState();
-	}
-
+	@Override
 	public void close() {
 		jobs.forEach(job -> job.close());
 	}
@@ -84,9 +68,22 @@ public class JobManager implements Closeable {
 		return haasClient;
 	}
 
+	private void initJobsIfNecessary() {
+		if (jobs == null) {
+			jobs = new LinkedList<>();
+			try {
+				Files.list(this.workDirectory).filter(p -> Files.isDirectory(p) && Job.isValidJobPath(p)).forEach(p -> {
+					jobs.add(new Job(remover, p, this::getHaasClient));
+				});
+			} catch (IOException e) {
+				log.error(e.getMessage(), e);
+			}
+		}
+	}
+
 	public static class JobSynchronizableFile {
-		private SynchronizableFileType type;
-		private long offset;
+		private final SynchronizableFileType type;
+		private final long offset;
 
 		public JobSynchronizableFile(SynchronizableFileType type, long offset) {
 			this.type = type;
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 b57471fe24dcf5f9fa16d430b00ef68f93e98a64..9a369111477ec5169109d3d57538f25e2117868a 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
@@ -9,7 +9,7 @@ import java.nio.file.StandardOpenOption;
 import java.util.Properties;
 
 public class PropertyHolder {
-	private Path storage;
+	private final Path storage;
 	private Properties properties;
 
 	public PropertyHolder(Path storage) {
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/UploadingFileFromResource.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/UploadingFileFromResource.java
index 429ab37d49a6b3143be2e07f55fd28d60af3700b..50dc5f975b892e94245b41327f182050a93ec078 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/UploadingFileFromResource.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/UploadingFileFromResource.java
@@ -4,14 +4,17 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.time.Instant;
 
-import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile;
+import cz.it4i.fiji.haas_java_client.UploadingFile;
 
 public class UploadingFileFromResource implements UploadingFile {
 
-	private String fileName;
-	private String base;
+	private final String fileName;
+	
+	private final String base;
+	
+	private final long lastTime;
+	
 	private Long length;
-	private long lastTime;
 	
 	public UploadingFileFromResource(String base, String fileName) {
 		this.base = base;
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentIndex.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentIndex.java
index 9a66b392b7c6956a42080565fa038e46eb96ddc4..0a3049c93589c41392f4aa3463a21ac2ae7ab9a9 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentIndex.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentIndex.java
@@ -17,49 +17,49 @@ public class PersistentIndex<T> {
 	
 	public static final Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.data_transfer.PersistentIndex.class);
 	
-	private Path workingFile;
+	private final Path workingFile;
 
-	private Set<T> files = new LinkedHashSet<>();
+	private final Set<T> indexedFiles = new LinkedHashSet<>();
 
-	private Function<String, T> fromString;
+	private final Function<String, T> fromStringConvertor;
 
-	public PersistentIndex(Path workingFile,Function<String, T> fromString) throws IOException {
+	public PersistentIndex(Path workingFile,Function<String, T> fromStringConvertor) throws IOException {
 		this.workingFile = workingFile;
-		this.fromString = fromString;
-		loadFromFile();
+		this.fromStringConvertor = fromStringConvertor;
+		loadFromWorkingFile();
 	}
 
-	public synchronized void storeToFile() throws IOException {
+	public synchronized void storeToWorkingFile() throws IOException {
 		try (BufferedWriter bw = Files.newBufferedWriter(workingFile)) {
-			for (T file : files) {
+			for (T file : indexedFiles) {
 				bw.write(file.toString() + "\n");
 			}
 		}
 	}
 
 	public synchronized boolean insert(T file) {
-		return files.add(file);
+		return indexedFiles.add(file);
 	}
 
 	public synchronized void remove(T p) {
-		files.remove(p);
+		indexedFiles.remove(p);
 	}
 
 	public synchronized void fillQueue(Queue<T> toUpload) {
-		toUpload.addAll(files);
+		toUpload.addAll(indexedFiles);
 	}
 	
 	public synchronized void clear() throws IOException {
-		files.clear();
-		storeToFile();
+		indexedFiles.clear();
+		storeToWorkingFile();
 	}
 
 	public synchronized boolean contains(Path file) {
-		return files.contains(file);
+		return indexedFiles.contains(file);
 	}
 
-	private void loadFromFile() throws IOException {
-		files.clear();
+	private void loadFromWorkingFile() throws IOException {
+		indexedFiles.clear();
 		if(Files.exists(workingFile)) {
 			try (BufferedReader br = Files.newBufferedReader(workingFile)) {
 				String line;
@@ -71,7 +71,7 @@ public class PersistentIndex<T> {
 	}
 
 	private void processLine(String line) {
-		files.add(fromString.apply(line));
+		indexedFiles.add(fromStringConvertor.apply(line));
 	}
 
 	
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentSynchronizationProcess.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentSynchronizationProcess.java
index 7966cb2dd039435f6ee228e82d45366b0b42e9a7..1811451cef1cbc4d292853c87c0d33bdc4ce4655 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentSynchronizationProcess.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentSynchronizationProcess.java
@@ -34,21 +34,21 @@ public abstract class PersistentSynchronizationProcess<T> {
 
 	private final static String INIT_TRANSFER_ITEM = "init transfer";
 
-	private PersistentIndex<T> index;
+	private final PersistentIndex<T> index;
 
-	private Queue<T> toProcessQueue = new LinkedBlockingQueue<T>();
+	private final Queue<T> toProcessQueue = new LinkedBlockingQueue<T>();
 
-	private Set<Thread> runningTransferThreads = Collections.synchronizedSet(new HashSet<>());
+	private final Set<Thread> runningTransferThreads = Collections.synchronizedSet(new HashSet<>());
 
-	private SimpleThreadRunner runner;
+	private final SimpleThreadRunner runner;
 
-	private Supplier<HaaSFileTransfer> fileTransferSupplier;
+	private final Supplier<HaaSFileTransfer> fileTransferSupplier;
 
-	private Runnable processFinishedNotifier;
+	private final Runnable processFinishedNotifier;
 
 	private ProgressNotifier notifier;
 
-	private AtomicInteger runningProcessCounter = new AtomicInteger();
+	private final AtomicInteger runningProcessCounter = new AtomicInteger();
 
 	public PersistentSynchronizationProcess(ExecutorService service, Supplier<HaaSFileTransfer> fileTransferSupplier,
 			Runnable processFinishedNotifier, Path indexFile, Function<String, T> convertor) throws IOException {
@@ -69,7 +69,7 @@ public abstract class PersistentSynchronizationProcess<T> {
 			runner.runIfNotRunning(this::doProcess);
 		} finally {
 			startFinished = true;
-			index.storeToFile();
+			index.storeToWorkingFile();
 		}
 	}
 
@@ -121,7 +121,7 @@ public abstract class PersistentSynchronizationProcess<T> {
 				notifier.addItem(item);
 				try {
 					processItem(tr, p);
-					fileUploaded(p);
+					fileTransfered(p);
 				} catch (InterruptedIOException e) {
 					toProcessQueue.clear();
 					interrupted = true;
@@ -149,10 +149,10 @@ public abstract class PersistentSynchronizationProcess<T> {
 		}
 	}
 
-	private void fileUploaded(T p) {
+	private void fileTransfered(T p) {
 		try {
 			index.remove(p);
-			index.storeToFile();
+			index.storeToWorkingFile();
 		} catch (IOException e) {
 			log.error(e.getMessage(), e);
 		}
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/SimpleThreadRunner.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/SimpleThreadRunner.java
index 4a8237bac110f78b02120388162e2a202ea0b25d..3b1dea3f3acaecf0552551f1d4722d178b08d2ef 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/SimpleThreadRunner.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/SimpleThreadRunner.java
@@ -5,8 +5,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Consumer;
 
 public class SimpleThreadRunner {
-	private ExecutorService service;
-	private AtomicBoolean reRun = new AtomicBoolean(false);
+	private final ExecutorService service;
+	private final AtomicBoolean reRun = new AtomicBoolean(false);
 
 	public SimpleThreadRunner(ExecutorService service) {
 		this.service = service;
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java
index 54795aa5d1bb6626487ff8a5442280ec60f0c162..5e17ff9db7f13120247a1f4c460ca06886732abb 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java
@@ -19,9 +19,9 @@ import java.util.stream.StreamSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile;
 import cz.it4i.fiji.haas_java_client.HaaSFileTransfer;
 import cz.it4i.fiji.haas_java_client.ProgressNotifier;
+import cz.it4i.fiji.haas_java_client.UploadingFile;
 import cz.it4i.fiji.haas_java_client.UploadingFileImpl;
 
 public class Synchronization implements Closeable{
@@ -34,22 +34,23 @@ public class Synchronization implements Closeable{
 	
 	private static final String FILE_INDEX_DOWNLOADED_FILENAME = ".downloaded";
 	
-	private Path workingDirectory;
+	private final Path workingDirectory;
 	
-	private Function<String,Path> pathResolver = name -> workingDirectory.resolve(name);
+	private final Function<String,Path> pathResolver;
 	
-	private PersistentIndex<Path> filesDownloaded;
+	private final PersistentIndex<Path> filesDownloaded;
 
-	private PersistentSynchronizationProcess<Path> uploadProcess;
+	private final PersistentSynchronizationProcess<Path> uploadProcess;
 
-	private P_PersistentDownloadProcess downloadProcess;
+	private final P_PersistentDownloadProcess downloadProcess;
 
-	private ExecutorService service;
+	private final ExecutorService service;
 	
 	public Synchronization(Supplier<HaaSFileTransfer> fileTransferSupplier, Path workingDirectory,
 			 Runnable uploadFinishedNotifier, Runnable downloadFinishedNotifier) throws IOException {
 		this.service = Executors.newFixedThreadPool(2);
 		this.workingDirectory = workingDirectory;
+		this.pathResolver = name -> workingDirectory.resolve(name);
 		this.filesDownloaded = new PersistentIndex<>(workingDirectory.resolve(FILE_INDEX_DOWNLOADED_FILENAME),
 				pathResolver);
 		this.uploadProcess = createUploadProcess(fileTransferSupplier, service, uploadFinishedNotifier);
@@ -90,6 +91,7 @@ public class Synchronization implements Closeable{
 		this.downloadProcess.resume();
 	}
 
+	@Override
 	public void close() {
 		service.shutdown();
 		uploadProcess.shutdown();
@@ -164,7 +166,7 @@ public class Synchronization implements Closeable{
 		protected void processItem(HaaSFileTransfer tr, String file) throws InterruptedIOException {
 			filesDownloaded.insert(workingDirectory.resolve(file));
 			try {
-				filesDownloaded.storeToFile();
+				filesDownloaded.storeToWorkingFile();
 			} catch (IOException e) {
 				log.error(e.getMessage(), e);
 			}
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JFXPanel.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JFXPanel.java
index 47b5b56362af087df974dc6c415e52dc8e914f08..05c0770707c03659437e10ea7a44bedd24ccf4b7 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JFXPanel.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JFXPanel.java
@@ -20,7 +20,7 @@ public class JFXPanel<T extends Parent> extends javafx.embed.swing.JFXPanel {
 	@SuppressWarnings("unused")
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.ui.JFXPanel.class);
 
-	private T control;
+	private final T control;
 
 	public JFXPanel(Supplier<T> fxSupplier) {
 		Platform.setImplicitExit(false);
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 e06944a29f196186c71e00b41f3f163931a70418..25f9414960d10c44e809272f9403bcf0b5b2177a 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
@@ -10,11 +10,11 @@ import javafx.beans.value.ObservableValue;
 
 public class ObservableValueAdapter<S, T> implements ObservableValue<T> {
 
-	private ObservableValue<S> adapted;
+	private final ObservableValue<S> adapted;
 
-	private Function<S, T> transformation;
+	private final Function<S, T> transformation;
 
-	private Map<ChangeListener<? super T>, ChangeListener<? super S>> mapOfListeners = new HashMap<>();
+	private final Map<ChangeListener<? super T>, ChangeListener<? super S>> mapOfListeners = new HashMap<>();
 
 	public ObservableValueAdapter(ObservableValue<S> decorated, Function<S, T> map) {
 		this.adapted = decorated;
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 e65c179f5007ff55b5080377a6c75aea61c5c0c9..54af7f42dc79c816fa6f4716f2e9c7fe2aae54be 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
@@ -9,56 +9,63 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import cz.it4i.fiji.haas.ui.UpdatableObservableValue.UpdateStatus;
-import javafx.beans.value.ObservableValue;
 
-public abstract class ObservableValueRegistry<T,V extends UpdatableObservableValue<T>> {
+public abstract class ObservableValueRegistry<K, V extends UpdatableObservableValue<K>> {
 
-	private Function<T,UpdateStatus> updateFunction;
-	private Consumer<T> removeConsumer;
-	private Function<T, Object> stateProvider;
+	private Function<K, UpdateStatus> updateFunction;
+
+	private final Consumer<K> removeConsumer;
 	
+	private final Function<K, Object> stateProvider;
 	
-	public ObservableValueRegistry(Function<T, UpdateStatus> updateFunction,Function<T,Object> stateProvider,
-			Consumer<T> removeConsumer) {
+	private final Map<K, V> map = new LinkedHashMap<>();
+
+	public ObservableValueRegistry(Function<K, UpdateStatus> updateFunction, Function<K, Object> stateProvider,
+			Consumer<K> removeConsumer) {
 		this.updateFunction = updateFunction;
 		this.stateProvider = stateProvider;
-		this.removeConsumer = t-> {
-			removeConsumer.accept(t);
-			remove(t);
+		this.removeConsumer = k -> {
+			removeConsumer.accept(k);
+			remove(k);
 		};
-		
 	}
-
-	private Map<T,V> map = new LinkedHashMap<>(); 
 	
-	public  V addIfAbsent(T value) {
-		V uov = map.computeIfAbsent(value, v-> constructObservableValue(v, updateFunction, stateProvider));
+	public V addIfAbsent(K key) {
+		V uov = map.computeIfAbsent(key, k -> constructObservableValue(k));
 		return uov;
 	}
-
-	abstract protected V constructObservableValue(T v, Function<T, UpdateStatus> updateFunction, Function<T, Object> stateProvider) ;
 	
-	public UpdatableObservableValue<T> get(T value) {
-		return map.get(value);
+	public V get(K key) {
+		return map.get(key);
 	}
-	
+
 	public Collection<V> getAllItems() {
-		return map.values().stream().map(val->(V)val).collect(Collectors.toList());
-	}
-	
-	protected ObservableValue<T> remove(T value) {
-		return map.remove(value);
+		return map.values().stream().map(val -> val).collect(Collectors.toList());
 	}
 	
 	public void update() {
-		for (UpdatableObservableValue<T> value : new LinkedList<>(map.values())) {
-			if(value.update() == UpdateStatus.Deleted) {
+		for (V value : new LinkedList<>(map.values())) {
+			if (value.update() == UpdateStatus.Deleted) {
 				removeConsumer.accept(value.getValue());
 			}
 		}
 	}
 	
-	protected void setUpdateFunction(Function<T, UpdateStatus> updateFunction) {
+	abstract protected V constructObservableValue(K k);
+
+	protected V remove(K key) {
+		return map.remove(key);
+	}
+
+	protected void setUpdateFunction(Function<K, UpdateStatus> updateFunction) {
 		this.updateFunction = updateFunction;
 	}
+	
+	protected Function<K, UpdateStatus> getUpdateFunction() {
+		return updateFunction;
+	}
+	
+	protected Function<K, Object> getStateProvider() {
+		return stateProvider;
+	}
 }
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 2ea1c0d8d1a907e74bd43dc65c0630291dbb3552..146f5bd9ea329fbc91135e110619ea833e8fbfef 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
@@ -23,10 +23,9 @@ public class TableViewContextMenu<T> {
 
 	public final static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.ui.TableViewContextMenu.class);
 
-	private final Collection<P_Updetable<?>> items = new LinkedList<>();
-	private final Collection<P_MenuItemWithColumnIndex> itemsWithColumnIndex = new LinkedList<>();
+	private final Collection<P_Updatable<T>> items = new LinkedList<>();
 
-	private TableView<T> tableView;
+	private final TableView<T> tableView;
 
 	private int columnIndex = -1;
 
@@ -39,9 +38,9 @@ public class TableViewContextMenu<T> {
 	}
 
 	public void addItem(String text, BiConsumer<T, Integer> eventHandler, BiPredicate<T, Integer> enableHandler) {
-		itemsWithColumnIndex.add(new P_MenuItemWithColumnIndex(text, eventHandler, enableHandler));
+		items.add(new P_MenuItemWithColumnIndex(text, eventHandler, enableHandler));
 	}
-	
+
 	public void addItem(String text, Consumer<T> eventHandlerOn, Consumer<T> eventHandlerOff,
 			Predicate<T> enableHandler, Function<T, Boolean> property) {
 		items.add(new P_CheckMenuItem(text, eventHandlerOff, eventHandlerOn, enableHandler, property));
@@ -65,9 +64,8 @@ public class TableViewContextMenu<T> {
 				public void handle(ContextMenuEvent event) {
 					T requestedItem = getRequestedItem();
 					updateColumnIndex(event.getSceneX());
-					int column = getRequestedColumn();
-					items.forEach(item -> item.updateEnable(requestedItem));
-					itemsWithColumnIndex.forEach(item -> item.updateEnable(requestedItem, column));
+					int columnIndex = getRequestedColumn();
+					items.forEach(item -> item.updateEnable(requestedItem, columnIndex));
 				}
 
 				private void updateColumnIndex(double sceneX) {
@@ -89,42 +87,45 @@ public class TableViewContextMenu<T> {
 		return cm;
 	}
 
-	private class P_Updetable<I extends MenuItem> {
-		
-		private I item;
-				private Predicate<T> enableHandler;
-		
-		
-		public P_Updetable(I item, Predicate<T> enableHandler) {
+	private interface P_Updatable<T> {
+		public void updateEnable(T selected, int columnIndex);
+	}
+
+	private class P_UpdatableImpl<I extends MenuItem> implements P_Updatable<T> {
+
+		private final I item;
+		private final Predicate<T> enableHandler;
+
+		public P_UpdatableImpl(I item, Predicate<T> enableHandler) {
 			this.item = item;
 			this.enableHandler = enableHandler;
 			getOrCreateContextMenu().getItems().add(getItem());
 		}
 
-		public void updateEnable(T selected) {
+		@Override
+		public void updateEnable(T selected, int columnIndex) {
 			item.setDisable(!enableHandler.test(selected));
 		}
-		
+
 		protected I getItem() {
 			return item;
 		}
 
 	}
-	
-	private class P_MenuItem extends P_Updetable<MenuItem>{
+
+	private class P_MenuItem extends P_UpdatableImpl<MenuItem> {
 		public P_MenuItem(String text, Consumer<T> eventHandler, Predicate<T> enableHandler) {
 			super(new MenuItem(text), enableHandler);
-			
 			getItem().setOnAction(e -> eventHandler.accept(getRequestedItem()));
-			
 		}
 
 	}
 
-	private class P_MenuItemWithColumnIndex {
+	private class P_MenuItemWithColumnIndex implements P_Updatable<T> {
+
+		private final MenuItem item;
 
-		private MenuItem item;
-		private BiPredicate<T, Integer> enableHandler;
+		private final BiPredicate<T, Integer> enableHandler;
 
 		public P_MenuItemWithColumnIndex(String text, BiConsumer<T, Integer> eventHandler,
 				BiPredicate<T, Integer> enableHandler) {
@@ -134,23 +135,24 @@ public class TableViewContextMenu<T> {
 			getOrCreateContextMenu().getItems().add(item);
 		}
 
+		@Override
 		public void updateEnable(T selected, int column) {
 			item.setDisable(!enableHandler.test(selected, column));
 		}
 
 	}
 
-	private class P_CheckMenuItem extends P_Updetable<CheckMenuItem>{
-		
-		private Function<T, Boolean> property;
+	private class P_CheckMenuItem extends P_UpdatableImpl<CheckMenuItem> {
+
+		private final Function<T, Boolean> property;
 
 		public P_CheckMenuItem(String text, Consumer<T> eventHandlerOff, Consumer<T> eventHandlerOn,
-				Predicate<T> enableHandler, Function<T,Boolean> property) {
+				Predicate<T> enableHandler, Function<T, Boolean> property) {
 			super(new CheckMenuItem(text), enableHandler);
 			this.property = property;
 			getItem().setOnAction(e -> {
 				boolean selected = getItem().isSelected();
-				if(selected) {
+				if (selected) {
 					eventHandlerOn.accept(getRequestedItem());
 				} else {
 					eventHandlerOff.accept(getRequestedItem());
@@ -159,11 +161,11 @@ public class TableViewContextMenu<T> {
 		}
 
 		@Override
-		public void updateEnable(T selected) {
-			super.updateEnable(selected);
+		public void updateEnable(T selected, int columnIndex) {
+			super.updateEnable(selected, columnIndex);
 			getItem().setSelected(property.apply(selected));
 		}
-		
+
 	}
 
 }
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 4116da697e01d538211eee84d879f538e4160b26..d5c8551f02a9e2e38ecfed2a31bbf903a0b5880f 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
@@ -16,10 +16,13 @@ public class UpdatableObservableValue<T> extends ObservableValueBase<T> {
 		Deleted, Updated, NotUpdated
 	}
 
-	private T wrapped;
-	private Function<T, UpdateStatus> updateFunction;
+	private final T wrapped;
+	
+	private final Function<T, UpdateStatus> updateFunction;
+	
+	private final Function<T, Object> stateProvider;
+	
 	private Object oldState;
-	private Function<T, Object> stateProvider;
 
 	public UpdatableObservableValue(T wrapped, Function<T, UpdateStatus> updateFunction,
 			Function<T, Object> stateProvider) {
diff --git a/haas-imagej-client/src/test/java/cz/it4i/fiji/haas/TestUploadingData.java b/haas-imagej-client/src/test/java/cz/it4i/fiji/haas/TestUploadingData.java
index 353d55a2b48b4d9af94331f8ad7ec50c3860325e..54a0420d58064d14153593ce5e82ef0381de3bef 100644
--- a/haas-imagej-client/src/test/java/cz/it4i/fiji/haas/TestUploadingData.java
+++ b/haas-imagej-client/src/test/java/cz/it4i/fiji/haas/TestUploadingData.java
@@ -5,7 +5,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import cz.it4i.fiji.haas.UploadingFileFromResource;
-import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile;
+import cz.it4i.fiji.haas_java_client.UploadingFile;
 
 public class TestUploadingData {
 	private static Logger log = LoggerFactory.getLogger(TestUploadingData.class);
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 d49c73da4e421a944c86cdbeb38e082dd02bd9e5..f66413be66a01f81ee4baa4a4f83a8ff7468120d 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
@@ -123,19 +123,9 @@ public class HaaSClient {
 		};
 	}
 
-	public interface UploadingFile {
-		InputStream getInputStream() throws IOException;
-
-		String getName();
-
-		long getLength() throws IOException;
-
-		long getLastTime();
-	}
-
 	static public class SynchronizableFiles {
 
-		private Collection<TaskFileOffsetExt> files = new LinkedList<>();
+		private final Collection<TaskFileOffsetExt> files = new LinkedList<>();
 
 		public void addFile(long taskId, SynchronizableFileType type, long offset) {
 			TaskFileOffsetExt off = new TaskFileOffsetExt();
@@ -190,18 +180,18 @@ public class HaaSClient {
 
 	private FileTransferWsSoap fileTransfer;
 
-	private Integer timeOut;
+	private final Integer timeOut;
 
-	private Long templateId;
+	private final Long templateId;
 
-	private Long clusterNodeType;
+	private final Long clusterNodeType;
 
-	private String projectId;
+	private final String projectId;
 
-	private Map<Long, P_FileTransferPool> filetransferPoolMap = new HashMap<>();
+	private final Map<Long, P_FileTransferPool> filetransferPoolMap = new HashMap<>();
 
 	
-	private Settings settings;
+	private final Settings settings;
 
 	public HaaSClient(Settings settings) {
 		this.settings = settings;
@@ -251,14 +241,17 @@ public class HaaSClient {
 					return WS_STATE2STATE.get(info.getState());
 				}
 
+				@Override
 				public java.util.Calendar getStartTime() {
 					return info.getStartTime();
 				};
 
+				@Override
 				public java.util.Calendar getEndTime() {
 					return info.getEndTime();
 				};
 
+				@Override
 				public Calendar getCreationTime() {
 					return info.getCreationTime();
 				};
@@ -300,6 +293,7 @@ public class HaaSClient {
 		FileTransferMethodExt ft = pool.obtain();
 		try {
 			return new HaaSFileTransferImp(ft, getScpClient(ft), progress) {
+				@Override
 				public void close() {
 					super.close();
 					try {
@@ -431,32 +425,38 @@ public class HaaSClient {
 	}
 
 	public static class P_ProgressNotifierDecorator implements ProgressNotifier {
-		private ProgressNotifier notifier;
+		private final ProgressNotifier notifier;
 
 		public P_ProgressNotifierDecorator(ProgressNotifier notifier) {
 			this.notifier = notifier;
 		}
 
+		@Override
 		public void setTitle(String title) {
 			notifier.setTitle(title);
 		}
 
+		@Override
 		public void setCount(int count, int total) {
 			notifier.setCount(count, total);
 		}
 
+		@Override
 		public void addItem(Object item) {
 			notifier.addItem(item);
 		}
 
+		@Override
 		public void setItemCount(int count, int total) {
 			notifier.setItemCount(count, total);
 		}
 
+		@Override
 		public void itemDone(Object item) {
 			notifier.itemDone(item);
 		}
 
+		@Override
 		public void done() {
 			notifier.done();
 		}
@@ -481,7 +481,6 @@ public class HaaSClient {
 		public P_FileTransferPool(long jobId) {
 			this.factory = () -> getFileTransfer().getFileTransferMethod(jobId, getSessionID());
 			this.destroyer = val -> getFileTransfer().endFileTransfer(jobId, val, sessionID);
-			;
 		}
 
 		public synchronized FileTransferMethodExt obtain() throws RemoteException, ServiceException {
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java
index 2cf9b14969f30fb9cb8404e4bb0f8cb125ee4d76..fc7ebc2b82d16cff5afca7dc4384c6a648ec73e1 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java
@@ -5,7 +5,6 @@ import java.io.InterruptedIOException;
 import java.nio.file.Path;
 import java.util.List;
 
-import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile;
 import cz.it4i.fiji.scpclient.TransferFileProgress;
 
 public interface HaaSFileTransfer extends Closeable {
@@ -14,7 +13,7 @@ public interface HaaSFileTransfer extends Closeable {
 	@Override
 	void close();
 
-	void upload(UploadingFile files) throws InterruptedIOException;
+	void upload(UploadingFile file) throws InterruptedIOException;
 
 	void download(String files, Path workDirectory) throws InterruptedIOException;
 
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 9aa4698c4d8fe5379f91ffeba5f63849e460725a..fe40056388c53aedb2d16c6005d0a42ff7e7ac97 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
@@ -14,7 +14,6 @@ import org.slf4j.LoggerFactory;
 
 import com.jcraft.jsch.JSchException;
 
-import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile;
 import cz.it4i.fiji.haas_java_client.proxy.FileTransferMethodExt;
 import cz.it4i.fiji.scpclient.ScpClient;
 import cz.it4i.fiji.scpclient.TransferFileProgress;
@@ -24,8 +23,8 @@ class HaaSFileTransferImp implements HaaSFileTransfer {
 	@SuppressWarnings("unused")
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas_java_client.HaaSFileTransferImp.class);
 
-	private FileTransferMethodExt ft;
-	private ScpClient scpClient;
+	private final FileTransferMethodExt ft;
+	private final ScpClient scpClient;
 	private TransferFileProgress progress;
 	
 	public HaaSFileTransferImp(FileTransferMethodExt ft, ScpClient scpClient, TransferFileProgress progress) {
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobFileContentImpl.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobFileContentImpl.java
index 47922fb43ce5fa69e07b6537d7800bb553c6791a..fdbb4eaa9766af651de2c276f4094ec51054e446 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobFileContentImpl.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobFileContentImpl.java
@@ -5,7 +5,7 @@ import cz.it4i.fiji.haas_java_client.proxy.SynchronizableFilesExt;
 
 class JobFileContentImpl implements JobFileContent{
 
-	private JobFileContentExt contentExt;
+	private final JobFileContentExt contentExt;
 
 	public JobFileContentImpl(JobFileContentExt contentExt) {
 		this.contentExt = contentExt;
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 e6242cacef3055732764dd09b0495695dc711882..050676212e54e5a1a8409d08877a437fb1872573 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
@@ -4,14 +4,14 @@ import cz.it4i.fiji.scpclient.TransferFileProgress;
 
 public class TransferFileProgressForHaaSClient implements TransferFileProgress {
 
-	private long totalSize;
+	private final long totalSize;
 	private long totalTransfered;
 	private long fileSize;
 	private long fileTransfered;
 	
 	
 	
-	private ProgressNotifier notifier;
+	private final ProgressNotifier notifier;
 	
 	
 	public TransferFileProgressForHaaSClient(long totalSize, ProgressNotifier notifier) {
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/UploadingFile.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/UploadingFile.java
new file mode 100644
index 0000000000000000000000000000000000000000..5024db3fed1ea6c0787d23e4f2ee9b3be4d92fbe
--- /dev/null
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/UploadingFile.java
@@ -0,0 +1,14 @@
+package cz.it4i.fiji.haas_java_client;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public interface UploadingFile {
+	InputStream getInputStream() throws IOException;
+
+	String getName();
+
+	long getLength() throws IOException;
+
+	long getLastTime();
+}
\ No newline at end of file
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/UploadingFileImpl.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/UploadingFileImpl.java
index 9c921e5a3f8317d9ecf7472c9816b2db9561ac11..ad7cff54de090d9d0d13261ebd0a66fb6d10d0dc 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/UploadingFileImpl.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/UploadingFileImpl.java
@@ -8,8 +8,6 @@ import java.nio.file.Path;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile;
-
 public class UploadingFileImpl implements UploadingFile {
 
 	public static final Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas_java_client.UploadingFileImpl.class);
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/BenchmarkSPIMParametersImpl.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/BenchmarkSPIMParametersImpl.java
index 67ee1094ed04e0cbe2be1ee9220c066439a971f0..032ed69c5d12c5180a435d9bc4466dc0934a8d72 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/BenchmarkSPIMParametersImpl.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/BenchmarkSPIMParametersImpl.java
@@ -6,15 +6,15 @@ import cz.it4i.fiji.haas_spim_benchmark.core.BenchmarkSPIMParameters;
 
 class BenchmarkSPIMParametersImpl implements BenchmarkSPIMParameters{
 
-	private String userName;
+	private final String userName;
 	
-	private String password;
+	private final String password;
 	
-	private String phone;
+	private final String phone;
 	
-	private String email;
+	private final String email;
 	
-	private Path workingDirectory;
+	private final Path workingDirectory;
 	
 	public BenchmarkSPIMParametersImpl(String userName, String password, String phone, String email, Path workingDirectory) {
 		this.userName = userName;
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/FileLock.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/FileLock.java
index 14384ce2a456b48e2d7f6c77073c026ae7431b88..7310922b11bad01f6354775cc39884ff08c344c2 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/FileLock.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/FileLock.java
@@ -16,18 +16,18 @@ public class FileLock implements Closeable {
 
 	public static final Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas_spim_benchmark.commands.FileLock.class);
 
+	private final Path localPath;
+	
 	private FileChannel fileChannel;
 
 	private java.nio.channels.FileLock lock;
-
-	private Path filePath;
-
-	public FileLock(Path file) throws FileNotFoundException {
-		this.filePath = file;
+	
+	public FileLock(Path lockPath) throws FileNotFoundException {
+		this.localPath = lockPath;
 	}
 
 	public boolean tryLock() throws IOException {
-		this.fileChannel = FileChannel.open(filePath, StandardOpenOption.READ, StandardOpenOption.WRITE,
+		this.fileChannel = FileChannel.open(localPath, StandardOpenOption.READ, StandardOpenOption.WRITE,
 				StandardOpenOption.CREATE);
 		try {
 			this.lock = fileChannel.tryLock();
@@ -53,7 +53,7 @@ public class FileLock implements Closeable {
 			log.error(e.getMessage(), e);
 		}
 		try {
-			Files.delete(filePath);
+			Files.delete(localPath);
 		} catch (IOException e) {
 			log.error(e.getMessage(), e);
 		}
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/ManageSPIMBenchmark.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/ManageSPIMBenchmark.java
index 1a5fdd210c078992515eab1fd6e29e1bdffc675f..aaee9aaba7db792fe47c1bb91240321e5ad74402 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/ManageSPIMBenchmark.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/commands/ManageSPIMBenchmark.java
@@ -67,19 +67,23 @@ public class ManageSPIMBenchmark implements Command {
 				uiService.showDialog("Working directory is already used by someone else", MessageType.ERROR_MESSAGE);
 				return;
 			}
-			
-			JDialog dialog = new BenchmarkSPIMWindow(null,
-					new BenchmarkSPIMParametersImpl(userName, password, Constants.PHONE, email, workingDirPath));
-			dialog.setTitle("SPIM workflow computation manager");
-			dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-			dialog.addWindowListener(new WindowAdapter() {
-				@Override
-				public void windowClosing(WindowEvent e) {
-					super.windowClosing(e);
-					fl.close();
-				}
-			});
-			dialog.setVisible(true);
+			try {
+				JDialog dialog = new BenchmarkSPIMWindow(null,
+						new BenchmarkSPIMParametersImpl(userName, password, Constants.PHONE, email, workingDirPath));
+				dialog.setTitle("SPIM workflow computation manager");
+				dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+				dialog.addWindowListener(new WindowAdapter() {
+					@Override
+					public void windowClosing(WindowEvent e) {
+						super.windowClosing(e);
+						fl.close();
+					}
+				});
+				dialog.setVisible(true);
+			} catch(IOException e) {
+				fl.close();
+				throw e;
+			}
 		} catch (IOException e) {
 			log.error(e.getMessage(), e);
 		}
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 53a382855e4304162091757fc70a8f118952f110..17237edabd25cf28118fe0b64015f27dc179c967 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
@@ -41,11 +41,11 @@ import cz.it4i.fiji.haas.HaaSOutputHolderImpl;
 import cz.it4i.fiji.haas.Job;
 import cz.it4i.fiji.haas.JobManager;
 import cz.it4i.fiji.haas.UploadingFileFromResource;
-import cz.it4i.fiji.haas_java_client.HaaSClient;
 import cz.it4i.fiji.haas_java_client.JobState;
 import cz.it4i.fiji.haas_java_client.ProgressNotifier;
 import cz.it4i.fiji.haas_java_client.Settings;
 import cz.it4i.fiji.haas_java_client.SynchronizableFileType;
+import cz.it4i.fiji.haas_java_client.UploadingFile;
 import net.imagej.updater.util.Progress;
 
 public class BenchmarkJobManager implements Closeable{
@@ -54,7 +54,7 @@ public class BenchmarkJobManager implements Closeable{
 	private static Logger log = LoggerFactory
 			.getLogger(cz.it4i.fiji.haas_spim_benchmark.core.BenchmarkJobManager.class);
 
-	private JobManager jobManager;
+	private final JobManager jobManager;
 
 	public final class BenchmarkJob implements HaaSOutputHolder {
 
@@ -128,7 +128,7 @@ public class BenchmarkJobManager implements Closeable{
 		}
 		
 		public boolean canBeDownloaded() {
-			return job.canBeDownload();
+			return job.canBeDownloaded();
 		}
 
 		public void downloadStatistics(Progress progress) throws IOException {
@@ -385,13 +385,14 @@ public class BenchmarkJobManager implements Closeable{
 		private SPIMComputationAccessor getComputationAccessor() {
 			SPIMComputationAccessor result = new SPIMComputationAccessor() {
 
-				private HaaSOutputHolder outputOfSnakemake = new HaaSOutputHolderImpl(list -> job.getOutput(list));
+				private final HaaSOutputHolder outputOfSnakemake = new HaaSOutputHolderImpl(list -> job.getOutput(list));
 
 				@Override
 				public List<String> getActualOutput(List<SynchronizableFileType> content) {
 					return outputOfSnakemake.getActualOutput(content);
 				}
 
+				@Override
 				public java.util.Collection<String> getChangedFiles() {
 					return job.getChangedFiles();
 				}
@@ -499,7 +500,7 @@ public class BenchmarkJobManager implements Closeable{
 
 					// Cache all found jobs
 					for (int i = 1; i < columns.length; i++) {
-						jobs.add(new ResultFileJob(columns[i]));
+						jobs.add(new ResultFileJob());
 					}
 
 				} else if (!columns[0].equals(Constants.STATISTICS_JOB_COUNT)) {
@@ -569,7 +570,7 @@ public class BenchmarkJobManager implements Closeable{
 		jobManager.close();
 	}
 
-	private HaaSClient.UploadingFile getUploadingFile() {
+	private UploadingFile getUploadingFile() {
 		return new UploadingFileFromResource("", Constants.CONFIG_YAML);
 	}
 
@@ -691,32 +692,38 @@ public class BenchmarkJobManager implements Closeable{
 	}
 
 	private class P_ProgressNotifierAdapter implements ProgressNotifier {
-		private Progress progress;
+		private final Progress progress;
 
 		public P_ProgressNotifierAdapter(Progress progress) {
 			this.progress = progress;
 		}
 
+		@Override
 		public void setTitle(String title) {
 			progress.setTitle(title);
 		}
 
+		@Override
 		public void setCount(int count, int total) {
 			progress.setCount(count, total);
 		}
 
+		@Override
 		public void addItem(Object item) {
 			progress.addItem(item);
 		}
 
+		@Override
 		public void setItemCount(int count, int total) {
 			progress.setItemCount(count, total);
 		}
 
+		@Override
 		public void itemDone(Object item) {
 			progress.itemDone(item);
 		}
 
+		@Override
 		public void done() {
 			progress.done();
 		}
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/ObservableBenchmarkJob.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/ObservableBenchmarkJob.java
index a6f3529b1e19a1359026642f6f3fc4b42abe33f1..1ae29df84c3823884a4e38855047a38d7a0314b7 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/ObservableBenchmarkJob.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/ObservableBenchmarkJob.java
@@ -17,11 +17,11 @@ public class ObservableBenchmarkJob extends UpdatableObservableValue<BenchmarkJo
 	public static final Logger log = LoggerFactory
 			.getLogger(cz.it4i.fiji.haas_spim_benchmark.core.ObservableBenchmarkJob.class);
 
-	private P_TransferProgress downloadProgress = new P_TransferProgress(val -> getValue().setDownloaded(val),
+	private final P_TransferProgress downloadProgress = new P_TransferProgress(val -> getValue().setDownloaded(val),
 			() -> getValue().isDownloaded(), () -> getValue().needsDownload());
-	private P_TransferProgress uploadProgress = new P_TransferProgress(val -> getValue().setUploaded(val),
+	private final P_TransferProgress uploadProgress = new P_TransferProgress(val -> getValue().setUploaded(val),
 			() -> getValue().isUploaded(), () -> getValue().needsUpload());
-	private Executor executor;
+	private final Executor executor;
 
 	public interface TransferProgress {
 
@@ -53,6 +53,7 @@ public class ObservableBenchmarkJob extends UpdatableObservableValue<BenchmarkJo
 
 	public void removed() {
 		getValue().setDownloadNotifier(null);
+		getValue().setUploadNotifier(null);
 	}
 
 	@Override
@@ -64,13 +65,13 @@ public class ObservableBenchmarkJob extends UpdatableObservableValue<BenchmarkJo
 
 	private class P_TransferProgress implements Progress, TransferProgress {
 
+		private final Supplier<Boolean> doneStatusSupplier;
+		private final Consumer<Boolean> doneStatusConsumer;
+		private final Supplier<Boolean> workingSupplier;
 		private Long start;
 		private Long remainingMiliseconds;
 		private Float remainingPercents;
-		private Supplier<Boolean> doneStatusSupplier;
-		private Consumer<Boolean> doneStatusConsumer;
-		private Supplier<Boolean> workingSupplier;
-
+		
 		public P_TransferProgress(Consumer<Boolean> doneStatusConsumer, Supplier<Boolean> doneStatusSupplier,
 				Supplier<Boolean> workingSupplier) {
 			this.doneStatusConsumer = doneStatusConsumer;
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 3de8b024c2eba53fcbd2009c254449537f77842f..26f60b05a74359f82d681141e035c30b5206ae6e 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
@@ -4,14 +4,13 @@ import java.util.Collection;
 
 abstract public class PipelineBase<T extends PipelineBase<?,?>,S> {
 	private Collection<T> successors;
-	private S id;
+	private final S id;
 	
 	
 	
 	public PipelineBase( S id) {
 		this.id = id;
 	}
-
 	
 	public Collection<T> getSuccessors() {
 		if(successors == null) {
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/ResultFileJob.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/ResultFileJob.java
index f67fee23997feb9a8782eab46e65ebd43e1b7a21..07a5a734dde84e948623b5d9432a87bbed1d1440 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/ResultFileJob.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/ResultFileJob.java
@@ -4,11 +4,10 @@ import java.util.HashMap;
 import java.util.Map;
 
 public class ResultFileJob {
-	String id;
-	Map<String, String> values = new HashMap<>();
+	
+	private final Map<String, String> values = new HashMap<>();
 
-	public ResultFileJob(String id) {
-		this.id = id;
+	public ResultFileJob() {
 	}
 
 	public String getValue(String key) {
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
index 3f9b2ce48d1a6a3a2832d13241891cdf8613d3af..d37758c8dcb153cf5c7c9077890ee65d69b38379 100644
--- 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
@@ -71,7 +71,7 @@ public class SPIMComputationAccessorDecoratorWithTimeout implements SPIMComputat
 	private class P_ResultCacheHolder<T> {
 		private Long lastQuery;
 		private T value;
-		private Function<T, T> producer;
+		private final Function<T, T> producer;
 
 		public P_ResultCacheHolder(Function<T, T> producer) {
 			this.producer = producer;
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java
index 5ff82e646d1621008cbaa27fddd8e966571897d2..1c1e842d59ad628abd29ea5161016c47d760e788 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java
@@ -49,18 +49,18 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 	@FXML
 	private TableView<ObservableBenchmarkJob> jobs;
 
-	private BenchmarkJobManager manager;
-
+	private final BenchmarkJobManager manager;
+	
+	private final ExecutorService executorServiceJobState = Executors.newWorkStealingPool();
+	
+	private final Executor executorServiceFX = new FXFrameExecutorService();
+	
 	private Window root;
 
 	private ExecutorService executorServiceUI;
 	
 	private ExecutorService executorServiceWS;
 	
-	private ExecutorService executorServiceJobState = Executors.newWorkStealingPool();
-	
-	private Executor executorServiceFX = new FXFrameExecutorService();
-	
 	private Timer timer;
 	
 	private ObservableBenchmarkJobRegistry registry;
@@ -74,6 +74,7 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 
 	}
 
+	@Override
 	public void init(Window root) {
 		this.root = root;
 		executorServiceWS = Executors.newSingleThreadExecutor();
@@ -90,6 +91,7 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 		executorServiceFX.execute(this::updateJobs);
 	}
 
+	@Override
 	public void close() {
 		executorServiceUI.shutdown();
 		executorServiceWS.shutdown();
@@ -110,7 +112,7 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 		menu.addItem("Cancel job", job -> executeWSCallAsync("Canceling job", p -> {
 			job.getValue().cancelJob();
 			job.getValue().update();
-		}), job -> JavaFXRoutines.notNullValue(job, j -> j.getState() == JobState.Running));
+		}), job -> JavaFXRoutines.notNullValue(job, j -> j.getState() == JobState.Running || j.getState() == JobState.Queued ));
 
 		menu.addItem("Execution details", job -> {
 			try {
@@ -222,11 +224,11 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 		setCellValueFactory(2, j -> j.getCreationTime().toString());
 		setCellValueFactory(3, j -> j.getStartTime().toString());
 		setCellValueFactory(4, j -> j.getEndTime().toString());
-		setCellValueFactory(5, j -> decorateTransfer("Upload",registry.get(j).getUploadProgress()));
-		setCellValueFactory(6, j -> decorateTransfer("Download",registry.get(j).getDownloadProgress()));
+		setCellValueFactory(5, j -> decorateTransfer(registry.get(j).getUploadProgress()));
+		setCellValueFactory(6, j -> decorateTransfer(registry.get(j).getDownloadProgress()));
 	}
 
-	private String decorateTransfer(String string, TransferProgress progress) {
+	private String decorateTransfer(TransferProgress progress) {
 		if (!progress.isWorking() && !progress.isDone()) {
 			return "";
 		} else if (progress.isWorking()) {
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMWindow.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMWindow.java
index f2f22bf471f3513cedb15c1ec6142cf57eecc276..d2a19cdb5d8463e2fd9e48054304b8f2b930873a 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMWindow.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMWindow.java
@@ -11,9 +11,7 @@ import cz.it4i.fiji.haas_spim_benchmark.core.BenchmarkSPIMParameters;
 public class BenchmarkSPIMWindow extends FXFrame<BenchmarkSPIMController>{
 
 	private static final long serialVersionUID = 1L;
-	
-
-	
+		
 	public BenchmarkSPIMWindow(Window parentWindow, BenchmarkSPIMParameters params) throws IOException {
 		super(parentWindow,()->{
 			try {
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/HaaSOutputObservableValueRegistry.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/HaaSOutputObservableValueRegistry.java
index 09a3e1907cdfc5ed9ed3eca19c5d17b2c11a8e3e..83d02edb3f67a41a8fb56c422008439c00fdab1f 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/HaaSOutputObservableValueRegistry.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/HaaSOutputObservableValueRegistry.java
@@ -25,11 +25,14 @@ public class HaaSOutputObservableValueRegistry implements Closeable {
 			.getLogger(cz.it4i.fiji.haas_spim_benchmark.ui.HaaSOutputObservableValueRegistry.class);
 
 	private final Map<SynchronizableFileType, P_HaaSOutputObservableValue> observable = new HashMap<>();	
+
 	private final List<SynchronizableFileType> types = new LinkedList<>();
+	
 	private final Timer timer;
+	
 	private final HaaSOutputHolder holder;
-
-	private long timeout;
+	
+	private final long timeout;
 
 
 	public HaaSOutputObservableValueRegistry(HaaSOutputHolder holder, long timeout) {
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/JobDetailControl.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/JobDetailControl.java
index 96a659e3277ef5012eb916214905c49f5f555292..4cad2bb63154b2b21a2fa77c02088623e942198e 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/JobDetailControl.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/JobDetailControl.java
@@ -24,7 +24,7 @@ public class JobDetailControl extends TabPane implements CloseableControl {
 	@FXML
 	private LogViewControl standardOutput;
 
-	private HaaSOutputObservableValueRegistry observableValueRegistry;
+	private final HaaSOutputObservableValueRegistry observableValueRegistry;
 
 	public JobDetailControl(BenchmarkJob job) {
 		JavaFXRoutines.initRootAndController("JobDetail.fxml", this);
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/ObservableBenchmarkJobRegistry.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/ObservableBenchmarkJobRegistry.java
index f6d83b6a90eb3773bdd29595a8b92c8910782a23..298841e7d5248a9c7a0ac035cf0e84406a87c2db 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/ObservableBenchmarkJobRegistry.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/ObservableBenchmarkJobRegistry.java
@@ -3,7 +3,6 @@ package cz.it4i.fiji.haas_spim_benchmark.ui;
 import java.nio.file.Files;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
-import java.util.function.Function;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -13,7 +12,6 @@ import cz.it4i.fiji.haas.ui.UpdatableObservableValue.UpdateStatus;
 import cz.it4i.fiji.haas_java_client.JobState;
 import cz.it4i.fiji.haas_spim_benchmark.core.BenchmarkJobManager.BenchmarkJob;
 import cz.it4i.fiji.haas_spim_benchmark.core.ObservableBenchmarkJob;
-import javafx.beans.value.ObservableValue;
 
 public class ObservableBenchmarkJobRegistry extends ObservableValueRegistry<BenchmarkJob,ObservableBenchmarkJob> {
 
@@ -30,28 +28,16 @@ public class ObservableBenchmarkJobRegistry extends ObservableValueRegistry<Benc
 	}
 	
 	@Override
-	public ObservableBenchmarkJob addIfAbsent(BenchmarkJob value) {
-		return (ObservableBenchmarkJob) super.addIfAbsent(value);
-	}
-	
-	@Override
-	public ObservableBenchmarkJob get(BenchmarkJob value) {
-		return (ObservableBenchmarkJob) super.get(value);
-	}
-	
-	@Override
-	protected ObservableValue<BenchmarkJob> remove(BenchmarkJob value) {
-		ObservableBenchmarkJob result = (ObservableBenchmarkJob) super.remove(value);
+	protected ObservableBenchmarkJob remove(BenchmarkJob value) {
+		ObservableBenchmarkJob result = super.remove(value);
 		result.removed();
 		return result;
 	}
 	
 	@Override
-	protected ObservableBenchmarkJob constructObservableValue(BenchmarkJob v,
-			Function<BenchmarkJob, UpdateStatus> updateFunction, Function<BenchmarkJob, Object> stateProvider) {
-		return new ObservableBenchmarkJob(v, updateFunction, stateProvider, executorUI);
-	}
-	
+	protected ObservableBenchmarkJob constructObservableValue(BenchmarkJob benchmarkJob) {
+		return new ObservableBenchmarkJob(benchmarkJob, getUpdateFunction(), getStateProvider(), executorUI);
+	}	
 	
 
 	private static UpdateStatus update(BenchmarkJob t, Executor executor) {
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/ObservableTaskRegistry.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/ObservableTaskRegistry.java
index 4c956af23195fb1780ebf10db67f78b5d4151b58..ff8cf0baa03a1c45e74999acb7444293fb920c79 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/ObservableTaskRegistry.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/ObservableTaskRegistry.java
@@ -1,7 +1,6 @@
 package cz.it4i.fiji.haas_spim_benchmark.ui;
 
 import java.util.function.Consumer;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import cz.it4i.fiji.haas.ui.ObservableValueRegistry;
@@ -11,16 +10,18 @@ import cz.it4i.fiji.haas_java_client.JobState;
 import cz.it4i.fiji.haas_spim_benchmark.core.Task;
 import cz.it4i.fiji.haas_spim_benchmark.core.TaskComputation;
 
-public class ObservableTaskRegistry extends ObservableValueRegistry<Task,UpdatableObservableValue<Task>> {
+public class ObservableTaskRegistry extends ObservableValueRegistry<Task, UpdatableObservableValue<Task>> {
 
 	public ObservableTaskRegistry(Consumer<Task> removeConsumer) {
-		super(t -> update(t),t->t.getComputations().stream().map(tc->tc.getState()).collect(Collectors.toList()), removeConsumer);
+		super(t -> update(t), t -> t.getComputations().stream().map(tc -> tc.getState()).collect(Collectors.toList()),
+				removeConsumer);
 	}
 
-	protected UpdatableObservableValue<Task> constructObservableValue(Task v, Function<Task, UpdateStatus> updateFunction, Function<Task, Object> stateProvider) {
-		return new UpdatableObservableValue<Task>(v, updateFunction, stateProvider);
+	@Override
+	protected UpdatableObservableValue<Task> constructObservableValue(Task task) {
+		return new UpdatableObservableValue<Task>(task, getUpdateFunction(), getStateProvider());
 	}
-	
+
 	private static UpdateStatus update(Task t) {
 		boolean updated = false;
 		t.update();
@@ -32,6 +33,4 @@ public class ObservableTaskRegistry extends ObservableValueRegistry<Task,Updatab
 		return updated ? UpdateStatus.Updated : UpdateStatus.NotUpdated;
 	}
 
-	
-
 }
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/RemainingTimeFormater.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/RemainingTimeFormater.java
index da24c79acb3f51ee49fa4b4c1374263558585006..30380b212c2d86ab65add5bb170a30a4ef7621cc 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/RemainingTimeFormater.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/RemainingTimeFormater.java
@@ -2,8 +2,8 @@ package cz.it4i.fiji.haas_spim_benchmark.ui;
 
 public class RemainingTimeFormater {
 
-	public static String format(long duration) {
-		long s = duration / 1000;
+	public static String format(long durationInMiliseconds) {
+		long s = durationInMiliseconds / 1000;
 		return String.format("%d:%02d:%02d", s / 3600, (s % 3600) / 60, (s % 60));
 	}
 }
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 2b3de110b2065a43dbcf1581996bd65bd2bd797e..3580264fec1e5654b0b1c2389904f0f614d7f6b7 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
@@ -77,8 +77,8 @@ public class SPIMPipelineProgressViewController extends BorderPane implements Cl
 	private BenchmarkJob job;
 	private Timer timer;
 	private ObservableTaskRegistry registry;
-	private ExecutorService executorServiceWS;
-	private Executor executorFx = new FXFrameExecutorService();
+	private final ExecutorService executorServiceWS;
+	private final Executor executorFx = new FXFrameExecutorService();
 	private Window root;
 
 	public SPIMPipelineProgressViewController() {
@@ -102,6 +102,7 @@ public class SPIMPipelineProgressViewController extends BorderPane implements Cl
 		});
 	}
 
+	@Override
 	public void close() {
 		timer.cancel();
 		executorServiceWS.shutdown();
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/TaskComputationAdapter.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/TaskComputationAdapter.java
index 40c7fa85d825b3ffe1f06f9f96ea20156bcfea8e..a92c19f87972ab24d7519daa51ca5562a4da86af 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/TaskComputationAdapter.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/TaskComputationAdapter.java
@@ -162,7 +162,7 @@ public class TaskComputationAdapter implements Closeable {
 			Map<String, Log> logs = computation.getLogs().stream()
 					.collect(Collectors.<Log, String, Log>toMap((Log log) -> log.getName(), (Log log) -> log));
 			TaskComputationAdapter.this.logs
-					.forEach(log -> ((ObservableLog) log).setContentValue(logs.get(log.getName())));
+					.forEach(log -> log.setContentValue(logs.get(log.getName())));
 			outputs.forEach(value -> ((ObservableOutputFile) value).setSize(sizes.get(value.getValue().getName())));
 		}
 
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/TaskComputationControl.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/TaskComputationControl.java
index c354adf04b1badb986ea9aa9d159c1fa0bc0e27a..6a26424fa076dcc31259d00cdabbaf02cc14aff6 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/TaskComputationControl.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/TaskComputationControl.java
@@ -31,13 +31,13 @@ public class TaskComputationControl extends TabPane implements CloseableControl,
 
 	private TaskComputationAdapter adapter;
 	
-	private Executor uiExecutor = new FXFrameExecutorService();
+	private final Executor uiExecutor = new FXFrameExecutorService();
 	
-	private ExecutorService wsExecutorService = Executors.newSingleThreadExecutor();
+	private final ExecutorService wsExecutorService = Executors.newSingleThreadExecutor();
 	@FXML
 	private RemoteFilesInfoControl remoteFilesInfo;
 
-	private TaskComputation computation;
+	private final TaskComputation computation;
 	
 	
 	public TaskComputationControl(TaskComputation computation) {
diff --git a/haas-spim-benchmark/src/test/java/cz/it4i/fiji/haas/JFXPanel.java b/haas-spim-benchmark/src/test/java/cz/it4i/fiji/haas/JFXPanel.java
index c921071127c6e72f9b9d23563d317e7e9f868303..a9cb94edb29b9937ba9321da19e6c5dcd4833282 100644
--- a/haas-spim-benchmark/src/test/java/cz/it4i/fiji/haas/JFXPanel.java
+++ b/haas-spim-benchmark/src/test/java/cz/it4i/fiji/haas/JFXPanel.java
@@ -17,7 +17,7 @@ public class JFXPanel<T extends Parent> extends javafx.embed.swing.JFXPanel {
 	@SuppressWarnings("unused")
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.ui.JFXPanel.class);
 
-	private T control;
+	private final T control;
 	
 	public JFXPanel(Supplier<T> fxSupplier) {
 		Platform.setImplicitExit(false);
diff --git a/haas-spim-benchmark/src/test/java/cz/it4i/fiji/haas/TestBenchmarkSPIMParametersImpl.java b/haas-spim-benchmark/src/test/java/cz/it4i/fiji/haas/TestBenchmarkSPIMParametersImpl.java
index 35aa5f3df1ca34e1e6c1ef4a36307cbe7627d995..c0746a7615f1f5661c3d03d069ea1242168bccad 100644
--- a/haas-spim-benchmark/src/test/java/cz/it4i/fiji/haas/TestBenchmarkSPIMParametersImpl.java
+++ b/haas-spim-benchmark/src/test/java/cz/it4i/fiji/haas/TestBenchmarkSPIMParametersImpl.java
@@ -7,7 +7,7 @@ import cz.it4i.fiji.haas_spim_benchmark.core.BenchmarkSPIMParameters;
 
 class TestBenchmarkSPIMParametersImpl extends Configuration implements BenchmarkSPIMParameters{
 
-	private Path workingDirectory;
+	private final Path workingDirectory;
 	
 	public TestBenchmarkSPIMParametersImpl(Path workingDirectory) {
 		super("configuration.properties");
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 b25dcae9113d6332a1008ed5fab5e52c2ea0fc8c..b29e82e106e83b7cdd547e1458ad02a658c1835a 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
@@ -85,7 +85,7 @@ public class ScpClient implements Closeable {
 
 	public boolean download(String lfile, OutputStream os, TransferFileProgress progress)
 			throws JSchException, IOException {
-		Session session = connectionSession();
+		Session session = getConnectedSession();
 
 		// exec 'scp -f rfile' remotely
 		String command = "scp -f " + lfile;
@@ -194,7 +194,7 @@ public class ScpClient implements Closeable {
 
 	public boolean upload(InputStream is, String fileName, long length, long lastModified,
 			TransferFileProgress progress) throws JSchException, IOException {
-		Session session = connectionSession();
+		Session session = getConnectedSession();
 		boolean ptimestamp = true;
 		// exec 'scp -t rfile' remotely
 		String command = "scp " + (ptimestamp ? "-p" : "") + " -t " + fileName;
@@ -257,7 +257,7 @@ public class ScpClient implements Closeable {
 	}
 
 	public long size(String lfile) throws JSchException, IOException {
-		Session session = connectionSession();
+		Session session = getConnectedSession();
 
 		// exec 'scp -f rfile' remotely
 		String command = "scp -f " + lfile;
@@ -310,7 +310,7 @@ public class ScpClient implements Closeable {
 
 	@SuppressWarnings("unchecked")
 	public List<Long> sizeByLs(String lfile) throws JSchException, IOException {
-		Session session = connectionSession();
+		Session session = getConnectedSession();
 
 		// exec 'scp -f rfile' remotely
 		Channel channel = session.openChannel("sftp");
@@ -333,15 +333,15 @@ public class ScpClient implements Closeable {
 		if (session != null && session.isConnected()) {
 			//log.info("disconnect");
 			session.disconnect();
-			session = null;
 		}
+		session = null;
 	}
 
 	private int getBufferSize() {
 		return 1024 * 1024;
 	}
 
-	private Session connectionSession() throws JSchException {
+	private Session getConnectedSession() throws JSchException {
 		if (session == null) {
 			session = jsch.getSession(username, hostName);