diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java
index c0a23c1e5e3c3f1407839a7b92620f67f01866c8..f7a72643c2a75c79178e11d084d95ec01fcb0b09 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java
@@ -193,6 +193,7 @@ class MidlewareTunnel implements Closeable {
 			if(reallySend == 0) {
 				zeroCounter++;
 				if(zeroCounter >= ZERO_COUNT_THRESHOLD) {
+					log.info("zero bytes sent from middleware for " + zeroCounter + " time");
 					return false;
 				}
 				try {
@@ -201,6 +202,8 @@ class MidlewareTunnel implements Closeable {
 					Thread.currentThread().interrupt();
 					return false;
 				}
+			} else {
+				zeroCounter = 0;
 			}
 		} while(toSend != 0 && !connection.isServerClosed());
 		return true;
@@ -211,6 +214,7 @@ class MidlewareTunnel implements Closeable {
 		try {
 			OutputStream os = connection.getSocket().getOutputStream();
 			byte[] received = null;
+			int zeroCounter = 0;
 			while (!connection.isClientClosed()
 					&& null != (received = dataTransfer.readDataFromJobNode(jobId, ipAddress, sessionCode))) {
 				if (connection.isClientClosed()) {
@@ -219,6 +223,19 @@ class MidlewareTunnel implements Closeable {
 				if (received.length > 0) {
 					os.write(received);
 					os.flush();
+					zeroCounter = 0;
+				} else {
+					zeroCounter++;
+					if(zeroCounter >= ZERO_COUNT_THRESHOLD) {
+						log.info("zero bytes received from middleware for " + zeroCounter + " time");
+						break;
+					}
+					try {
+						Thread.sleep(ZERO_COUNT_PAUSE);
+					} catch (InterruptedException e) {
+						Thread.currentThread().interrupt();
+						break;
+					}
 				}
 			}
 			os.flush();