diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java
index e4620e640b62ab4225db4a491261813b5dca8d4b..5c809cb62ae4324dfee5ff0434a42c6e63963879 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java
@@ -3,8 +3,6 @@ package cz.it4i.fiji.haas;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.nio.file.Path;
 import java.time.Instant;
 import java.util.Collections;
@@ -17,33 +15,38 @@ public class BenchmarkJobManager {
 	private JobManager jobManager;
 	private Progress progress;
 	private Path workDirectory;
+
 	private static final String CONFIG_FOR_MODIFICATION = "not-set-config.yaml";
 	private static final String CONFIG_MODIFIED = "config.yaml";
-	
+
 	public BenchmarkJobManager(Path workDirectory, Progress progress) throws IOException {
 		this.workDirectory = workDirectory;
 		jobManager = new JobManager(workDirectory, TestingConstants.getSettings(3, 6));
 		this.progress = progress;
 	}
-	
+
 	public JobInfo startJob() throws IOException {
-		JobInfo jobInfo = jobManager.startJob( Collections.emptyList(), null);
+		JobInfo jobInfo = jobManager.startJob(Collections.emptyList(), null);
 		jobInfo.waitForStart();
-		if(jobInfo.getState() != JobState.Running) {
+		if (jobInfo.getState() != JobState.Running) {
 			throw new IllegalStateException("start of job: " + jobInfo + " failed");
 		}
 		ByteArrayOutputStream os = new ByteArrayOutputStream();
-		jobInfo.downloadFileData(CONFIG_FOR_MODIFICATION,os);
-		byte[]data  = updateConfigFile(os.toByteArray());
-		
-		jobInfo.uploadFile (new ByteArrayInputStream(data),CONFIG_MODIFIED, data.length ,Instant.now().getEpochSecond());
+		jobInfo.downloadFileData(CONFIG_FOR_MODIFICATION, os);
+		byte[] data = updateConfigFile(os.toByteArray());
+
+		jobInfo.uploadFile(new ByteArrayInputStream(data), CONFIG_MODIFIED, data.length,
+				Instant.now().getEpochSecond());
 		return jobInfo;
 	}
 
+	public JobState getState(long jobId) {
+		return jobManager.getState(jobId);
+	}
+
 	private byte[] updateConfigFile(byte[] data) throws IOException {
 		return data;
-		
+
 	}
 
-	
 }
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 a280b9c9646b8e4a588c627665c454fdc521c5af..ec931362fabdfa10c8027679aa362e1161e85d62 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
@@ -134,9 +134,12 @@ public class Job {
 	}
 
 	public void downloadFileData(String fileName, OutputStream bos) {
-		haasClientSupplier.get().downloadFileData(jobId,fileName, bos);
+		haasClientSupplier.get().downloadFileData(jobId, fileName, bos);
+	}
+
+	public void uploadFileData(InputStream inputStream, String fileName, int length, long lastModification) {
+		haasClientSupplier.get().uploadFileData(jobId, inputStream, fileName, length, lastModification);
 	}
-	
 
 	public JobState getState() {
 		return state;
@@ -223,6 +226,4 @@ public class Job {
 
 	}
 
-	
-
 }
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 ba976fa2216c5a263969d20939e4bfdc67b56db1..952d1b0fa6438ca7048d4265337ab0f5119d834b 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
@@ -1,7 +1,7 @@
 package cz.it4i.fiji.haas;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -145,10 +145,10 @@ public class JobManager {
 			job.downloadFileData(fileName, bos);
 		}
 
-		public void uploadFile(ByteArrayInputStream byteArrayInputStream, String configModified, int length,
-				long epochSecond) {
+		public void uploadFile(InputStream inputStream, String name, int length,
+				long lastModification) {
 			
-			//TODO
+			job.uploadFileData(inputStream, name, length, lastModification);
 		}
 
 		private String getStringFromTimeSafely(Calendar time) {
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 8a171f8f1b571397077f527438b4b7cc021e637c..5551cff0507f53ff4c0e31c516f40bf2f3391b86 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
@@ -1,6 +1,7 @@
 package cz.it4i.fiji.haas_java_client;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.nio.file.Files;
@@ -284,6 +285,20 @@ public class HaaSClient {
 			FileTransferMethodExt ft = getFileTransfer().getFileTransferMethod(jobId, getSessionID());
 			try (ScpClient scpClient = getScpClient(ft)) {
 				scpClient.download(fileName, os, new TransferFileProgressForHaaSClient(0, dummyNotifier));
+				getFileTransfer().endFileTransfer(jobId, ft, getSessionID());
+			}
+		} catch (IOException | JSchException | ServiceException e) {
+			throw new HaaSClientException(e);
+		}
+	}
+	
+	public void uploadFileData(Long jobId, InputStream inputStream, String fileName, long length,
+			long lastModification) {
+		try {
+			FileTransferMethodExt ft = getFileTransfer().getFileTransferMethod(jobId, getSessionID());
+			try (ScpClient scpClient = getScpClient(ft)) {
+				scpClient.upload(inputStream,fileName,length,lastModification, new TransferFileProgressForHaaSClient(0, dummyNotifier));
+				getFileTransfer().endFileTransfer(jobId, ft, getSessionID());
 			}
 		} catch (IOException | JSchException | ServiceException e) {
 			throw new HaaSClientException(e);
@@ -448,4 +463,6 @@ public class HaaSClient {
 		}
 	}
 
+	
+
 }
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 fecafb4e2d63daf2e22a464959a125729073cbb2..ec30c8cd68f5258ec70ed10ed42a655a9306dcd9 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
@@ -66,7 +66,7 @@ public class ScpClient implements Closeable {
 	}
 
 	public boolean download(String lfile, Path rfile, TransferFileProgress progress) throws JSchException, IOException {
-		try(OutputStream os = Files.newOutputStream(rfile)) {
+		try (OutputStream os = Files.newOutputStream(rfile)) {
 			return download(lfile, os, progress);
 		}
 	}
@@ -174,17 +174,16 @@ public class ScpClient implements Closeable {
 
 	public boolean upload(Path file, String rfile, TransferFileProgress progress) throws JSchException, IOException {
 		try (InputStream is = Files.newInputStream(file)) {
-			return upload(is, file.getFileName().toString(), file.toFile().length(), file.toFile().lastModified(),
-					rfile, progress);
+			return upload(is, rfile, file.toFile().length(), file.toFile().lastModified(), progress);
 		}
 	}
 
-	public boolean upload(InputStream is, String fileName, long length, long lastModified, String rfile,
+	public boolean upload(InputStream is, String fileName, long length, long lastModified,
 			TransferFileProgress progress) throws JSchException, IOException {
 		Session session = connectionSession();
 		boolean ptimestamp = true;
 		// exec 'scp -t rfile' remotely
-		String command = "scp " + (ptimestamp ? "-p" : "") + " -t " + rfile;
+		String command = "scp " + (ptimestamp ? "-p" : "") + " -t " + fileName;
 		Channel channel = session.openChannel("exec");
 		((ChannelExec) channel).setCommand(command);
 		// get I/O streams for remote scp