diff --git a/src/main/java/azgracompress/compression/CompressionOptions.java b/src/main/java/azgracompress/compression/CompressionOptions.java
index a28afee48c3928ecd48d50e617288dacab574622..e32af40e16e674b4da875bcd8f43667835b84820 100644
--- a/src/main/java/azgracompress/compression/CompressionOptions.java
+++ b/src/main/java/azgracompress/compression/CompressionOptions.java
@@ -70,6 +70,7 @@ public class CompressionOptions implements Cloneable {
     public CompressionOptions(final ICacheFile codebookCacheFile) {
         this();
         quantizationType = codebookCacheFile.getHeader().getQuantizationType();
+        bitsPerCodebookIndex = codebookCacheFile.getHeader().getBitsPerCodebookIndex();
         codebookType = CodebookType.Global;
     }
 
diff --git a/src/main/java/azgracompress/compression/CompressorDecompressorBase.java b/src/main/java/azgracompress/compression/CompressorDecompressorBase.java
index c6669f1fb5578612d8f1250846ed45de16415bb7..469f7b30435755d22c4b7406c9cf37ef3549a1a0 100644
--- a/src/main/java/azgracompress/compression/CompressorDecompressorBase.java
+++ b/src/main/java/azgracompress/compression/CompressorDecompressorBase.java
@@ -21,11 +21,15 @@ public abstract class CompressorDecompressorBase {
     private ArrayList<IStatusListener> statusListeners;
     private ArrayList<IProgressListener> progressListeners;
 
-    public CompressorDecompressorBase(CompressionOptions options) {
+    public CompressorDecompressorBase(final CompressionOptions options) {
         this.options = options;
         this.codebookSize = (int) Math.pow(2, this.options.getBitsPerCodebookIndex());
     }
 
+    public int getBitsPerCodebookIndex() {
+        return this.options.getBitsPerCodebookIndex();
+    }
+
     public void addStatusListener(final IStatusListener listener) {
         if (statusListeners == null) {
             statusListeners = new ArrayList<>(1);
@@ -45,7 +49,7 @@ public abstract class CompressorDecompressorBase {
         this.progressListeners.clear();
     }
 
-    protected void duplicateAllListeners(IListenable other) {
+    protected void duplicateAllListeners(final IListenable other) {
         if (other == this)
             return;
 
@@ -89,7 +93,7 @@ public abstract class CompressorDecompressorBase {
     }
 
     protected int[] createHuffmanSymbols(final int codebookSize) {
-        int[] symbols = new int[codebookSize];
+        final int[] symbols = new int[codebookSize];
         for (int i = 0; i < codebookSize; i++) {
             symbols[i] = i;
         }
@@ -97,7 +101,7 @@ public abstract class CompressorDecompressorBase {
     }
 
     protected Huffman createHuffmanCoder(final int[] symbols, final long[] frequencies) {
-        Huffman huffman = new Huffman(symbols, frequencies);
+        final Huffman huffman = new Huffman(symbols, frequencies);
         huffman.buildHuffmanTree();
         return huffman;
     }
@@ -109,7 +113,7 @@ public abstract class CompressorDecompressorBase {
             final int from = inputData.getPlaneRange().getFrom();
             final int count = inputData.getPlaneRange().getTo() - from;
 
-            int[] indices = new int[count + 1];
+            final int[] indices = new int[count + 1];
             for (int i = 0; i <= count; i++) {
                 indices[i] = from + i;
             }
@@ -120,7 +124,7 @@ public abstract class CompressorDecompressorBase {
     }
 
     private int[] generateAllPlaneIndices(final int planeCount) {
-        int[] planeIndices = new int[planeCount];
+        final int[] planeIndices = new int[planeCount];
         for (int i = 0; i < planeCount; i++) {
             planeIndices[i] = i;
         }
@@ -152,15 +156,15 @@ public abstract class CompressorDecompressorBase {
      * @return Number of bytes written.
      * @throws ImageCompressionException when fails to write to compress stream.
      */
-    protected long writeHuffmanEncodedIndices(DataOutputStream compressStream,
+    protected long writeHuffmanEncodedIndices(final DataOutputStream compressStream,
                                               final Huffman huffman,
                                               final int[] indices) throws ImageCompressionException {
-        try (OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerCodebookIndex(), 2048)) {
+        try (final OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerCodebookIndex(), 2048)) {
             for (final int index : indices) {
                 outBitStream.write(huffman.getCode(index));
             }
             return outBitStream.getBytesWritten();
-        } catch (Exception ex) {
+        } catch (final Exception ex) {
             throw new ImageCompressionException("Unable to write indices to OutBitStream.", ex);
         }
     }
diff --git a/src/main/java/azgracompress/compression/ImageCompressor.java b/src/main/java/azgracompress/compression/ImageCompressor.java
index 2ace74cb14d8e7b01135d26f64df0b715e1ed568..2e0d000ba304a144486b1a40fc3cd95933d5c7ef 100644
--- a/src/main/java/azgracompress/compression/ImageCompressor.java
+++ b/src/main/java/azgracompress/compression/ImageCompressor.java
@@ -25,10 +25,6 @@ public class ImageCompressor extends CompressorDecompressorBase {
         imageCompressor.preloadGlobalCodebook(codebookCacheFile);
     }
 
-    public int getBitsPerCodebookIndex() {
-        return this.options.getBitsPerCodebookIndex();
-    }
-
     /**
      * Set InputData object for compressor.
      *