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 11c7654110f6848d990963f330a4e619cef09c21..330bb892da3866d92dae5e2f887329059628ad0d 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
@@ -437,7 +437,7 @@ public class Job {
 						setDownloaded(true);
 						setProperty(JOB_NEEDS_DOWNLOAD, false);
 						setCanBeDownloaded(false);
-					});
+					}, p -> jobManager.canUpload(Job.this, p));
 		} catch (IOException e) {
 			log.error(e.getMessage(), e);
 			throw new RuntimeException(e);
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 46f2d65f7099cf1e020de1bec579919ecebe4828..902780ceb5812c3d3f42d58cf3140c662ae47357 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
@@ -7,6 +7,7 @@ import java.nio.file.Path;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
+import java.util.function.BiPredicate;
 import java.util.function.Function;
 
 import org.slf4j.Logger;
@@ -20,10 +21,14 @@ public class JobManager implements Closeable {
 
 	interface JobManager4Job {
 		boolean deleteJob(Job job);
+
+		boolean canUpload(Job j, Path p);
 	}
 
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.JobManager.class);
 
+	private static final BiPredicate<Job, Path> DUMMY_UPLOAD_FILTER = (X, Y) -> true;
+
 	private final Path workDirectory;
 
 	private Collection<Job> jobs;
@@ -32,6 +37,8 @@ public class JobManager implements Closeable {
 
 	private final Settings settings;
 
+	private BiPredicate<Job, Path> uploadFilter = DUMMY_UPLOAD_FILTER;
+
 	private final JobManager4Job remover = new JobManager4Job() {
 
 		@Override
@@ -39,6 +46,11 @@ public class JobManager implements Closeable {
 			haasClient.deleteJob(job.getId());
 			return jobs.remove(job);
 		}
+
+		@Override
+		public boolean canUpload(Job j, Path p) {
+			return uploadFilter.test(j, p);
+		}
 	};
 
 	public JobManager(Path workDirectory, Settings settings) {
@@ -65,6 +77,10 @@ public class JobManager implements Closeable {
 		jobs.forEach(job -> job.close());
 	}
 
+	public void setUploadFilter(BiPredicate<Job, Path> filter) {
+		uploadFilter = filter != null ? filter : DUMMY_UPLOAD_FILTER;
+	}
+
 	private HaaSClient getHaasClient() {
 		if (haasClient == null) {
 			haasClient = new HaaSClient(settings);
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 14c581b98ae17965e549280432393a7f03579982..f2f2181efb8e24e8db9ebd754ab58384fd78b9bc 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
@@ -12,6 +12,7 @@ import java.util.Collections;
 import java.util.LinkedList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.function.Predicate;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
@@ -48,14 +49,10 @@ public class Synchronization implements Closeable {
 
 	private final ExecutorService service;
 
-//	public Synchronization(Supplier<HaaSFileTransfer> fileTransferSupplier, Path workingDirectory,
-//			Runnable uploadFinishedNotifier, Runnable downloadFinishedNotifier) throws IOException {
-//		this(fileTransferSupplier, workingDirectory, workingDirectory, workingDirectory, uploadFinishedNotifier,
-//				downloadFinishedNotifier);
-//	}
-	
+	private final Predicate<Path> uploadFilter;
+
 	public Synchronization(Supplier<HaaSFileTransfer> fileTransferSupplier, Path workingDirectory, Path inputDirectory,
-			Path outputDirectory, Runnable uploadFinishedNotifier, Runnable downloadFinishedNotifier)
+			Path outputDirectory, Runnable uploadFinishedNotifier, Runnable downloadFinishedNotifier, Predicate<Path> uploadFilter)
 			throws IOException {
 		this.workingDirectory = workingDirectory;
 		this.inputDirectory = inputDirectory;
@@ -65,6 +62,7 @@ public class Synchronization implements Closeable {
 				name -> Paths.get(name));
 		this.uploadProcess = createUploadProcess(fileTransferSupplier, service, uploadFinishedNotifier);
 		this.downloadProcess = createDownloadProcess(fileTransferSupplier, service, downloadFinishedNotifier);
+		this.uploadFilter = uploadFilter;
 	}
 
 	public synchronized void setUploadNotifier(ProgressNotifier notifier) {
@@ -109,8 +107,8 @@ public class Synchronization implements Closeable {
 	}
 
 	private boolean canUpload(Path file) {
-
-		return !file.getFileName().toString().matches("[.][^.]+") && !filesDownloaded.contains(file);
+		return uploadFilter.test(file) && !file.getFileName().toString().matches("[.][^.]+")
+				&& !filesDownloaded.contains(file);
 	}
 
 	private PersistentSynchronizationProcess<Path> createUploadProcess(Supplier<HaaSFileTransfer> fileTransferSupplier,
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 d74cace55ffbc4b0bd170ea5652ce245ff48a9ba..e565d1d65a5c53e1bcee290802eb4d8bb731e336 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
@@ -25,6 +25,7 @@ import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Scanner;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executor;
@@ -252,13 +253,12 @@ public class BenchmarkJobManager implements Closeable {
 		public boolean needsUpload() {
 			return job.needsUpload();
 		}
-		
 
 		@Override
 		public String toString() {
 			return "" + getId();
 		}
-		
+
 		public void storeDataInWorkdirectory(UploadingFile file) throws IOException {
 			job.storeDataInWorkdirectory(file);
 		}
@@ -460,11 +460,12 @@ 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 BenchmarkJobManager(BenchmarkSPIMParameters params) throws IOException {
 		jobManager = new JobManager(params.workingDirectory(), constructSettingsFromParams(params));
+		jobManager.setUploadFilter(this::canUpload);
 	}
 
 	public BenchmarkJob createJob(Function<Path, Path> inputDirectoryProvider,
@@ -583,7 +584,10 @@ public class BenchmarkJobManager implements Closeable {
 		jobManager.close();
 	}
 
-	
+	private boolean canUpload(Job job, Path p) {
+		return job.getInputDirectory() == null || !p.equals(job.getInputDirectory().resolve(Constants.CONFIG_YAML));
+	}
+
 	private BenchmarkJob convertJob(Job job) {
 		return new BenchmarkJob(job);
 	}
@@ -591,9 +595,9 @@ public class BenchmarkJobManager implements Closeable {
 	private String getOutputName(InputStream openLocalFile) throws IOException {
 		try (InputStream is = openLocalFile) {
 			Yaml yaml = new Yaml();
-
 			Map<String, Map<String, String>> map = yaml.load(is);
-			String result = map.get("common").get("hdf5_xml_filename");
+			String result = Optional.ofNullable(map).map(m -> m.get("common")).map(m -> m.get("hdf5_xml_filename"))
+					.orElse(null);
 			if (result == null) {
 				throw new IllegalArgumentException("hdf5_xml_filename not found");
 			}
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 fd33cca18396606dab930e2ae0e5feaa5a4a94f8..cf34023108706defbe30d1456a720d107a8837c1 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
@@ -1,5 +1,7 @@
 package cz.it4i.fiji.haas_spim_benchmark.ui;
 
+import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.CONFIG_YAML;
+
 import java.awt.Desktop;
 import java.awt.Window;
 import java.io.IOException;
@@ -21,7 +23,6 @@ import java.util.function.Function;
 
 import javax.swing.WindowConstants;
 
-import org.apache.commons.lang3.NotImplementedException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,9 +44,13 @@ import cz.it4i.fiji.haas_spim_benchmark.core.ObservableBenchmarkJob;
 import cz.it4i.fiji.haas_spim_benchmark.core.ObservableBenchmarkJob.TransferProgress;
 import javafx.beans.value.ObservableValue;
 import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Alert.AlertType;
+import javafx.scene.control.ButtonType;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
 import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.Region;
 import net.imagej.updater.util.Progress;
 
 //FIXME: fix Exception during context menu request on task with N/A state
@@ -171,8 +176,30 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont
 						BenchmarkJob job = doCreateJob(wd -> newJobWindow.getInputDirectory(wd), wd -> newJobWindow.getOutputDirectory(wd));
 						if (job.isUseDemoData()) {
 							job.storeDataInWorkdirectory(getConfigYamlFile());
-						} else if (Files.exists(job.getInputDirectory().resolve(Constants.CONFIG_YAML))) {
-							throw new NotImplementedException("");
+						} else if (Files.exists(job.getInputDirectory().resolve(CONFIG_YAML))) {
+							executorServiceFX.execute(new Runnable() {
+								
+								@Override
+								public void run() {
+									Alert al = new Alert(AlertType.CONFIRMATION,
+											"Main file \"" + CONFIG_YAML + "\" found in input directory \""
+													+ job.getInputDirectory()
+													+ "\". Would you like to copy it into job subdirectory \""
+													+ job.getDirectory() + "\"?",
+											ButtonType.YES, ButtonType.NO);
+									al.setHeaderText(null);
+									al.setTitle("Copy " + CONFIG_YAML + "?");
+									al.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
+									if (al.showAndWait().get() == ButtonType.YES) {
+										try {
+											Files.copy(job.getInputDirectory().resolve(CONFIG_YAML), job.getDirectory().resolve(CONFIG_YAML));
+										} catch (IOException e) {
+											log.error(e.getMessage(), e);
+										}
+									}
+								}
+							});
+							
 						}
 					}
 				}