diff --git a/src/main/java/azgracompress/compression/SQImageCompressor.java b/src/main/java/azgracompress/compression/SQImageCompressor.java
index a87de9be067f0552dde8bb7387d073e77d40f6de..c9ce9d893efe93cc5809e3ed7b6d1af651e5c83e 100644
--- a/src/main/java/azgracompress/compression/SQImageCompressor.java
+++ b/src/main/java/azgracompress/compression/SQImageCompressor.java
@@ -15,7 +15,6 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm
 
     public SQImageCompressor(ParsedCliOptions options) {
         super(options);
-
     }
 
     /**
@@ -43,6 +42,9 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm
         for (final int quantizationValue : centroids) {
             compressStream.writeShort(quantizationValue);
         }
+        if (options.isVerbose()) {
+            Log("Wrote quantization values to compressed stream.");
+        }
     }
 
     /**
@@ -58,34 +60,36 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm
                                                                    options.getImageDimension(),
                                                                    options.getReferencePlaneIndex());
 
-            Log("Creating codebook from reference plane...");
+            Log(String.format("Training scalar quantizer from reference plane %d.", options.getReferencePlaneIndex()));
             quantizer = trainScalarQuantizerFromData(referencePlane.getData());
             writeCodebookToOutputStream(quantizer, compressStream);
-            Log("Wrote reference codebook.");
         }
 
         final int[] planeIndices = getPlaneIndicesForCompression();
 
         for (final int planeIndex : planeIndices) {
-            Log(String.format("Loading plane %d...", planeIndex));
+            Log(String.format("Loading plane %d.", planeIndex));
             final ImageU16 plane = RawDataIO.loadImageU16(options.getInputFile(),
                                                           options.getImageDimension(),
                                                           planeIndex);
 
             if (!options.hasReferencePlaneIndex()) {
-                Log("Creating plane codebook...");
+                Log(String.format("Training scalar quantizer from plane %d.", planeIndex));
                 quantizer = trainScalarQuantizerFromData(plane.getData());
                 writeCodebookToOutputStream(quantizer, compressStream);
-                Log("Wrote plane codebook.");
             }
 
             assert (quantizer != null);
 
-            Log("Writing quantization indices...");
+            Log("Compressing plane...");
             final int[] indices = quantizer.quantizeIntoIndices(plane.getData());
-            OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerPixel(), 2048);
-            outBitStream.write(indices);
-            outBitStream.flush();
+
+            try (OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerPixel(), 2048)) {
+                outBitStream.write(indices);
+            } catch (IOException ioEx) {
+                ioEx.printStackTrace();
+            }
+
             Log(String.format("Finished processing of plane %d", planeIndex));
         }
     }
diff --git a/src/main/java/azgracompress/compression/VQImageCompressor.java b/src/main/java/azgracompress/compression/VQImageCompressor.java
index c6a3473516bb378f4efdf8b88b57733d23e18a17..3dc907798849cddf41bac69fe62b203beadc9e82 100644
--- a/src/main/java/azgracompress/compression/VQImageCompressor.java
+++ b/src/main/java/azgracompress/compression/VQImageCompressor.java
@@ -66,6 +66,9 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
                 compressStream.writeShort(vecVal);
             }
         }
+        if (options.isVerbose()) {
+            Log("Wrote quantization vectors to compressed stream.");
+        }
     }
 
     /**
@@ -81,7 +84,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
                                                                    options.getImageDimension(),
                                                                    options.getReferencePlaneIndex());
 
-            Log("Creating codebook from reference plane...");
+            Log(String.format("Training vector quantizer from reference plane %d.", options.getReferencePlaneIndex()));
             final int[][] refPlaneVectors = getPlaneVectors(referencePlane);
             quantizer = trainVectorQuantizerFromPlaneVectors(refPlaneVectors);
             writeQuantizerToCompressStream(quantizer, compressStream);
@@ -91,7 +94,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
         final int[] planeIndices = getPlaneIndicesForCompression();
 
         for (final int planeIndex : planeIndices) {
-            Log(String.format("Loading plane %d...", planeIndex));
+            Log(String.format("Loading plane %d.", planeIndex));
             final ImageU16 plane = RawDataIO.loadImageU16(options.getInputFile(),
                                                           options.getImageDimension(),
                                                           planeIndex);
@@ -99,7 +102,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
             final int[][] planeVectors = getPlaneVectors(plane);
 
             if (!options.hasReferencePlaneIndex()) {
-                Log("Creating plane codebook...");
+                Log(String.format("Training vector quantizer from plane %d.", planeIndex));
                 quantizer = trainVectorQuantizerFromPlaneVectors(planeVectors);
                 writeQuantizerToCompressStream(quantizer, compressStream);
                 Log("Wrote plane codebook.");
@@ -107,13 +110,19 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
 
             assert (quantizer != null);
 
-            Log("Writing quantization indices...");
+            Log("Compression plane...");
             final int[] indices = quantizer.quantizeIntoIndices(planeVectors);
 
-            OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerPixel(), 2048);
-            outBitStream.write(indices);
-            outBitStream.flush();
-            Log(String.format("Finished processing of plane %d", planeIndex));
+            try (OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerPixel(), 2048)) {
+                outBitStream.write(indices);
+            } catch (IOException ioEx) {
+                ioEx.printStackTrace();
+            }
+            Log(String.format("Finished processing of plane %d.", planeIndex));
+            //            OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerPixel(), 2048);
+            //            outBitStream.write(indices);
+            //            outBitStream.flush();
+            //            Log(String.format("Finished processing of plane %d.", planeIndex));
         }
     }
 
diff --git a/src/main/java/azgracompress/io/OutBitStream.java b/src/main/java/azgracompress/io/OutBitStream.java
index 349c876da9ff261da77f327b4e57bd24ebc5816f..e691f5d1831fcde784a9b4ced496b23439184ed7 100644
--- a/src/main/java/azgracompress/io/OutBitStream.java
+++ b/src/main/java/azgracompress/io/OutBitStream.java
@@ -3,7 +3,7 @@ package azgracompress.io;
 import java.io.IOException;
 import java.io.OutputStream;
 
-public class OutBitStream {
+public class OutBitStream implements AutoCloseable {
     private OutputStream outStream;
 
     private byte[] buffer;
@@ -103,4 +103,14 @@ public class OutBitStream {
             write(value);
         }
     }
+
+    /**
+     * Flush the bitsteam on close.
+     * @throws Exception when flush fails.
+     */
+    @Override
+    public void close() throws Exception {
+        flush();
+        System.out.println("Autoclosing OutBitStream");
+    }
 }