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 52e558dac285418b185d6ff126eac2a8dce2b260..b2a325e6395ce7004d5d7274eea951870376fc73 100644
--- a/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java
+++ b/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java
@@ -1,15 +1,21 @@
 package cz.it4i.qcmp.cli.functions;
 
+import cz.it4i.qcmp.cache.QuantizationCacheManager;
+import cz.it4i.qcmp.cache.VQCacheFile;
 import cz.it4i.qcmp.cli.CompressionOptionsCLIParser;
 import cz.it4i.qcmp.cli.CustomFunctionBase;
-import cz.it4i.qcmp.data.HyperStackDimensions;
-import cz.it4i.qcmp.io.RawDataIO;
-import cz.it4i.qcmp.io.loader.IPlaneLoader;
-import cz.it4i.qcmp.io.loader.PlaneLoaderFactory;
+import cz.it4i.qcmp.huffman.Huffman;
+import cz.it4i.qcmp.huffman.HuffmanNode;
+import cz.it4i.qcmp.io.InBitStream;
+import cz.it4i.qcmp.io.OutBitStream;
+import cz.it4i.qcmp.quantization.vector.VQCodebook;
 import cz.it4i.qcmp.utilities.Utils;
 
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 
+@SuppressWarnings("ConstantConditions")
 public class DebugFunction extends CustomFunctionBase {
     /**
      * Base constructor with parsed CLI options.
@@ -22,27 +28,38 @@ public class DebugFunction extends CustomFunctionBase {
 
     @Override
     public boolean run() {
-        final IPlaneLoader loader;
-        try {
-            loader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo());
-        } catch (final Exception e) {
-            e.printStackTrace();
-            return false;
-        }
 
-        final HyperStackDimensions dims = options.getInputDataInfo().getDimensions();
-        final int planeSize = Utils.multiplyExact(dims.getWidth(), dims.getHeight());
-        final int sliceSize = Utils.multiplyExact(planeSize, dims.getNumberOfTimepoints());
-        try {
+        final VQCodebook codebook = ((VQCacheFile) QuantizationCacheManager.readCacheFile("D:\\tmp\\codebook.qvc")).getCodebook();
 
-            for (int t = 12; t < 15; t++) {
+        final int[] symbols = new int[codebook.getCodebookSize()];
+        for (int i = 0; i < codebook.getCodebookSize(); i++) {
+            symbols[i] = i;
+        }
 
-                RawDataIO.write(String.format("slice_t%d.raw", t), loader.loadAllPlanesU16Data(t), false);
-            }
+        final Huffman huffman = new Huffman(symbols, codebook.getVectorFrequencies());
+        huffman.buildHuffmanTree();
+
+        final int bitsPerSymbol = (int) Utils.log2(codebook.getCodebookSize());
+        try (final OutBitStream bitStream = new OutBitStream(new FileOutputStream("D:\\tmp\\huffman_tree.data", false),
+                                                             bitsPerSymbol,
+                                                             64)) {
+            huffman.saveHuffmanTree(bitStream);
         } catch (final IOException e) {
             e.printStackTrace();
         }
 
+
+        HuffmanNode readRoot = null;
+        try (final InBitStream inBitStream = new InBitStream(new FileInputStream("D:\\tmp\\huffman_tree.data"), bitsPerSymbol, 256)) {
+            readRoot = Huffman.readHuffmanTree(inBitStream);
+        } catch (final IOException ex) {
+            ex.printStackTrace();
+        }
+
+        final boolean equal = huffman.getRoot().treeEqual(readRoot);
+
+        System.out.println(readRoot != null);
+
         return true;
     }
 }