diff --git a/lib/TweetLib.Browser.CEF/Logic/ByteArrayResourceHandlerLogic.cs b/lib/TweetLib.Browser.CEF/Logic/ByteArrayResourceHandlerLogic.cs
index 80331a87..5c6364cd 100644
--- a/lib/TweetLib.Browser.CEF/Logic/ByteArrayResourceHandlerLogic.cs
+++ b/lib/TweetLib.Browser.CEF/Logic/ByteArrayResourceHandlerLogic.cs
@@ -10,8 +10,6 @@ public abstract class ByteArrayResourceHandlerLogic {
 
 	[SuppressMessage("ReSharper", "MemberCanBePrivate.Global")]
 	public sealed class ByteArrayResourceHandlerLogic<TResponse> : ByteArrayResourceHandlerLogic {
-		public int RemainingBytes => resource.Length - position;
-
 		private readonly ByteArrayResource resource;
 		private readonly IResponseAdapter<TResponse> responseAdapter;
 
@@ -46,20 +44,21 @@ public bool Skip(long bytesToSkip, out long bytesSkipped, IDisposable callback)
 			return true;
 		}
 
-		public bool Read<T>(WriteToOut<T> write, T dataOut, int bytesToRead, out int bytesRead, IDisposable callback) {
+		public bool Read<T>(WriteToOut<T> write, T dataOut, long maxBytesToRead, out int bytesRead, IDisposable callback) {
 			callback.Dispose();
 
-			if (bytesToRead > 0) {
+			if (maxBytesToRead == 0) {
+				bytesRead = 0;
+			}
+			else {
+				int bytesToRead = (int) Math.Min(maxBytesToRead, resource.Length - position);
+
 				write(dataOut, resource.Contents, position, bytesToRead);
 				position += bytesToRead;
+				bytesRead = bytesToRead;
 			}
 
-			bytesRead = bytesToRead;
 			return bytesRead > 0;
 		}
-
-		public bool Read<T>(WriteToOut<T> write, T dataOut, out int bytesRead, IDisposable callback) {
-			return Read(write, dataOut, RemainingBytes, out bytesRead, callback);
-		}
 	}
 }
diff --git a/linux/TweetImpl.CefGlue/Handlers/Resource/ByteArrayResourceHandler.cs b/linux/TweetImpl.CefGlue/Handlers/Resource/ByteArrayResourceHandler.cs
index 98ac094c..52acc15a 100644
--- a/linux/TweetImpl.CefGlue/Handlers/Resource/ByteArrayResourceHandler.cs
+++ b/linux/TweetImpl.CefGlue/Handlers/Resource/ByteArrayResourceHandler.cs
@@ -38,7 +38,7 @@ protected override bool Skip(long bytesToSkip, out long bytesSkipped, CefResourc
 		}
 
 		protected override bool Read(IntPtr dataOut, int bytesToRead, out int bytesRead, CefResourceReadCallback callback) {
-			return logic!.Read(WriteToOut, dataOut, Math.Min(bytesToRead, logic.RemainingBytes), out bytesRead, callback);
+			return logic!.Read(WriteToOut, dataOut, bytesToRead, out bytesRead, callback);
 		}
 
 		protected override void Cancel() {}
diff --git a/windows/TweetImpl.CefSharp/Handlers/CefByteArrayResourceHandler.cs b/windows/TweetImpl.CefSharp/Handlers/CefByteArrayResourceHandler.cs
index 8a429f9b..4e84ac86 100644
--- a/windows/TweetImpl.CefSharp/Handlers/CefByteArrayResourceHandler.cs
+++ b/windows/TweetImpl.CefSharp/Handlers/CefByteArrayResourceHandler.cs
@@ -39,7 +39,7 @@ bool IResourceHandler.Skip(long bytesToSkip, out long bytesSkipped, IResourceSki
 		}
 
 		bool IResourceHandler.Read(Stream dataOut, out int bytesRead, IResourceReadCallback callback) {
-			return logic.Read(WriteToOut, dataOut, out bytesRead, callback);
+			return logic.Read(WriteToOut, dataOut, dataOut.Length, out bytesRead, callback);
 		}
 
 		bool IResourceHandler.ProcessRequest(IRequest request, ICallback callback) {