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 1b0eea1e19d7e24ff87de7bf18f653122ffdc0e7..cdcefc45f0bd0b8ef1673ffc5b7948a24bffde01 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
@@ -36,6 +36,15 @@ import cz.it4i.fiji.scpclient.TransferFileProgress;
  */
 public class Job {
 
+	public static boolean isValidJobPath(Path path) {
+		try {
+			getJobId(path);
+		} catch (NumberFormatException e) {
+			return false;
+		}
+		return Files.isRegularFile(path.resolve(JOB_INFO_FILENAME));
+	}
+
 	private static final String JOB_NAME = "job.name";
 
 	private static final String JOB_NEEDS_UPLOAD = "job.needs_upload";
@@ -50,15 +59,6 @@ public class Job {
 	
 	private static final String JOB_IS_UPLOADED = "job.uploaded";
 
-	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;
@@ -318,9 +318,9 @@ public class Job {
 		return jobDir;
 	}
 
-	public boolean remove() {
+	public boolean delete() {
 		boolean result;
-		if ((result = jobManager.remove(this)) && Files.isDirectory(jobDir)) {
+		if ((result = jobManager.deleteJob(this)) && Files.isDirectory(jobDir)) {
 			List<Path> pathsToDelete;
 			try {
 				pathsToDelete = Files.walk(jobDir).sorted(Comparator.reverseOrder()).collect(Collectors.toList());
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 862562e515eac0d1d48d6e81e87a5557f20324eb..6fa051107af09860f470925b192cb89feba77721 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
@@ -18,7 +18,7 @@ import cz.it4i.fiji.haas_java_client.SynchronizableFileType;
 public class JobManager implements Closeable {
 
 	interface JobManager4Job {
-		boolean remove(Job job);
+		boolean deleteJob(Job job);
 	}
 
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.JobManager.class);
@@ -34,7 +34,8 @@ public class JobManager implements Closeable {
 	private final JobManager4Job remover = new JobManager4Job() {
 
 		@Override
-		public boolean remove(Job job) {
+		public boolean deleteJob(Job job) {
+			haasClient.deleteJob(job.getId());
 			return jobs.remove(job);
 		}
 	};
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 c33528cde87f4dad3d174482c44b0698620a7924..f3c67a341f10bb75bb1d652f74de0263f03487d6 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
@@ -28,7 +28,7 @@ public interface JavaFXRoutines {
 			void accept(TableCell<?, ?> cell, B value, boolean empty);
 		}
 
-		private TableCellUpdater<S, T> updater;
+		private final TableCellUpdater<S, T> updater;
 
 		public TableCellAdapter(TableCellUpdater<S, T> updater) {
 			this.updater = updater;
@@ -36,14 +36,18 @@ public interface JavaFXRoutines {
 
 		@Override
 		protected void updateItem(T item, boolean empty) {
-			updater.accept(this, item, empty);
+			if(empty) {
+				this.setText("");
+			} else {
+				updater.accept(this, item, empty);
+			}
 		}
 	}
 
 	static public class FutureValueUpdater<S, T, U extends CompletableFuture<T>> implements TableCellUpdater<S, U> {
 
-		private TableCellUpdater<S, T> inner;
-		private Executor executor;
+		private final TableCellUpdater<S, T> inner;
+		private final Executor executor;
 
 		public FutureValueUpdater(TableCellUpdater<S, T> inner, Executor exec) {
 			this.inner = inner;
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 518dab5ef745370b63a19285db8844db6dfaf9ef..f7e006602d4d98a5a9b8c016dcee51daba9cbffe 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
@@ -298,6 +298,14 @@ public class HaaSClient {
 		}
 	}
 
+	public void deleteJob(long id) {
+		try {
+			getJobManagement().deleteJob(id, getSessionID());
+		} catch (RemoteException | ServiceException e) {
+			throw new HaaSClientException(e);
+		}
+	}
+
 	private HaaSFileTransferImp getFileTransferMethod(long jobId, TransferFileProgress progress)
 			throws RemoteException, UnsupportedEncodingException, ServiceException, JSchException {
 		P_FileTransferPool pool = filetransferPoolMap.computeIfAbsent(jobId, id -> new P_FileTransferPool(id));
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobState.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobState.java
index 374481004f6c13fb6f4dcccee151dc97b4cb0ab3..3468aeda2d3b641547c1e0fc975d91af04a3837d 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobState.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobState.java
@@ -8,5 +8,6 @@ public enum JobState {
     Running,
     Finished,
     Failed,
-    Canceled;
+    Canceled, 
+    Disposed;
 }
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 f4ea2f56590abdf6841840ff3bf6113448ce0568..83e26cf44be4662fd4cd8029f496a0b792ad4cd6 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
@@ -205,8 +205,8 @@ public class BenchmarkJobManager implements Closeable{
 			return computationAccessor.getActualOutput(Arrays.asList(SynchronizableFileType.StandardErrorFile)).get(0);
 		}
 
-		public boolean remove() {
-			return job.remove();
+		public boolean delete() {
+			return job.delete();
 		}
 
 		public void cancelJob() {
@@ -223,6 +223,34 @@ public class BenchmarkJobManager implements Closeable{
 			job.resumeUpload();
 		}
 
+		public void setDownloaded(Boolean val) {
+			job.setDownloaded(val);
+		}
+
+		public void setUploaded(boolean b) {
+			job.setUploaded(b);
+		}
+
+		public boolean isDownloaded() {
+			return job.isDownloaded();
+		}
+
+		public boolean isUploaded() {
+			return job.isUploaded();
+		}
+
+		public void stopDownload() {
+			job.stopDownloadData();
+		}
+
+		public boolean needsDownload() {
+			return job.needsDownload();
+		}
+
+		public boolean needsUpload() {
+			return job.needsUpload();
+		}
+
 		@Override
 		public String toString() {
 			return "" + getId();
@@ -420,34 +448,6 @@ public class BenchmarkJobManager implements Closeable{
 			Stream<BenchmarkError> taskSpecificErrors = tasks.stream().flatMap(s -> s.getErrors().stream());
 			return Stream.concat(nonTaskSpecificErrors.stream(), taskSpecificErrors).collect(Collectors.toList());
 		}
-
-		public void setDownloaded(Boolean val) {
-			job.setDownloaded(val);
-		}
-		
-		public void setUploaded(boolean b) {
-			job.setUploaded(b);
-		}
-
-		public boolean isDownloaded() {
-			return job.isDownloaded();
-		}
-
-		public boolean isUploaded() {
-			return job.isUploaded();
-		}
-
-		public void stopDownload() {
-			job.stopDownloadData();
-		}
-
-		public boolean needsDownload() {
-			return job.needsDownload();
-		}
-
-		public boolean needsUpload() {
-			return job.needsUpload();
-		}
 	}
 
 	public BenchmarkJobManager(BenchmarkSPIMParameters params) throws IOException {
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 17a2429b65e1067afe55265869f85020ba36b037..bda229a11188a8d8a4ee9e7efd5ff52259de970e 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
@@ -126,10 +126,10 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 
 		menu.addItem("Upload data", job -> executeWSCallAsync("Uploading data", p -> job.getValue().startUpload()),
 				job -> executeWSCallAsync("Stop uploading data", p -> job.getValue().stopUpload()),
-				job -> JavaFXRoutines.notNullValue(job, j -> !EnumSet.of(JobState.Running).contains(j.getState())),
+				job -> JavaFXRoutines.notNullValue(job,
+						j -> !EnumSet.of(JobState.Running, JobState.Disposed).contains(j.getState())),
 				job -> job.getUploadProgress().isWorking());
 		
-		
 		menu.addItem("Download result",
 				job -> executeWSCallAsync("Downloading data", p -> job.getValue().startDownload()),
 				job -> executeWSCallAsync("Stop downloading data", p -> job.getValue().stopDownload()),
@@ -146,6 +146,13 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 				job -> JavaFXRoutines.notNullValue(job, j -> j.getState().equals(JobState.Failed)));
 
 		menu.addItem("Open working directory", j -> open(j.getValue()), x -> JavaFXRoutines.notNullValue(x, j -> true));
+		
+		menu.addItem("Delete", j -> deleteJob(j.getValue()), x -> JavaFXRoutines.notNullValue(x, j -> true));
+	}
+
+	private void deleteJob(BenchmarkJob bj) {
+		bj.delete();
+		registry.update();
 	}
 
 	private void open(BenchmarkJob j) {
@@ -242,7 +249,6 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 
 	private void remove(BenchmarkJob bj) {
 		jobs.getItems().remove(registry.get(bj));
-		bj.remove();
 	}
 
 	private void setCellValueFactory(int index, Function<BenchmarkJob, String> mapper) {