diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JavaFXRoutines.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JavaFXRoutines.java
index 59ae9b7c86a5c374991c1d6f0ffe9e410b62bed0..c33528cde87f4dad3d174482c44b0698620a7924 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JavaFXRoutines.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JavaFXRoutines.java
@@ -6,6 +6,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -135,5 +136,13 @@ public interface JavaFXRoutines {
 			}
 		});
 	}
+	
+	public static <T> boolean notNullValue(ObservableValue<T> j, Predicate<T> pred) {
+		if (j == null || j.getValue() == null) {
+			return false;
+		} else {
+			return pred.test(j.getValue());
+		}
+	}
 
 }
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 c27c53b274d8fdf0ed347785abd5d7f007257830..bc42c23bdd874d22c6000783770e10247dfc7b67 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
@@ -16,7 +16,6 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.function.Function;
-import java.util.function.Predicate;
 
 import javax.swing.WindowConstants;
 
@@ -44,15 +43,7 @@ import net.imagej.updater.util.Progress;
 
 public class BenchmarkSPIMController extends BorderPane implements CloseableControl, InitiableControl {
 
-	private static boolean notNullValue(ObservableValue<BenchmarkJob> j, Predicate<BenchmarkJob> pred) {
-		if (j == null || j.getValue() == null) {
-			return false;
-		} else {
-			return pred.test(j.getValue());
-		}
-	}
-
-	@FXML
+		@FXML
 	private TableView<ObservableValue<BenchmarkJob>> jobs;
 
 	private BenchmarkJobManager manager;
@@ -99,37 +90,36 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 		menu.addItem("Start job", job -> executeWSCallAsync("Starting job", p -> {
 			job.getValue().startJob(p);
 			registry.get(job.getValue()).update();
-		}), job -> notNullValue(job, j -> j.getState() == JobState.Configuring || j.getState() == JobState.Finished
+		}), job -> JavaFXRoutines.notNullValue(job, j -> j.getState() == JobState.Configuring || j.getState() == JobState.Finished
 				|| j.getState() == JobState.Failed));
 
 		menu.addItem("Cancel job", job -> executeWSCallAsync("Canceling job", p -> {
 			job.getValue().cancelJob();
 			registry.get(job.getValue()).update();
-		}), job -> notNullValue(job, j -> j.getState() == JobState.Running));
+		}), job -> JavaFXRoutines.notNullValue(job, j -> j.getState() == JobState.Running));
 
 		menu.addItem("Execution details", job -> {
 			try {
 				new JobDetailWindow(root, job.getValue()).setVisible(true);
 			} catch (IOException e) {
-				// TODO Auto-generated catch block
 				log.error(e.getMessage(), e);
 			}
-		}, job -> notNullValue(job, j -> j.getState() == JobState.Running || j.getState() == JobState.Finished
+		}, job -> JavaFXRoutines.notNullValue(job, j -> j.getState() == JobState.Running || j.getState() == JobState.Finished
 				|| j.getState() == JobState.Failed || j.getState() == JobState.Canceled));
 
 		menu.addItem("Download result",
 				job -> executeWSCallAsync("Downloading data", p -> job.getValue().downloadData(p)),
-				job -> notNullValue(job,
+				job -> JavaFXRoutines.notNullValue(job,
 						j -> EnumSet.of(JobState.Failed, JobState.Finished, JobState.Canceled).contains(j.getState())
 								&& !j.downloaded()));
 		menu.addItem("Download statistics",
 				job -> executeWSCallAsync("Downloading data", p -> job.getValue().downloadStatistics(p)),
-				job -> notNullValue(job, j -> j.getState() == JobState.Finished));
+				job -> JavaFXRoutines.notNullValue(job, j -> j.getState() == JobState.Finished));
 
 		menu.addItem("Explore errors", job -> job.getValue().exploreErrors(),
-				job -> notNullValue(job, j -> j.getState().equals(JobState.Failed)));
+				job -> JavaFXRoutines.notNullValue(job, j -> j.getState().equals(JobState.Failed)));
 
-		menu.addItem("Open working directory", j -> open(j.getValue()), x -> notNullValue(x, j -> true));
+		menu.addItem("Open working directory", j -> open(j.getValue()), x -> JavaFXRoutines.notNullValue(x, j -> true));
 	}
 
 	private void open(BenchmarkJob j) {
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/RemoteFilesInfoControl.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/RemoteFilesInfoControl.java
index de9e3af739c6c7a6e2eaaa18902591b17b5af4ca..c1297b9a8a7336e01709a398e5185aa465046c62 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/RemoteFilesInfoControl.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/RemoteFilesInfoControl.java
@@ -5,6 +5,8 @@ import java.util.List;
 import java.util.function.Function;
 
 import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import cz.it4i.fiji.haas.ui.CloseableControl;
 import cz.it4i.fiji.haas.ui.InitiableControl;
@@ -16,6 +18,10 @@ import javafx.scene.layout.BorderPane;
 
 public class RemoteFilesInfoControl extends BorderPane implements CloseableControl, InitiableControl {
 
+	@SuppressWarnings("unused")
+	private static Logger log = LoggerFactory
+			.getLogger(cz.it4i.fiji.haas_spim_benchmark.ui.RemoteFilesInfoControl.class);
+	
 	@SuppressWarnings("unused")
 	private Window root;
 
@@ -25,7 +31,6 @@ public class RemoteFilesInfoControl extends BorderPane implements CloseableContr
 	public RemoteFilesInfoControl(List<ObservableValue< RemoteFileInfo>> files) {
 		JavaFXRoutines.initRootAndController("RemoteFilesInfo.fxml", this);
 		files.forEach(file->this.files.getItems().add(file));
-		
 	}
 	
 	@Override
@@ -36,7 +41,6 @@ public class RemoteFilesInfoControl extends BorderPane implements CloseableContr
 
 	@Override
 	public void close() {
-		// TODO Auto-generated method stub
 
 	}
 
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 c88cc6979a8770ef83e23c91e0427238bf284223..a50ce0cdfe7227e5d03cb3ffd70e3d62685eac1b 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
@@ -1,5 +1,8 @@
 package cz.it4i.fiji.haas_spim_benchmark.ui;
 
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -14,6 +17,7 @@ import java.util.stream.Collectors;
 
 import cz.it4i.fiji.haas.ui.CloseableControl;
 import cz.it4i.fiji.haas.ui.JavaFXRoutines;
+import cz.it4i.fiji.haas.ui.TableViewContextMenu;
 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.Constants;
@@ -21,6 +25,7 @@ import cz.it4i.fiji.haas_spim_benchmark.core.FXFrameExecutorService;
 import cz.it4i.fiji.haas_spim_benchmark.core.Task;
 import cz.it4i.fiji.haas_spim_benchmark.core.TaskComputation;
 import javafx.beans.value.ObservableValue;
+import javafx.beans.value.ObservableValueBase;
 import javafx.fxml.FXML;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
@@ -98,7 +103,56 @@ public class SPIMPipelineProgressViewController extends BorderPane implements Cl
 		tasks.setPrefWidth(PREFERRED_WIDTH);
 		timer = new Timer();
 		registry = new ObservableTaskRegistry(task -> tasks.getItems().remove(registry.get(task)));
+		TableViewContextMenu<ObservableValue<Task>> menu = new TableViewContextMenu<ObservableValue<Task>>(this.tasks);
+		menu.addItem("Open view", task->proof(task), x->x!=null);
+	}
+
+	private void proof(ObservableValue<Task> task) {
+		executorServiceWS.execute(()-> {
+			TaskComputationAdapter adapter = new TaskComputationAdapter(task.getValue().getComputations().get(0));
+			
+		
+		class Window extends cz.it4i.fiji.haas.ui.FXFrame<RemoteFilesInfoControl>{
+			private static final long serialVersionUID = 1L;
 
+			public Window() {
+				super(()-> new RemoteFilesInfoControl(adapter.getOutputs()));
+			}
+		}
+		
+		Window w = new Window();
+		w.addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosed(WindowEvent e) {
+				adapter.close();
+			}
+		});
+		w.setVisible(true);});
+	}
+	
+	static void add(Collection<ObservableValue<RemoteFileInfo>> files, String name, long size) {
+		RemoteFileInfo file = new RemoteFileInfo() {
+			
+			@Override
+			public Long getSize() {
+				return size;
+			}
+			
+			@Override
+			public String getName() {
+				return name;
+			}
+			
+		};
+		ObservableValue<RemoteFileInfo> value = new ObservableValueBase<RemoteFileInfo>() {
+
+			@Override
+			public RemoteFileInfo getValue() {
+				return file;
+			}
+		};
+		
+		files.add(value);
 	}
 
 	private void fillTable() {
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 5a4d411870b98a36506b078405fcbe81dc2f0fc5..10ae4fdeae86bf6087dd66f7d4fb5f6d3f7eadf1 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
@@ -11,6 +11,7 @@ import cz.it4i.fiji.haas_spim_benchmark.core.Constants;
 import cz.it4i.fiji.haas_spim_benchmark.core.TaskComputation;
 import javafx.beans.value.ObservableValue;
 import javafx.beans.value.ObservableValueBase;
+
 //TASK: Dodělat naplnění logs, aktualizace a getXXX
 //      Pokračovat zapojením do UI - akce v SPIMPipelineProgressViewWindow 
 //      pro zobrazení TaskComputation
@@ -18,8 +19,9 @@ public class TaskComputationAdapter implements Closeable {
 
 	private final TaskComputation computation;
 
-	private final List<ObservableOutputFile> outputs = new LinkedList<>();
+	private final List<ObservableValue<RemoteFileInfo>> outputs = new LinkedList<>();
 
+	@SuppressWarnings("unused")
 	private final List<ObservableValue<String>> logs = new LinkedList<>();
 
 	private final Timer timer;
@@ -32,15 +34,19 @@ public class TaskComputationAdapter implements Closeable {
 		timer.scheduleAtFixedRate(new P_TimerTask(), Constants.HAAS_TIMEOUT, Constants.HAAS_TIMEOUT);
 	}
 
-	private void addOutputFile(String outputFile, Long size) {
-		outputs.add(new ObservableOutputFile(outputFile, size));
-	}
-
 	@Override
 	public void close() {
 		timer.cancel();
 	}
 
+	public List<ObservableValue<RemoteFileInfo>> getOutputs() {
+		return outputs;
+	}
+
+	private void addOutputFile(String outputFile, Long size) {
+		outputs.add(new ObservableOutputFile(outputFile, size));
+	}
+
 	public static class Log {
 		public String getName() {
 			return null;
@@ -51,7 +57,7 @@ public class TaskComputationAdapter implements Closeable {
 		}
 	}
 
-	private class ObservableOutputFile extends ObservableValueBase<RemoteFileInfo> {
+	public class ObservableOutputFile extends ObservableValueBase<RemoteFileInfo> {
 
 		private final String name;
 
@@ -94,7 +100,7 @@ public class TaskComputationAdapter implements Closeable {
 		@Override
 		public void run() {
 			Map<String, Long> sizes = computation.getOutFileSizes();
-			outputs.forEach(value -> value.setSize(sizes.get(value.getValue().getName())));
+			outputs.forEach(value -> ((ObservableOutputFile) value).setSize(sizes.get(value.getValue().getName())));
 		}
 
 	}