diff --git a/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java b/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java
index 8f57c41b0acbd64cca5537e0bb9242a76ecdb615..c381c681fda387b002c1720d4a847d6ed5bca5aa 100644
--- a/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java
+++ b/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java
@@ -12,7 +12,6 @@ import java.util.ArrayList;
 
 
 public class QuantizationCacheManager {
-
     /**
      * Folders where cache files are stored.
      */
@@ -126,7 +125,7 @@ public class QuantizationCacheManager {
         final String fileName = getCacheFilePathForSQ(trainFile, codebook.getCodebookSize()).getAbsolutePath();
 
         final QvcHeaderV1 header = createHeaderForSQ(new File(trainFile).getName(), codebook);
-        final SQCacheFile cacheFile = new SQCacheFile(header, codebook);
+        final SqQvcFile cacheFile = new SqQvcFile(header, codebook);
 
         try (final FileOutputStream fos = new FileOutputStream(fileName, false);
              final DataOutputStream dos = new DataOutputStream(fos)) {
@@ -153,7 +152,7 @@ public class QuantizationCacheManager {
                                                       codebook.getVectorDims()).getAbsolutePath();
 
         final QvcHeaderV1 header = createHeaderForVQ(new File(trainFile).getName(), codebook);
-        final VQCacheFile cacheFile = new VQCacheFile(header, codebook);
+        final VqQvcFile cacheFile = new VqQvcFile(header, codebook);
 
         try (final FileOutputStream fos = new FileOutputStream(fileName, false);
              final DataOutputStream dos = new DataOutputStream(fos)) {
@@ -173,7 +172,7 @@ public class QuantizationCacheManager {
      * @return Cache file with data from disk.
      * @throws IOException when fails to read the cache file from disk.
      */
-    private ICacheFile readCacheFile(final File file, final ICacheFile cacheFile) throws IOException {
+    private IQvcFile readCacheFile(final File file, final IQvcFile cacheFile) throws IOException {
         try (final FileInputStream fis = new FileInputStream(file);
              final DataInputStream dis = new DataInputStream(fis)) {
 
@@ -212,10 +211,10 @@ public class QuantizationCacheManager {
      * @param codebookSize Codebook size.
      * @return SQ cache file.
      */
-    public SQCacheFile loadSQCacheFile(final String imageFile, final int codebookSize) {
+    public SqQvcFile loadSQCacheFile(final String imageFile, final int codebookSize) {
         final File path = getCacheFilePathForSQ(imageFile, codebookSize);
         try {
-            return (SQCacheFile) readCacheFile(path, new SQCacheFile());
+            return (SqQvcFile) readCacheFile(path, new SqQvcFile());
         } catch (final IOException e) {
             System.err.println("Failed to read SQ cache file." + path);
             e.printStackTrace(System.err);
@@ -231,12 +230,12 @@ public class QuantizationCacheManager {
      * @param vDim         Quantization vector dimension.
      * @return VQ cache file.
      */
-    public VQCacheFile loadVQCacheFile(final String trainFile,
-                                       final int codebookSize,
-                                       final V3i vDim) {
+    public VqQvcFile loadVQCacheFile(final String trainFile,
+                                     final int codebookSize,
+                                     final V3i vDim) {
         final File path = getCacheFilePathForVQ(trainFile, codebookSize, vDim);
         try {
-            return (VQCacheFile) readCacheFile(path, new VQCacheFile());
+            return (VqQvcFile) readCacheFile(path, new VqQvcFile());
         } catch (final IOException e) {
             System.err.println("Failed to read VQ cache file." + path);
             e.printStackTrace(System.err);
@@ -252,7 +251,7 @@ public class QuantizationCacheManager {
      * @return SQ codebook or null.
      */
     public SQCodebook loadSQCodebook(final String trainFile, final int codebookSize) {
-        final SQCacheFile cacheFile = loadSQCacheFile(trainFile, codebookSize);
+        final SqQvcFile cacheFile = loadSQCacheFile(trainFile, codebookSize);
         if (cacheFile != null)
             return cacheFile.getCodebook();
         else
@@ -270,7 +269,7 @@ public class QuantizationCacheManager {
     public VQCodebook loadVQCodebook(final String trainFile,
                                      final int codebookSize,
                                      final V3i vDim) {
-        final VQCacheFile cacheFile = loadVQCacheFile(trainFile, codebookSize, vDim);
+        final VqQvcFile cacheFile = loadVQCacheFile(trainFile, codebookSize, vDim);
         if (cacheFile != null)
             return cacheFile.getCodebook();
         else
@@ -278,11 +277,11 @@ public class QuantizationCacheManager {
 
     }
 
-    private static ICacheFile getCacheFile(final QuantizationType qt) {
+    private static IQvcFile getCacheFile(final QuantizationType qt) {
         if (qt.isOneOf(QuantizationType.Vector1D, QuantizationType.Vector2D, QuantizationType.Vector3D))
-            return new VQCacheFile();
+            return new VqQvcFile();
         else if (qt == QuantizationType.Scalar)
-            return new SQCacheFile();
+            return new SqQvcFile();
 
         assert (false) : "Invalid quantization type.";
         return null;
@@ -295,15 +294,15 @@ public class QuantizationCacheManager {
      * @param compressionParams Parameters used to find cache file.
      * @return Cache files which are available for given file and quantization type.
      */
-    public ArrayList<ICacheFile> loadAvailableCacheFiles(final CompressionOptions compressionParams) {
-        final ArrayList<ICacheFile> availableCacheFiles = new ArrayList<>();
+    public ArrayList<IQvcFile> loadAvailableCacheFiles(final CompressionOptions compressionParams) {
+        final ArrayList<IQvcFile> availableCacheFiles = new ArrayList<>();
 
         final int originalBPCI = compressionParams.getBitsPerCodebookIndex();
         try {
 
             for (int bpci = 2; bpci < 9; bpci++) { // 2 to 8
                 compressionParams.setBitsPerCodebookIndex(bpci);
-                final ICacheFile bpciCacheFile = loadCacheFile(compressionParams);
+                final IQvcFile bpciCacheFile = loadCacheFile(compressionParams);
                 if (bpciCacheFile != null) {
                     availableCacheFiles.add(bpciCacheFile);
                 }
@@ -321,7 +320,7 @@ public class QuantizationCacheManager {
      * @param compressionParams Parameters used to find cache file.
      * @return Quantization cache file or null if requested file doesn't exist.
      */
-    public ICacheFile loadCacheFile(final CompressionOptions compressionParams) {
+    public IQvcFile loadCacheFile(final CompressionOptions compressionParams) {
         final String path;
         final int codebookSize = (int) Math.pow(2, compressionParams.getBitsPerCodebookIndex());
         switch (compressionParams.getQuantizationType()) {
@@ -349,7 +348,7 @@ public class QuantizationCacheManager {
      * @param inputStream Input stream.
      * @return Cache file or null, if exception occurs.
      */
-    private static ICacheFile readCacheFileImpl(final InputStream inputStream) {
+    private static IQvcFile readCacheFileImpl(final InputStream inputStream) {
         final DataInputStream dis;
         if (inputStream instanceof DataInputStream) {
             dis = (DataInputStream) inputStream;
@@ -366,7 +365,7 @@ public class QuantizationCacheManager {
             return null;
         }
 
-        final ICacheFile cacheFile = getCacheFile(header.getQuantizationType());
+        final IQvcFile cacheFile = getCacheFile(header.getQuantizationType());
         assert (cacheFile != null);
         try {
             cacheFile.readFromStream(dis, header);
@@ -384,7 +383,7 @@ public class QuantizationCacheManager {
      * @param inputStream Input data stream.
      * @return Cache file or null if reading fails.
      */
-    public static ICacheFile readCacheFile(final InputStream inputStream) {
+    public static IQvcFile readCacheFile(final InputStream inputStream) {
         return readCacheFileImpl(inputStream);
     }
 
@@ -395,7 +394,7 @@ public class QuantizationCacheManager {
      * @param path File path.
      * @return Cache file or null if reading fails.
      */
-    public static ICacheFile readCacheFile(final String path) {
+    public static IQvcFile readCacheFile(final String path) {
         try (final FileInputStream fis = new FileInputStream(path)) {
             return readCacheFileImpl(fis);
         } catch (final IOException e) {
@@ -433,7 +432,7 @@ public class QuantizationCacheManager {
 
         if (verbose) {
 
-            final ICacheFile cacheFile = getCacheFile(header.getQuantizationType());
+            final IQvcFile cacheFile = getCacheFile(header.getQuantizationType());
             assert (cacheFile != null);
 
             try (final FileInputStream fis = new FileInputStream(path);
diff --git a/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java b/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java
index a5f0fea8631131f416119677c6878d1d70f5adbc..32b62054975fec4337112abca419f3befb641b95 100644
--- a/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java
+++ b/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java
@@ -1,7 +1,7 @@
 package cz.it4i.qcmp.cli.functions;
 
 import cz.it4i.qcmp.cache.QuantizationCacheManager;
-import cz.it4i.qcmp.cache.VQCacheFile;
+import cz.it4i.qcmp.cache.VqQvcFile;
 import cz.it4i.qcmp.cli.CompressionOptionsCLIParser;
 import cz.it4i.qcmp.cli.CustomFunctionBase;
 import cz.it4i.qcmp.huffman.HuffmanNode;
@@ -29,7 +29,7 @@ public class DebugFunction extends CustomFunctionBase {
     @Override
     public boolean run() {
 
-        final VQCodebook codebook = ((VQCacheFile) QuantizationCacheManager.readCacheFile("D:\\tmp\\codebook.qvc")).getCodebook();
+        final VQCodebook codebook = ((VqQvcFile) QuantizationCacheManager.readCacheFile("D:\\tmp\\codebook.qvc")).getCodebook();
 
         final int[] symbols = new int[codebook.getCodebookSize()];
         for (int i = 0; i < codebook.getCodebookSize(); i++) {
@@ -56,6 +56,8 @@ public class DebugFunction extends CustomFunctionBase {
             ex.printStackTrace();
         }
 
+        readRoot.
+
         final boolean equal = huffmanBuilder.createEncoder().getRoot().treeEqual(readRoot);
 
         System.out.println(readRoot != null);
diff --git a/src/main/java/cz/it4i/qcmp/compression/CompressionOptions.java b/src/main/java/cz/it4i/qcmp/compression/CompressionOptions.java
index 82d6da1a7d1aa6b124c36a2fb3492905635c9d5d..02e987bb65ea469bda6df488c11f150442fa90d1 100644
--- a/src/main/java/cz/it4i/qcmp/compression/CompressionOptions.java
+++ b/src/main/java/cz/it4i/qcmp/compression/CompressionOptions.java
@@ -1,6 +1,6 @@
 package cz.it4i.qcmp.compression;
 
-import cz.it4i.qcmp.cache.ICacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
 import cz.it4i.qcmp.data.V3i;
 import cz.it4i.qcmp.fileformat.QuantizationType;
 import cz.it4i.qcmp.io.InputData;
@@ -69,7 +69,7 @@ public class CompressionOptions implements Cloneable {
         this.workerCount = (cores / 2);
     }
 
-    public CompressionOptions(final ICacheFile codebookCacheFile) {
+    public CompressionOptions(final IQvcFile codebookCacheFile) {
         this();
         quantizationType = codebookCacheFile.getHeader().getQuantizationType();
         bitsPerCodebookIndex = codebookCacheFile.getHeader().getBitsPerCodebookIndex();
diff --git a/src/main/java/cz/it4i/qcmp/compression/IImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/IImageCompressor.java
index 5b4277f7c8798a0d87817de77c06ecf8472ca8a1..c93e3db2ae14bf57ec8c097c7285057562de596f 100644
--- a/src/main/java/cz/it4i/qcmp/compression/IImageCompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/IImageCompressor.java
@@ -1,6 +1,6 @@
 package cz.it4i.qcmp.compression;
 
-import cz.it4i.qcmp.cache.ICacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
 import cz.it4i.qcmp.compression.exception.ImageCompressionException;
 import cz.it4i.qcmp.io.InputData;
 
@@ -50,5 +50,5 @@ public interface IImageCompressor extends IListenable {
      *
      * @param codebookCacheFile Codebook cache file.
      */
-    void preloadGlobalCodebook(final ICacheFile codebookCacheFile);
+    void preloadGlobalCodebook(final IQvcFile codebookCacheFile);
 }
diff --git a/src/main/java/cz/it4i/qcmp/compression/IImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/IImageDecompressor.java
index 81817f35a600dc160ee195f6d98cc35c6b0beadf..d10870fa3c73025ea13e146dee3f3a096ddc3154 100644
--- a/src/main/java/cz/it4i/qcmp/compression/IImageDecompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/IImageDecompressor.java
@@ -1,6 +1,6 @@
 package cz.it4i.qcmp.compression;
 
-import cz.it4i.qcmp.cache.ICacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
 import cz.it4i.qcmp.compression.exception.ImageDecompressionException;
 import cz.it4i.qcmp.fileformat.QCMPFileHeader;
 
@@ -40,5 +40,5 @@ public interface IImageDecompressor extends IListenable {
      *
      * @param codebookCacheFile Codebook cache file.
      */
-    void preloadGlobalCodebook(final ICacheFile codebookCacheFile);
+    void preloadGlobalCodebook(final IQvcFile codebookCacheFile);
 }
diff --git a/src/main/java/cz/it4i/qcmp/compression/ImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/ImageCompressor.java
index 92140eb3820d996a65434779e4402273000db67c..3ff365c7ffa561f2537a560ada0af38796db6060 100644
--- a/src/main/java/cz/it4i/qcmp/compression/ImageCompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/ImageCompressor.java
@@ -1,7 +1,7 @@
 package cz.it4i.qcmp.compression;
 
 import cz.it4i.qcmp.U16;
-import cz.it4i.qcmp.cache.ICacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
 import cz.it4i.qcmp.compression.exception.ImageCompressionException;
 import cz.it4i.qcmp.data.Range;
 import cz.it4i.qcmp.fileformat.QCMPFileHeader;
@@ -20,7 +20,7 @@ public class ImageCompressor extends CompressorDecompressorBase {
         imageCompressor = getImageCompressor();
     }
 
-    public ImageCompressor(final CompressionOptions options, final ICacheFile codebookCacheFile) {
+    public ImageCompressor(final CompressionOptions options, final IQvcFile codebookCacheFile) {
         this(options);
         imageCompressor.preloadGlobalCodebook(codebookCacheFile);
     }
diff --git a/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java
index 7240b7cdcdec57b7d863e9110753248fe464d7e0..02ce02884048d0100255589ff1bc1836be470b85 100644
--- a/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java
@@ -1,6 +1,6 @@
 package cz.it4i.qcmp.compression;
 
-import cz.it4i.qcmp.cache.ICacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
 import cz.it4i.qcmp.compression.exception.ImageDecompressionException;
 import cz.it4i.qcmp.data.ImageU16Dataset;
 import cz.it4i.qcmp.fileformat.QCMPFileHeader;
@@ -25,7 +25,7 @@ public class ImageDecompressor extends CompressorDecompressorBase {
     }
 
 
-    public ImageDecompressor(final ICacheFile codebookCacheFile) {
+    public ImageDecompressor(final IQvcFile codebookCacheFile) {
         this(new CompressionOptions(codebookCacheFile));
         cachedDecompressor = getImageDecompressor(options.getQuantizationType());
         assert (cachedDecompressor != null);
diff --git a/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java
index 06ee7b79632e8d81f8139b176c05459d4a954928..b782dcc81cf57ed0680e3cc282151fea418e4209 100644
--- a/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java
@@ -1,9 +1,9 @@
 package cz.it4i.qcmp.compression;
 
 import cz.it4i.qcmp.U16;
-import cz.it4i.qcmp.cache.ICacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
 import cz.it4i.qcmp.cache.QuantizationCacheManager;
-import cz.it4i.qcmp.cache.SQCacheFile;
+import cz.it4i.qcmp.cache.SqQvcFile;
 import cz.it4i.qcmp.compression.exception.ImageCompressionException;
 import cz.it4i.qcmp.huffman.HuffmanEncoder;
 import cz.it4i.qcmp.io.InputData;
@@ -42,8 +42,8 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm
     }
 
     @Override
-    public void preloadGlobalCodebook(final ICacheFile codebookCacheFile) {
-        final SQCodebook cachedCodebook = ((SQCacheFile) codebookCacheFile).getCodebook();
+    public void preloadGlobalCodebook(final IQvcFile codebookCacheFile) {
+        final SQCodebook cachedCodebook = ((SqQvcFile) codebookCacheFile).getCodebook();
         cachedQuantizer = new ScalarQuantizer(cachedCodebook);
         cachedHuffmanEncoder = createHuffmanEncoder(createHuffmanSymbols(cachedCodebook.getCodebookSize()),
                                                     cachedCodebook.getSymbolFrequencies());
diff --git a/src/main/java/cz/it4i/qcmp/compression/SQImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/SQImageDecompressor.java
index b962be46a092acc017f0409a654961c40d3d8a9e..703beda0fe4ddf5f18f30f927a4b0bda395301ea 100644
--- a/src/main/java/cz/it4i/qcmp/compression/SQImageDecompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/SQImageDecompressor.java
@@ -1,7 +1,7 @@
 package cz.it4i.qcmp.compression;
 
-import cz.it4i.qcmp.cache.ICacheFile;
-import cz.it4i.qcmp.cache.SQCacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
+import cz.it4i.qcmp.cache.SqQvcFile;
 import cz.it4i.qcmp.compression.exception.ImageDecompressionException;
 import cz.it4i.qcmp.fileformat.QCMPFileHeader;
 import cz.it4i.qcmp.huffman.HuffmanDecoder;
@@ -104,10 +104,10 @@ public class SQImageDecompressor extends CompressorDecompressorBase implements I
     }
 
     @Override
-    public void preloadGlobalCodebook(final ICacheFile codebookCacheFile) {
-        assert (codebookCacheFile instanceof SQCacheFile) : "Incorrect codebook cache file type for SQImageDecompressor";
+    public void preloadGlobalCodebook(final IQvcFile codebookCacheFile) {
+        assert (codebookCacheFile instanceof SqQvcFile) : "Incorrect codebook cache file type for SQImageDecompressor";
 
-        final SQCacheFile codebookCache = (SQCacheFile) codebookCacheFile;
+        final SqQvcFile codebookCache = (SqQvcFile) codebookCacheFile;
 
         cachedCodebook = codebookCache.getCodebook();
         cachedHuffmanDecoder = createHuffmanDecoder(createHuffmanSymbols(cachedCodebook.getCodebookSize()),
diff --git a/src/main/java/cz/it4i/qcmp/compression/VQImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/VQImageCompressor.java
index 063ff1c530f264c0e41dae68a6488378a55975de..babbf166675a3995e480c4271c5bf1b6d9c1a86c 100644
--- a/src/main/java/cz/it4i/qcmp/compression/VQImageCompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/VQImageCompressor.java
@@ -1,8 +1,8 @@
 package cz.it4i.qcmp.compression;
 
-import cz.it4i.qcmp.cache.ICacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
 import cz.it4i.qcmp.cache.QuantizationCacheManager;
-import cz.it4i.qcmp.cache.VQCacheFile;
+import cz.it4i.qcmp.cache.VqQvcFile;
 import cz.it4i.qcmp.compression.exception.ImageCompressionException;
 import cz.it4i.qcmp.data.Range;
 import cz.it4i.qcmp.fileformat.QuantizationType;
@@ -33,8 +33,8 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
     }
 
     @Override
-    public void preloadGlobalCodebook(final ICacheFile codebookCacheFile) {
-        final VQCodebook cachedCodebook = ((VQCacheFile) codebookCacheFile).getCodebook();
+    public void preloadGlobalCodebook(final IQvcFile codebookCacheFile) {
+        final VQCodebook cachedCodebook = ((VqQvcFile) codebookCacheFile).getCodebook();
         cachedQuantizer = new VectorQuantizer(cachedCodebook);
         cachedHuffmanEncoder = createHuffmanEncoder(createHuffmanSymbols(cachedCodebook.getCodebookSize()),
                                                     cachedCodebook.getVectorFrequencies());
diff --git a/src/main/java/cz/it4i/qcmp/compression/VQImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/VQImageDecompressor.java
index 6cff655804476201c0e01306a3a469a18a3c6431..9262328746cf2fbec3d6cf5bbcd85edaccfa1871 100644
--- a/src/main/java/cz/it4i/qcmp/compression/VQImageDecompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/VQImageDecompressor.java
@@ -1,7 +1,7 @@
 package cz.it4i.qcmp.compression;
 
-import cz.it4i.qcmp.cache.ICacheFile;
-import cz.it4i.qcmp.cache.VQCacheFile;
+import cz.it4i.qcmp.cache.IQvcFile;
+import cz.it4i.qcmp.cache.VqQvcFile;
 import cz.it4i.qcmp.compression.exception.ImageDecompressionException;
 import cz.it4i.qcmp.data.*;
 import cz.it4i.qcmp.fileformat.QCMPFileHeader;
@@ -67,9 +67,9 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
     }
 
     @Override
-    public void preloadGlobalCodebook(final ICacheFile codebookCacheFile) {
-        assert (codebookCacheFile instanceof VQCacheFile) : "Incorrect codebook cache file type for VQImageDecompressor";
-        final VQCacheFile codebookCache = (VQCacheFile) codebookCacheFile;
+    public void preloadGlobalCodebook(final IQvcFile codebookCacheFile) {
+        assert (codebookCacheFile instanceof VqQvcFile) : "Incorrect codebook cache file type for VQImageDecompressor";
+        final VqQvcFile codebookCache = (VqQvcFile) codebookCacheFile;
 
         cachedCodebook = codebookCache.getCodebook();
         cachedHuffmanDecoder = createHuffmanDecoder(createHuffmanSymbols(cachedCodebook.getCodebookSize()),