diff --git a/java/src/com/tightvnc/decoder/CoRREDecoder.java b/java/src/com/tightvnc/decoder/CoRREDecoder.java
index 3ab437a..3947d15 100644
--- a/java/src/com/tightvnc/decoder/CoRREDecoder.java
+++ b/java/src/com/tightvnc/decoder/CoRREDecoder.java
@@ -11,6 +11,8 @@
 
 public class CoRREDecoder extends RawDecoder {
 
+  final static int EncodingCoRRE = 4;
+
   public CoRREDecoder(Graphics g, RfbInputStream is) {
     super(g, is);
   }
diff --git a/java/src/com/tightvnc/decoder/HextileDecoder.java b/java/src/com/tightvnc/decoder/HextileDecoder.java
index 1e4ef09..9c05309 100644
--- a/java/src/com/tightvnc/decoder/HextileDecoder.java
+++ b/java/src/com/tightvnc/decoder/HextileDecoder.java
@@ -12,6 +12,8 @@
 
 public class HextileDecoder extends RawDecoder {
 
+  final static int EncodingHextile = 5;
+
   // Contstants used in the Hextile decoder
   final static int
     HextileRaw                 = 1,
diff --git a/java/src/com/tightvnc/decoder/RREDecoder.java b/java/src/com/tightvnc/decoder/RREDecoder.java
index 72a5fdf..e2b5feb 100644
--- a/java/src/com/tightvnc/decoder/RREDecoder.java
+++ b/java/src/com/tightvnc/decoder/RREDecoder.java
@@ -13,6 +13,8 @@
 
 public class RREDecoder extends RawDecoder {
 
+  final static int EncodingRRE = 2;
+
   public RREDecoder(Graphics g, RfbInputStream is) {
     super(g, is);
   }
diff --git a/java/src/com/tightvnc/decoder/RawDecoder.java b/java/src/com/tightvnc/decoder/RawDecoder.java
index 79cf889..9025e9e 100644
--- a/java/src/com/tightvnc/decoder/RawDecoder.java
+++ b/java/src/com/tightvnc/decoder/RawDecoder.java
@@ -18,6 +18,7 @@
 //
 
 public class RawDecoder {
+  final static int EncodingRaw = 0;
 
   public RawDecoder(Graphics g, RfbInputStream is) {
     setGraphics(g);
diff --git a/java/src/com/tightvnc/decoder/TightDecoder.java b/java/src/com/tightvnc/decoder/TightDecoder.java
index e903820..c4ce226 100644
--- a/java/src/com/tightvnc/decoder/TightDecoder.java
+++ b/java/src/com/tightvnc/decoder/TightDecoder.java
@@ -16,6 +16,8 @@
 
 public class TightDecoder extends RawDecoder implements ImageObserver {
 
+  final static int EncodingTight = 7;
+
   //
   // Tight decoder constants
   //
diff --git a/java/src/com/tightvnc/decoder/ZRLEDecoder.java b/java/src/com/tightvnc/decoder/ZRLEDecoder.java
index ba4071c..91f7c16 100644
--- a/java/src/com/tightvnc/decoder/ZRLEDecoder.java
+++ b/java/src/com/tightvnc/decoder/ZRLEDecoder.java
@@ -16,6 +16,8 @@
 
 public class ZRLEDecoder extends RawDecoder {
 
+  final static int EncodingZRLE = 16;
+
   public ZRLEDecoder(Graphics g, RfbInputStream is) {
     super(g, is);
   }
diff --git a/java/src/com/tightvnc/decoder/ZlibDecoder.java b/java/src/com/tightvnc/decoder/ZlibDecoder.java
index 8a471a2..9a167b1 100644
--- a/java/src/com/tightvnc/decoder/ZlibDecoder.java
+++ b/java/src/com/tightvnc/decoder/ZlibDecoder.java
@@ -12,6 +12,8 @@
 
 public class ZlibDecoder extends RawDecoder {
 
+  final static int EncodingZlib = 6;
+
   public ZlibDecoder(Graphics g, RfbInputStream is) {
     super(g, is);
   }
@@ -37,13 +39,15 @@
     rfbis.readFully(zlibBuf, 0, nBytes);
 
     //
-    // Save decoded data to RecordInterface
+    // FIXME: Now we think that isRecordFromBeggining 
+    // always returns false and this part of code will be never
+    // executed.
     //
 
-    if (rec.canWrite() && rec.isRecordFromBeginning()) {
-      rec.writeIntBE(nBytes);
-      rec.write(zlibBuf, 0, nBytes);
-    }
+    //if (rec.canWrite() && rec.isRecordFromBeginning()) {
+    // rec.writeIntBE(nBytes);
+    // rec.write(zlibBuf, 0, nBytes);
+    //}
 
     if (zlibInflater == null) {
       zlibInflater = new Inflater();
@@ -56,11 +60,12 @@
           zlibInflater.inflate(pixels8, dy * framebufferWidth + x, w);
 
           //
-          // Save decoded data to RecordInterface
+          // Save decoded data to data output stream
           //
 
-          if (rec.canWrite() && !rec.isRecordFromBeginning())
-            rec.write(pixels8, dy * framebufferWidth + x, w);
+          //if (rec.canWrite() && !rec.isRecordFromBeginning())
+          //if (dos != null)
+          //  dos.write(pixels8, dy * framebufferWidth + x, w);
         }
       } else {
         byte[] buf = new byte[w * 4];
@@ -76,11 +81,12 @@
           }
 
           //
-          // Save decoded data to RecordInterface
+          // Save decoded data to data output stream
           //
 
-          if (rec.canWrite() && !rec.isRecordFromBeginning())
-            rec.write(buf);
+          //if (rec.canWrite() && !rec.isRecordFromBeginning())
+          //if (dos != null)
+          //  dos.write(buf);
         }
       }
     } catch (DataFormatException ex) {
