diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CheckStatusOfHaaS.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CheckStatusOfHaaS.java
index c448de1cdea98a0f9c38e806009cc03f34ace84a..984cde4f40a6c492927e0542c4ca40df15b5cda6 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CheckStatusOfHaaS.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CheckStatusOfHaaS.java
@@ -25,7 +25,7 @@ import net.imagej.ImageJ;
  *
  */
 @Plugin(type = Command.class, headless = true, menuPath = "Plugins>Check status of HaaS")
-public class CheckStatusOfHaaS extends CommandBase implements Command {
+public class CheckStatusOfHaaS implements Command {
 
 	@Parameter
 	private LogService log;
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CommandBase.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CommandBase.java
deleted file mode 100644
index 835b0ff55d0dec94d00faef60602bd7985998a17..0000000000000000000000000000000000000000
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CommandBase.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cz.it4i.fiji.haas;
-
-import org.scijava.log.LogService;
-import org.scijava.plugin.Parameter;
-
-class CommandBase {
-	@Parameter
-	private LogService _log;
-
-	protected ImageJGate getGate() {
-		return gate;
-	}
-
-	private ImageJGate gate = new ImageJGate() {
-
-		@Override
-		public LogService getLog() {
-			return _log;
-		}
-	};
-}
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ImageJGate.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ImageJGate.java
deleted file mode 100644
index 1a5ce21a124b8d04d075aadc4fdbdf573f4a2bb7..0000000000000000000000000000000000000000
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ImageJGate.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package cz.it4i.fiji.haas;
-
-import org.scijava.log.LogService;
-
-interface ImageJGate {
-
-	LogService getLog();
-}
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 895a73edd9c8b4ef4c927571b7e9fc322ab65a2a..f6d891465341260b09e5bb32867f547997ae59e1 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
@@ -13,6 +13,9 @@ import java.util.EnumSet;
 import java.util.Properties;
 import java.util.function.Supplier;
 
+import org.scijava.log.LogService;
+import org.scijava.plugin.Parameter;
+
 import cz.it4i.fiji.haas_java_client.HaaSClient;
 import cz.it4i.fiji.haas_java_client.JobInfo;
 import cz.it4i.fiji.haas_java_client.JobState;
@@ -31,6 +34,9 @@ public class Job {
 
 	private static String JOB_INFO_FILE = ".jobinfo";
 
+	@Parameter
+	private LogService log;
+	
 	private Path jobDir;
 
 	private Supplier<HaaSClient> haasClientSupplier;
@@ -79,7 +85,6 @@ public class Job {
 	}
 
 	synchronized public void updateState() throws IOException {
-		long jobId = getJobId();
 		JobState actualState = updateJobInfo().getState();
 		if (EnumSet.of(JobState.Failed, JobState.Finished, JobState.Canceled).contains(actualState)
 				&& state != actualState) {
@@ -98,6 +103,11 @@ public class Job {
 		}
 		haasClientSupplier.get().download(getJobId(), jobDir);
 		needsDownload = false;
+		try {
+			saveJobinfo();
+		} catch (IOException e) {
+			log.error(e);
+		}
 	}
 	
 	public JobState getState() {
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 193e41d607b6ecdec64cef0a1a091f3209ebdef3..2a6cd6c5a472fdc64bf06daf70c13539a65d69e6 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
@@ -103,6 +103,11 @@ public class JobManager {
 			return job.getEndTime().getTime().toString();
 		}
 
+		public void downloadData() {
+			job.download();
+			fireValueChangedEvent();
+		}
+		
 		@Override
 		public JobInfo getValue() {
 			return this;
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java
index 2728790bda49dfbe12d05ca9e5aa8c55dcaddcd1..bbae55031ff42e984757b7ef06d5ca93d6cf83a2 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java
@@ -21,7 +21,7 @@ import net.imagej.ImageJ;
  *
  */
 @Plugin(type = Command.class, headless = true, menuPath = "Plugins>Run with HaaS")
-public class RunWithHaaS extends CommandBase implements Command {
+public class RunWithHaaS implements Command {
 
 	@Parameter
 	private LogService log;
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/CheckStatusOfHaaSController.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/CheckStatusOfHaaSController.java
index 55b671abde85d5c424512a033eced0ce1ae3ee28..68b31a1e10699736e06fb4c1c25586349e43f3d5 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/CheckStatusOfHaaSController.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/CheckStatusOfHaaSController.java
@@ -1,7 +1,5 @@
 package cz.it4i.fiji.haas.ui;
 
-
-
 import java.util.function.Function;
 
 import org.scijava.log.LogService;
@@ -19,59 +17,61 @@ import javafx.scene.control.TableView;
 import javafx.scene.input.ContextMenuEvent;
 
 public class CheckStatusOfHaaSController {
-	
-	
+
 	@Parameter
 	private LogService logService;
-	
+
 	@FXML
 	private TableView<JobInfo> jobs;
-	
+
 	public CheckStatusOfHaaSController() {
-		
+
 	}
-	
+
 	public void addJob(JobInfo job) {
 		jobs.getItems().add(job);
 	}
-	
+
 	public void init() {
+		initTable();
+		initMenu();
+	}
+
+	private void initMenu() {
 		ContextMenu cm = new ContextMenu();
 		MenuItem download = new MenuItem("Download");
+		download.setOnAction(ev->jobs.getSelectionModel().getSelectedItem().downloadData());
 		cm.getItems().add(download);
-		setCellValueFactory(0,j->j.getId().toString());
-		setCellValueFactory(1,j->j.getState().toString() + (j.needsDownload()?" - needs download":""));
-		setCellValueFactory(2,j->j.getStartTime().toString());
-		setCellValueFactory(3,j->j.getEndTime().toString());
 		jobs.setContextMenu(cm);
 		jobs.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
 
 			@Override
 			public void handle(ContextMenuEvent event) {
-				if(jobs.getSelectionModel().getSelectedCells().size() < 1) {
+				if (jobs.getSelectionModel().getSelectedCells().size() < 1) {
 					return;
 				}
-				int row = jobs.getSelectionModel().getSelectedCells().get(0).getRow();
+				JobInfo job = jobs.getSelectionModel().getSelectedItem();
 				
-				if(0 >= row && row < jobs.getItems().size() && jobs.getItems().get(row).needsDownload()) {
+				if (job != null && job.needsDownload()) {
 					download.setDisable(false);
 				} else {
 					download.setDisable(true);
 				}
-				
-				
 			}
 		});
-		logService.info("init");
 	}
-	
-	@SuppressWarnings("unchecked")
-	private void setCellValueFactory(int index, Function<JobInfo,String> mapper) {
-		((TableColumn<JobInfo, String>)jobs.getColumns().get(index)).setCellValueFactory(f->getObservableValue(f, mapper));
-		
+
+	private void initTable() {
+		setCellValueFactory(0, j -> j.getId().toString());
+		setCellValueFactory(1, j -> j.getState().toString() + (j.needsDownload() ? " - needs download" : ""));
+		setCellValueFactory(2, j -> j.getStartTime().toString());
+		setCellValueFactory(3, j -> j.getEndTime().toString());
 	}
 
-	private ObservableValue<String> getObservableValue(CellDataFeatures<JobInfo, String> feature, Function<JobInfo,String> mapper) {
-		return new ObservableValueAdapter<JobInfo,String>(feature.getValue(), mapper);
+	@SuppressWarnings("unchecked")
+	private void setCellValueFactory(int index, Function<JobInfo, String> mapper) {
+		((TableColumn<JobInfo, String>) jobs.getColumns().get(index))
+				.setCellValueFactory(f -> new ObservableValueAdapter<JobInfo, String>(f.getValue(), mapper));
+
 	}
 }