diff --git a/common/unarj.cpp b/common/unarj.cpp
index 428b4a4..620e7cd 100644
--- a/common/unarj.cpp
+++ b/common/unarj.cpp
@@ -105,7 +105,7 @@ public:
 	void decode(int32 origsize);
 	void decode_f(int32 origsize);
 
-	MemoryReadStream *_compressed;
+	BufferedReadStream *_compressed;
 	MemoryWriteStream *_outstream;
 
 //protected:
@@ -372,10 +372,7 @@ bool ArjFile::open(const Common::String &filename) {
 	} else {
 		ArjDecoder *decoder = new ArjDecoder(hdr);
 
-		byte *compressedData = (byte *)malloc(hdr->compSize);
-		archiveFile.read(compressedData, hdr->compSize);
-
-		decoder->_compressed = new MemoryReadStream(compressedData, hdr->compSize, true);
+		decoder->_compressed = new BufferedReadStream(&archiveFile, 4096, false);
 		decoder->_outstream = new MemoryWriteStream(uncompressedData, hdr->origSize);
 
 		if (hdr->method == 1 || hdr->method == 2 || hdr->method == 3)
