diff --git a/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java b/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java
index 9665e73ad4c2f2e87fc6cb45453aceb830c1d136..6142f1e5c20669616498d0785c509a637c6e62db 100644
--- a/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java
+++ b/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java
@@ -317,7 +317,7 @@ public class QuantizationCacheManager {
             return;
         }
         if (!qvcFile.getHeader().validateHeader()) {
-            System.err.println("Provided file is corrupted.");
+            System.err.println("Provided file is corrupted. Header is not valid.");
             return;
         }
         final StringBuilder reportBuilder = new StringBuilder();
diff --git a/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV1.java b/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV1.java
index 5fc30acf6c935edfb49894853e71b2213f0d4df2..fa602b971614d20dd71ffe2f3623adeebec780c0 100644
--- a/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV1.java
+++ b/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV1.java
@@ -1,5 +1,6 @@
 package cz.it4i.qcmp.fileformat;
 
+import cz.it4i.qcmp.U16;
 import cz.it4i.qcmp.data.V2i;
 import cz.it4i.qcmp.data.V3i;
 import cz.it4i.qcmp.io.RawDataIO;
@@ -17,7 +18,6 @@ public class QvcHeaderV1 implements IQvcHeader {
     //endregion
 
     //region Header fields.
-    protected String magicValue;
     protected QuantizationType quantizationType;
     protected int codebookSize;
     protected int trainFileNameSize;
@@ -40,7 +40,19 @@ public class QvcHeaderV1 implements IQvcHeader {
 
     @Override
     public boolean validateHeader() {
-        return (magicValue != null && magicValue.equals(MAGIC_VALUE));
+        if (!quantizationType.isOneOf(QuantizationType.Scalar,
+                                      QuantizationType.Vector1D,
+                                      QuantizationType.Vector2D,
+                                      QuantizationType.Vector3D))
+            return false;
+
+        if (!U16.isInRange(codebookSize))
+            return false;
+
+        if (!U16.isInRange(trainFileNameSize) || trainFileName.length() != trainFileNameSize)
+            return false;
+
+        return U16.isInRange(vectorSizeX) && U16.isInRange(vectorSizeY) && U16.isInRange(vectorSizeZ);
     }
 
     /**
diff --git a/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV2.java b/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV2.java
index a8e6e36113018fba3aaab267b01ea840148f1620..b3d83e429b8e981220f5f246933e450d71b6dde5 100644
--- a/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV2.java
+++ b/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV2.java
@@ -1,5 +1,7 @@
 package cz.it4i.qcmp.fileformat;
 
+import cz.it4i.qcmp.U16;
+
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -29,7 +31,8 @@ public class QvcHeaderV2 extends QvcHeaderV1 {
 
     @Override
     public boolean validateHeader() {
-        return (magicValue != null && magicValue.equals(MAGIC_VALUE));
+        final boolean v1HeaderValidation = super.validateHeader();
+        return U16.isInRange(huffmanDataSize) && v1HeaderValidation;
     }
 
     @Override