 .../lz4/BlockLZ4CompressorOutputStream.java        | 11 ++++---
 .../compressors/lz77support/LZ77Compressor.java    | 35 +++++++++++++++-------
 .../snappy/SnappyCompressorOutputStream.java       | 10 +++++--
 .../lz77support/LZ77CompressorTest.java            |  2 +-
 4 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/src/main/java/org/apache/commons/compress/compressors/lz4/BlockLZ4CompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/lz4/BlockLZ4CompressorOutputStream.java
index 9326023..2cce3a1 100644
--- a/src/main/java/org/apache/commons/compress/compressors/lz4/BlockLZ4CompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/lz4/BlockLZ4CompressorOutputStream.java
@@ -116,13 +116,16 @@ public BlockLZ4CompressorOutputStream(final OutputStream os, Parameters params)
             new LZ77Compressor.Callback() {
                 @Override
                 public void accept(LZ77Compressor.Block block) throws IOException {
-                    //System.err.println(block);
-                    if (block instanceof LZ77Compressor.LiteralBlock) {
+                    switch (block.getType()) {
+                    case LITERAL:
                         addLiteralBlock((LZ77Compressor.LiteralBlock) block);
-                    } else if (block instanceof LZ77Compressor.BackReference) {
+                        break;
+                    case BACK_REFERENCE:
                         addBackReference((LZ77Compressor.BackReference) block);
-                    } else if (block instanceof LZ77Compressor.EOD) {
+                        break;
+                    case EOD:
                         writeFinalLiteralBlock();
+                        break;
                     }
                 }
             });
diff --git a/src/main/java/org/apache/commons/compress/compressors/lz77support/LZ77Compressor.java b/src/main/java/org/apache/commons/compress/compressors/lz77support/LZ77Compressor.java
index 5379259..082336a 100644
--- a/src/main/java/org/apache/commons/compress/compressors/lz77support/LZ77Compressor.java
+++ b/src/main/java/org/apache/commons/compress/compressors/lz77support/LZ77Compressor.java
@@ -84,10 +84,15 @@
  */
 public class LZ77Compressor {
 
-    /**
-     * Base class representing things the compressor may emit.
-     */
-    public static abstract class Block { }
+    /** Base class representing blocks the compressor may emit. */
+    public static abstract class Block {
+        /** Enumeration of the block types the compressor may emit. */
+        public static enum BlockType {
+            LITERAL, BACK_REFERENCE, EOD
+        }
+        abstract public BlockType getType();
+    }
+
     /**
      * Represents a literal block of data.
      *
@@ -128,12 +133,16 @@ public int getOffset() {
         public int getLength() {
             return length;
         }
-
+        @Override
+        public BlockType getType() {
+            return BlockType.LITERAL;
+        }
         @Override
         public String toString() {
             return "LiteralBlock starting at " + offset + " with length " + length;
         }
     }
+
     /**
      * Represents a back-reference.
      */
@@ -157,18 +166,22 @@ public int getOffset() {
         public int getLength() {
             return length;
         }
-
+        @Override
+        public BlockType getType() {
+            return BlockType.BACK_REFERENCE;
+        }
         @Override
         public String toString() {
             return "BackReference with offset " + offset + " and length " + length;
         }
     }
-    /**
-     * A simple "we are done" marker.
-     */
-    public static final class EOD extends Block { }
 
-    private static final EOD THE_EOD = new EOD();
+    /** A simple "we are done" marker. */
+    private static final Block THE_EOD = new Block() {
+        @Override
+        public BlockType getType() {
+            return BlockType.EOD;
+        } };
 
     /**
      * Callback invoked while the compressor processes data.
diff --git a/src/main/java/org/apache/commons/compress/compressors/snappy/SnappyCompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/snappy/SnappyCompressorOutputStream.java
index 5705bec..93a9d80 100644
--- a/src/main/java/org/apache/commons/compress/compressors/snappy/SnappyCompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/snappy/SnappyCompressorOutputStream.java
@@ -102,11 +102,15 @@ public SnappyCompressorOutputStream(final OutputStream os, final long uncompress
         compressor = new LZ77Compressor(params, new LZ77Compressor.Callback() {
                 @Override
                 public void accept(LZ77Compressor.Block block) throws IOException {
-                    //System.err.println(block);
-                    if (block instanceof LZ77Compressor.LiteralBlock) {
+                    switch (block.getType()) {
+                    case LITERAL:
                         writeLiteralBlock((LZ77Compressor.LiteralBlock) block);
-                    } else if (block instanceof LZ77Compressor.BackReference) {
+                        break;
+                    case BACK_REFERENCE:
                         writeBackReference((LZ77Compressor.BackReference) block);
+                        break;
+                    case EOD:
+                        break;
                     }
                 }
             });
diff --git a/src/test/java/org/apache/commons/compress/compressors/lz77support/LZ77CompressorTest.java b/src/test/java/org/apache/commons/compress/compressors/lz77support/LZ77CompressorTest.java
index 3163295..db4e3ab 100644
--- a/src/test/java/org/apache/commons/compress/compressors/lz77support/LZ77CompressorTest.java
+++ b/src/test/java/org/apache/commons/compress/compressors/lz77support/LZ77CompressorTest.java
@@ -307,7 +307,7 @@ public void accept(LZ77Compressor.Block block) {
 
     private static final void assertSize(int expectedSize, List<LZ77Compressor.Block> blocks) {
         assertEquals(expectedSize, blocks.size());
-        assertEquals(LZ77Compressor.EOD.class, blocks.get(expectedSize - 1).getClass());
+        assertEquals(LZ77Compressor.Block.BlockType.EOD, blocks.get(expectedSize - 1).getType());
     }
 
     private static final void assertLiteralBlock(String expectedContent, LZ77Compressor.Block block)
