diff --git a/src/net/sf/briar/plugins/modem/Receiver.java b/src/net/sf/briar/plugins/modem/Receiver.java
index e11c8e5d436eb5a28a1a21654ab513c659b85bde..09f373b0e2af62644a508d9d5e268d79ac6e8155 100644
--- a/src/net/sf/briar/plugins/modem/Receiver.java
+++ b/src/net/sf/briar/plugins/modem/Receiver.java
@@ -11,11 +11,11 @@ import java.util.logging.Logger;
 
 class Receiver implements ReadHandler {
 
+	static final int MAX_WINDOW_SIZE = 8 * Data.MAX_PAYLOAD_LENGTH;
+
 	private static final Logger LOG =
 			Logger.getLogger(Receiver.class.getName());
 
-	private static final int MAX_WINDOW_SIZE = 8 * Data.MAX_PAYLOAD_LENGTH;
-
 	private final Sender sender;
 	private final SortedSet<Data> dataFrames; // Locking: this
 
diff --git a/src/net/sf/briar/plugins/modem/Sender.java b/src/net/sf/briar/plugins/modem/Sender.java
index 5b5779bc6010ac05080294128f432c2e2e7de33d..9c8ef82af4d442ce5be46e03fccc5ce7ef200bf1 100644
--- a/src/net/sf/briar/plugins/modem/Sender.java
+++ b/src/net/sf/briar/plugins/modem/Sender.java
@@ -106,7 +106,8 @@ class Sender {
 			// Update the window
 			lastWindowUpdateOrProbe = now;
 			int oldWindowSize = windowSize;
-			windowSize = a.getWindowSize();
+			// Don't accept an unreasonably large window size
+			windowSize = Math.min(a.getWindowSize(), Receiver.MAX_WINDOW_SIZE);
 			if(LOG.isLoggable(FINE)) LOG.fine("Window at sender " + windowSize);
 			// If space has become available, notify any waiting writers
 			if(windowSize > oldWindowSize || foundIndex != -1) notifyAll();