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 658b31d6bb58c00d83e0f479e38e96e376250044..f55d820e4853d852b5b929f89459c49266126b62 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
@@ -258,6 +258,12 @@ public class Job {
 		}
 	}
 
+	public List<String> getFileContents(List<String> logs) {
+		try (HaaSFileTransfer transfer = haasClientSupplier.get().startFileTransfer(getId(), new DummyProgressNotifier())) {
+			return transfer.getContent(logs);
+		}
+	}
+
 	
 
 	
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java
index e3b427f2a1cdbdfbaef67fbfa10b3a5d9bc789a8..c6c8a4b9b31142c0b5041b1ccf1882bae1a82b4d 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java
@@ -18,4 +18,5 @@ public interface HaaSFileTransfer extends Closeable {
 
 	List<Long> obtainSize(List<String> files);
 
+	List<String> getContent(List<String> logs);
 }
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java
index 6d59b42f6240640ab78a8f692f43d17e00e39bad..bf07f5bda386340a0279b94f9e7e4b0fa8d52abb 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java
@@ -1,9 +1,11 @@
 package cz.it4i.fiji.haas_java_client;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Path;
 import java.rmi.RemoteException;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
@@ -21,6 +23,7 @@ import cz.it4i.fiji.scpclient.ScpClient;
 
 class HaaSFileTransferImp implements HaaSFileTransfer {
 
+	@SuppressWarnings("unused")
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas_java_client.HaaSFileTransferImp.class);
 
 	private FileTransferMethodExt ft;
@@ -115,4 +118,37 @@ class HaaSFileTransferImp implements HaaSFileTransfer {
 
 	}
 
+	//TASK merge with download - stream provider for file, consumer for stream
+	@Override
+	public List<String> getContent(List<String> files) {
+		List<String> result = new LinkedList<>();
+		List<Long> fileSizes;
+		try {
+			fileSizes = HaaSClient.getSizes(StreamSupport.stream(files.spliterator(), false)
+					.map(filename -> "'" + ft.getSharedBasepath() + "/" + filename + "'").collect(Collectors.toList()),
+					scpClient, new P_ProgressNotifierDecorator4Size(notifier));
+
+			final long totalFileSize = fileSizes.stream().mapToLong(i -> i.longValue()).sum();
+			TransferFileProgressForHaaSClient progress = new TransferFileProgressForHaaSClient(totalFileSize, notifier);
+			int idx = 0;
+			for (String fileName : files) {
+				fileName = fileName.replaceFirst("/", "");
+				try(ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+					String fileToDownload = "'" + ft.getSharedBasepath() + "/" + fileName + "'";
+					String item;
+					progress.addItem(item = fileName);
+					progress.startNewFile(fileSizes.get(idx));
+					scpClient.download(fileToDownload, os, progress);
+					os.flush();
+					progress.itemDone(item);
+					idx++;
+					result.add(os.toString());
+				}
+			}
+		} catch (JSchException | IOException e) {
+			throw new HaaSClientException(e);
+		}
+		return result;
+	}
+
 }
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 fba4aba1cc71338aa91b4839f474f1fe678a249c..432729852937ac4330c0283b3f9b74286b52da36 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
@@ -374,6 +374,11 @@ public class BenchmarkJobManager {
 				@Override
 				public List<Long> getFileSizes(List<String> names) {
 					return job.getFileSizes(names);
+				}
+
+				@Override
+				public List<String> getFileContents(List<String> logs) {
+					return job.getFileContents(logs);
 				};
 			};
 
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java
index 086f97440db414c27f0637c698c56939e77cacea..3b1a6a9bbd69528d4eabc6c1c9ec41dec980e383 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java
@@ -15,4 +15,6 @@ public interface SPIMComputationAccessor extends HaaSOutputHolder {
 	Collection<String> getChangedFiles();
 
 	List<Long> getFileSizes(List<String> names);
+	
+	List<String> getFileContents(List<String> logs);
 }
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java
index 11e132499ce68a9ee53b562413575b232c642de5..3f9b2ce48d1a6a3a2832d13241891cdf8613d3af 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java
@@ -55,6 +55,11 @@ public class SPIMComputationAccessorDecoratorWithTimeout implements SPIMComputat
 	public List<Long> getFileSizes(List<String> names) {
 		return decorated.getFileSizes(names);
 	}
+	
+	@Override
+	public List<String> getFileContents(List<String> logs) {
+		return decorated.getFileContents(logs);
+	}
 
 	private void initAllowedTypes(Set<SynchronizableFileType> allowedTypes) {
 		for (SynchronizableFileType type : allowedTypes) {
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java
index 39802fe262facf4522329945e3ec2b64c49a63ea..f34934f4f6b9de56e192c09ba1a359c892c11a81 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java
@@ -14,7 +14,6 @@ import com.google.common.collect.Streams;
 
 import cz.it4i.fiji.haas_java_client.JobState;
 import cz.it4i.fiji.haas_java_client.SynchronizableFileType;
-import io.scif.jj2000.j2k.NotImplementedError;
 
 public class TaskComputation {
 
@@ -34,6 +33,28 @@ public class TaskComputation {
 		public String getContent() {
 			return content;
 		}
+
+		@Override
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			Log other = (Log) obj;
+			if (content == null) {
+				if (other.content != null)
+					return false;
+			} else if (!content.equals(other.content))
+				return false;
+			if (name == null) {
+				if (other.name != null)
+					return false;
+			} else if (!name.equals(other.name))
+				return false;
+			return true;
+		}
 	}
 
 	public static class File {
@@ -62,7 +83,6 @@ public class TaskComputation {
 	private int positionInOutput;
 
 	private Collection<String> inputs;
-	@SuppressWarnings("unused")
 	private Collection<String> outputs;
 	private Collection<String> logs;
 	private Long id;
@@ -116,7 +136,10 @@ public class TaskComputation {
 	}
 
 	public Collection<Log> getLogs() {
-		throw new NotImplementedError();
+		List<String> logNames = new LinkedList<>(logs);
+		List<String> contents = computationAccessor.getFileContents(logNames);
+		return Streams.<String, String, Log>zip(logNames.stream(), contents.stream(),
+				(name, content) -> new Log(name, content)).collect(Collectors.toList());
 	}
 
 	/**
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 a50ce0cdfe7227e5d03cb3ffd70e3d62685eac1b..57813409aefdf5daa4a805de5ed0fb4f622cdb61 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
@@ -123,7 +123,7 @@ public class SPIMPipelineProgressViewController extends BorderPane implements Cl
 		Window w = new Window();
 		w.addWindowListener(new WindowAdapter() {
 			@Override
-			public void windowClosed(WindowEvent e) {
+			public void windowClosing(WindowEvent e) {
 				adapter.close();
 			}
 		});
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 10ae4fdeae86bf6087dd66f7d4fb5f6d3f7eadf1..40750677982308c630b1d48ec805b2e96bd61f42 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
@@ -6,23 +6,31 @@ import java.util.List;
 import java.util.Map;
 import java.util.Timer;
 import java.util.TimerTask;
+import java.util.stream.Collectors;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import cz.it4i.fiji.haas_spim_benchmark.core.Constants;
 import cz.it4i.fiji.haas_spim_benchmark.core.TaskComputation;
+import cz.it4i.fiji.haas_spim_benchmark.core.TaskComputation.Log;
 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
+//TASK: Pokračovat zapojením do UI - upravit pro TaskComputation
+//TASK: dodělat progress dialog + modalita
+//            
 public class TaskComputationAdapter implements Closeable {
 
+	@SuppressWarnings("unused")
+	private static Logger log = LoggerFactory
+			.getLogger(cz.it4i.fiji.haas_spim_benchmark.ui.TaskComputationAdapter.class);
+
 	private final TaskComputation computation;
 
 	private final List<ObservableValue<RemoteFileInfo>> outputs = new LinkedList<>();
 
-	@SuppressWarnings("unused")
-	private final List<ObservableValue<String>> logs = new LinkedList<>();
+	private final List<ObservableLog> logs = new LinkedList<>();
 
 	private final Timer timer;
 
@@ -31,6 +39,7 @@ public class TaskComputationAdapter implements Closeable {
 		timer = new Timer();
 		Map<String, Long> sizes = computation.getOutFileSizes();
 		computation.getOutputs().forEach(outputFile -> addOutputFile(outputFile, sizes.get(outputFile)));
+		computation.getLogs().forEach(log->logs.add(new ObservableLog(log)));
 		timer.scheduleAtFixedRate(new P_TimerTask(), Constants.HAAS_TIMEOUT, Constants.HAAS_TIMEOUT);
 	}
 
@@ -42,22 +51,16 @@ public class TaskComputationAdapter implements Closeable {
 	public List<ObservableValue<RemoteFileInfo>> getOutputs() {
 		return outputs;
 	}
+	
+	public List<ObservableLog> getLogs() {
+		return logs;
+	}
 
 	private void addOutputFile(String outputFile, Long size) {
 		outputs.add(new ObservableOutputFile(outputFile, size));
 	}
 
-	public static class Log {
-		public String getName() {
-			return null;
-		}
-
-		public ObservableValue<String> getContent() {
-			return null;
-		}
-	}
-
-	public class ObservableOutputFile extends ObservableValueBase<RemoteFileInfo> {
+	private class ObservableOutputFile extends ObservableValueBase<RemoteFileInfo> {
 
 		private final String name;
 
@@ -95,11 +98,65 @@ public class TaskComputationAdapter implements Closeable {
 		}
 	}
 
+	public static class ObservableLog  {
+
+		private final String name;
+		
+		private  final P_ObservableString value;
+
+		public ObservableLog(Log content) {
+			this.value = new P_ObservableString(content.getContent());
+			this.name = log.getName();
+		}
+
+		public String getName() {
+			return name;
+		}
+		
+		public ObservableValue<String> getContent() {
+			return value;
+		}
+
+		public void setContentValue(Log log) {
+			if (!log.getName().equals(log.getName())) {
+				throw new IllegalArgumentException(
+						"this.name=" + getName() + ", log.name=" + log.getName());
+			}
+			value.setValue(log.getContent());
+		}
+
+		private class P_ObservableString extends ObservableValueBase<String> {
+
+			private String value;
+
+			public P_ObservableString(String value) {
+				this.value = value;
+			}
+
+			@Override
+			public String getValue() {
+				return value;
+			}
+			
+			public void setValue(String value) {
+				if(this.value != null && !this.value.equals(value) ||
+					value != null && !value.equals(this.value)) {
+					this.value = value;
+					fireValueChangedEvent();
+				}
+			}
+		}
+		
+	}
+
 	private class P_TimerTask extends TimerTask {
 
 		@Override
 		public void run() {
 			Map<String, Long> sizes = computation.getOutFileSizes();
+			Map<String, Log> logs = computation.getLogs().stream()
+					.collect(Collectors.<Log, String, Log>toMap((Log log) -> log.getName(), (Log log) -> log));
+			TaskComputationAdapter.this.logs.forEach(log->((ObservableLog) log).setContentValue(logs.get(log.getName())));
 			outputs.forEach(value -> ((ObservableOutputFile) value).setSize(sizes.get(value.getValue().getName())));
 		}