diff --git a/java/src/com/tightvnc/decoder/RREDecoder.java b/java/src/com/tightvnc/decoder/RREDecoder.java
index 82ddb2e..ce70606 100644
--- a/java/src/com/tightvnc/decoder/RREDecoder.java
+++ b/java/src/com/tightvnc/decoder/RREDecoder.java
@@ -1,5 +1,74 @@
 package com.tightvnc.decoder;
 
-public class RREDecoder {
+import com.tightvnc.vncviewer.RfbInputStream;
+import java.awt.Graphics;
+import java.awt.Color;
+import java.io.ByteArrayInputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
 
+//
+// Class that used for decoding RRE encoded data.
+//
+
+public class RREDecoder extends RawDecoder {
+
+  public RREDecoder(Graphics g, RfbInputStream is) {
+    super(g, is);
+  }
+
+  public RREDecoder(Graphics g, RfbInputStream is, int frameBufferW,
+                    int frameBufferH) {
+    super(g, is, frameBufferW, frameBufferH);
+  }
+
+  //
+  // Override handleRect method to decode RRE encoded data insted of
+  // raw pixel data.
+  //
+
+  public void handleRect(int x, int y, int w, int h) throws IOException {
+    int nSubrects = rfbis.readU32();
+    byte[] bg_buf = new byte[bytesPerPixel];
+    rfbis.readFully(bg_buf);
+    Color pixel;
+    if (bytesPerPixel == 1) {
+      pixel = getColor256()[bg_buf[0] & 0xFF];
+    } else {
+      pixel = new Color(bg_buf[2] & 0xFF, bg_buf[1] & 0xFF, bg_buf[0] & 0xFF);
+    }
+    graphics.setColor(pixel);
+    graphics.fillRect(x, y, w, h);
+    byte[] buf = new byte[nSubrects * (bytesPerPixel + 8)];
+    rfbis.readFully(buf);
+    DataInputStream ds = new DataInputStream(new ByteArrayInputStream(buf));
+
+    //
+    // Save decoded data to RecordInterface
+    //
+    if (rec.canWrite()) {
+      rec.writeIntBE(nSubrects);
+      rec.write(bg_buf);
+      rec.write(buf);
+    }
+
+    int sx, sy, sw, sh;
+    for (int j = 0; j < nSubrects; j++) {
+      if (bytesPerPixel == 1) {
+        pixel = getColor256()[ds.readUnsignedByte()];
+      } else {
+        ds.skip(4);
+        pixel = new Color(buf[j*12+2] & 0xFF,
+                          buf[j*12+1] & 0xFF,
+                          buf[j*12]   & 0xFF);
+      }
+      sx = x + ds.readUnsignedShort();
+      sy = y + ds.readUnsignedShort();
+      sw = ds.readUnsignedShort();
+      sh = ds.readUnsignedShort();
+
+      graphics.setColor(pixel);
+      graphics.fillRect(sx, sy, sw, sh);
+    }
+  }
 }
diff --git a/java/src/com/tightvnc/decoder/RawDecoder.java b/java/src/com/tightvnc/decoder/RawDecoder.java
index ad0cfac..f244210 100644
--- a/java/src/com/tightvnc/decoder/RawDecoder.java
+++ b/java/src/com/tightvnc/decoder/RawDecoder.java
@@ -15,6 +15,7 @@
 // This is base decoder class.
 // Other classes will be childs of RawDecoder.
 //
+
 public class RawDecoder {
 
   public RawDecoder(Graphics g, RfbInputStream is) {
