diff --git a/common/rfb/HextileDecoder.cxx b/common/rfb/HextileDecoder.cxx
index 705ccf5..d1412d4 100644
--- a/common/rfb/HextileDecoder.cxx
+++ b/common/rfb/HextileDecoder.cxx
@@ -15,7 +15,11 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  * USA.
  */
+
 #include <rdr/InStream.h>
+#include <rdr/MemInStream.h>
+#include <rdr/OutStream.h>
+
 #include <rfb/ConnParams.h>
 #include <rfb/PixelBuffer.h>
 #include <rfb/HextileDecoder.h>
@@ -41,13 +45,60 @@
 }
 
 void HextileDecoder::readRect(const Rect& r, rdr::InStream* is,
-                              const ConnParams& cp, ModifiablePixelBuffer* pb)
+                              const ConnParams& cp, rdr::OutStream* os)
 {
+  Rect t;
+  size_t bytesPerPixel;
+
+  bytesPerPixel = cp.pf().bpp/8;
+
+  for (t.tl.y = r.tl.y; t.tl.y < r.br.y; t.tl.y += 16) {
+
+    t.br.y = __rfbmin(r.br.y, t.tl.y + 16);
+
+    for (t.tl.x = r.tl.x; t.tl.x < r.br.x; t.tl.x += 16) {
+      rdr::U8 tileType;
+
+      t.br.x = __rfbmin(r.br.x, t.tl.x + 16);
+
+      tileType = is->readU8();
+      os->writeU8(tileType);
+
+      if (tileType & hextileRaw) {
+        os->copyBytes(is, t.area() * bytesPerPixel);
+        continue;
+      }
+
+      if (tileType & hextileBgSpecified)
+        os->copyBytes(is, bytesPerPixel);
+
+      if (tileType & hextileFgSpecified)
+        os->copyBytes(is, bytesPerPixel);
+
+      if (tileType & hextileAnySubrects) {
+        rdr::U8 nSubrects;
+
+        nSubrects = is->readU8();
+        os->writeU8(nSubrects);
+
+        if (tileType & hextileSubrectsColoured)
+          os->copyBytes(is, nSubrects * (bytesPerPixel + 2));
+        else
+          os->copyBytes(is, nSubrects * 2);
+      }
+    }
+  }
+}
+
+void HextileDecoder::decodeRect(const Rect& r, const void* buffer,
+                                size_t buflen, const ConnParams& cp,
+                                ModifiablePixelBuffer* pb)
+{
+  rdr::MemInStream is(buffer, buflen);
   const PixelFormat& pf = cp.pf();
-  rdr::U8 buf[16 * 16 * 4 * pf.bpp/8];
   switch (pf.bpp) {
-  case 8:  hextileDecode8 (r, is, (rdr::U8*) buf, pf, pb); break;
-  case 16: hextileDecode16(r, is, (rdr::U16*)buf, pf, pb); break;
-  case 32: hextileDecode32(r, is, (rdr::U32*)buf, pf, pb); break;
+  case 8:  hextileDecode8 (r, &is, pf, pb); break;
+  case 16: hextileDecode16(r, &is, pf, pb); break;
+  case 32: hextileDecode32(r, &is, pf, pb); break;
   }
 }
