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 f033586f17b654ff43dcd49e5f7d075ea166325f..c0a23c1e5e3c3f1407839a7b92620f67f01866c8 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
@@ -34,6 +34,10 @@ class MidlewareTunnel implements Closeable {
 
 	private static final int DEFAULT_BACKLOG = 50;
 
+	private static final int ZERO_COUNT_THRESHOLD = 10;
+
+	private static final long ZERO_COUNT_PAUSE = 500;
+
 	private final long jobId;
 
 	private ServerSocket ss;
@@ -150,7 +154,7 @@ class MidlewareTunnel implements Closeable {
 					continue;
 				}
 				if (!sendToMiddleware(buffer, len, connection)) {
-					return;
+					break;
 				}
 			}
 			connection.clientClosed();
@@ -172,6 +176,7 @@ class MidlewareTunnel implements Closeable {
 		byte[] sending;
 		int toSend = len;
 		int offset = 0;
+		int zeroCounter = 0;
 		do {
 			if (toSend != buffer.length || offset != 0) {
 				sending = new byte[toSend];
@@ -184,7 +189,19 @@ class MidlewareTunnel implements Closeable {
 				return false;
 			}
 			toSend -= reallySend;
-			offset += reallySend; 
+			offset += reallySend;
+			if(reallySend == 0) {
+				zeroCounter++;
+				if(zeroCounter >= ZERO_COUNT_THRESHOLD) {
+					return false;
+				}
+				try {
+					Thread.sleep(ZERO_COUNT_PAUSE);
+				} catch (InterruptedException e) {
+					Thread.currentThread().interrupt();
+					return false;
+				}
+			}
 		} while(toSend != 0 && !connection.isServerClosed());
 		return true;
 	}