diff --git a/src/main/java/cz/it4i/qcmp/DataCompressor.java b/src/main/java/cz/it4i/qcmp/DataCompressor.java
index 4b12ea38302ec57f9a31b0f17b95e9f837dd0c97..a266e1894b5ce1a12aaa1cfda464b03d827dd1e4 100644
--- a/src/main/java/cz/it4i/qcmp/DataCompressor.java
+++ b/src/main/java/cz/it4i/qcmp/DataCompressor.java
@@ -9,9 +9,12 @@ import cz.it4i.qcmp.cli.functions.EntropyCalculation;
 import cz.it4i.qcmp.compression.ImageCompressor;
 import cz.it4i.qcmp.compression.ImageDecompressor;
 import cz.it4i.qcmp.fileformat.FileExtensions;
+import cz.it4i.qcmp.utilities.ColorConsole;
+import cz.it4i.qcmp.utilities.Stopwatch;
 import org.apache.commons.cli.*;
 
 import java.io.IOException;
+import java.util.concurrent.TimeUnit;
 
 public class DataCompressor {
     public static void main(final String[] args) {
@@ -36,28 +39,36 @@ public class DataCompressor {
             return;
         }
 
-        final CompressionOptionsCLIParser compressionOptionsCLIParser = new CompressionOptionsCLIParser(cmd);
+        final CompressionOptionsCLIParser compressionOptionsCLIParsed = new CompressionOptionsCLIParser(cmd);
         // NOTE(Moravec): From this point we need to dispose of possible existing SCIFIO context.
-        if (compressionOptionsCLIParser.parseError()) {
-            System.err.println(compressionOptionsCLIParser.getParseError());
+        if (compressionOptionsCLIParsed.parseError()) {
+            System.err.println(compressionOptionsCLIParsed.getParseError());
             ScifioWrapper.dispose();
             return;
         }
 
-        if (compressionOptionsCLIParser.isVerbose()) {
-            System.out.println(compressionOptionsCLIParser.report());
+        if (compressionOptionsCLIParsed.isVerbose()) {
+            System.out.println(compressionOptionsCLIParsed.report());
         }
 
-        switch (compressionOptionsCLIParser.getMethod()) {
+        switch (compressionOptionsCLIParsed.getMethod()) {
             case Compress: {
-                final ImageCompressor compressor = new ImageCompressor(compressionOptionsCLIParser);
+                final String label =
+                        compressionOptionsCLIParsed.getQuantizationType().toString() + " " + compressionOptionsCLIParsed.getQuantizationVector().toString();
+                final Stopwatch stopwatch = Stopwatch.startNew();
+                final ImageCompressor compressor = new ImageCompressor(compressionOptionsCLIParsed);
                 if (!compressor.compress()) {
                     System.err.println("Errors occurred during compression.");
                 }
+                stopwatch.stop();
+                ColorConsole.printf(ColorConsole.Color.Green, label);
+                ColorConsole.printf(ColorConsole.Color.Green,
+                                    "Compression completed in %d ms.",
+                                    stopwatch.getElapsedInUnit(TimeUnit.MILLISECONDS));
             }
             break;
             case Decompress: {
-                final ImageDecompressor decompressor = new ImageDecompressor(compressionOptionsCLIParser);
+                final ImageDecompressor decompressor = new ImageDecompressor(compressionOptionsCLIParsed);
                 if (!decompressor.decompressToFile()) {
                     System.err.println("Errors occurred during decompression.");
                 }
@@ -65,11 +76,11 @@ public class DataCompressor {
             break;
 
             case Benchmark: {
-                CompressionBenchmark.runBenchmark(compressionOptionsCLIParser);
+                CompressionBenchmark.runBenchmark(compressionOptionsCLIParsed);
             }
             break;
             case TrainCodebook: {
-                final ImageCompressor compressor = new ImageCompressor(compressionOptionsCLIParser);
+                final ImageCompressor compressor = new ImageCompressor(compressionOptionsCLIParsed);
                 if (!compressor.trainAndSaveCodebook()) {
                     System.err.println("Errors occurred during training/saving of codebook.");
                 }
@@ -79,7 +90,7 @@ public class DataCompressor {
                 // NOTE(Moravec): Custom function class here |
                 //                                           V
                 //CustomFunctionBase customFunction = new MeasurePlaneErrorFunction(parsedCliOptions);
-                final CustomFunctionBase customFunction = new EntropyCalculation(compressionOptionsCLIParser);
+                final CustomFunctionBase customFunction = new EntropyCalculation(compressionOptionsCLIParsed);
                 if (!customFunction.run()) {
                     System.err.println("Errors occurred during custom function.");
                 }
@@ -91,11 +102,11 @@ public class DataCompressor {
             }
             break;
             case InspectFile: {
-                if (compressionOptionsCLIParser.getInputDataInfo().getFilePath().endsWith(FileExtensions.CACHE_FILE_EXT)) {
-                    QuantizationCacheManager.inspectCacheFile(compressionOptionsCLIParser.getInputDataInfo().getFilePath(),
-                                                              compressionOptionsCLIParser.isVerbose());
+                if (compressionOptionsCLIParsed.getInputDataInfo().getFilePath().endsWith(FileExtensions.CACHE_FILE_EXT)) {
+                    QuantizationCacheManager.inspectCacheFile(compressionOptionsCLIParsed.getInputDataInfo().getFilePath(),
+                                                              compressionOptionsCLIParsed.isVerbose());
                 } else {
-                    final ImageDecompressor decompressor = new ImageDecompressor(compressionOptionsCLIParser);
+                    final ImageDecompressor decompressor = new ImageDecompressor(compressionOptionsCLIParsed);
                     try {
                         System.out.println(decompressor.inspectCompressedFile());
                     } catch (final IOException e) {