diff --git a/metis_l2_prep_uv.pro b/metis_l2_prep_uv.pro
index 9703fe205bcfcfdab9a6a5fbc839703ebca04823..b5bbe30b3aa6ad60cf88bfc45f38762503b60c72 100644
--- a/metis_l2_prep_uv.pro
+++ b/metis_l2_prep_uv.pro
@@ -189,10 +189,25 @@ pro metis_l2_prep_uv
 
 	; add the extension with the quality matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name'
+	base_header = primary_header
+	sxdelpar, base_header, 'EXTEND'
+	sxdelpar, base_header, 'DATASUM'
+	sxdelpar, base_header, 'CHECKSUM'
+	sxdelpar, base_header, 'COMMENT'
+	sxdelpar, base_header, 'HISTORY'
+	
+	extension_header = base_header
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Pixel quality'
+	fxaddpar, extension_header, 'BUNIT', 'None'
+	fxaddpar, extension_header, 'DATAMIN', min(quality_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(quality_matrix, /nan)
+	fxaddpar, extension_header, 'COMMENT', 'Quality matrix values:'
+	fxaddpar, extension_header, 'COMMENT', '  NaN = saturated or null L0 pixel counts'
+	fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
+	fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
 	if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'UV')
 	fits_add_checksum, extension_header, quality_matrix
 	mwrfits, float(quality_matrix), out_file_name, extension_header, /no_comment, /silent
@@ -201,11 +216,14 @@ pro metis_l2_prep_uv
 
 	; add the extension with the error matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name'
+	extension_header = base_header
 	error_matrix = data * sqrt(error)
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Absolute error'
+	fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
 	if not ref_detector then error_matrix = metis_rectify(error_matrix, 'UV')
 	fits_add_checksum, extension_header, float(error_matrix)
 	mwrfits, float(error_matrix), out_file_name, extension_header, /no_comment, /silent
diff --git a/metis_l2_prep_vl_generic.pro b/metis_l2_prep_vl_generic.pro
index fca9edb5a2ff3dadf04c656142cb741875ba2da8..cd6e83459a0e57291e8b7535e443d6bca916cb6a 100644
--- a/metis_l2_prep_vl_generic.pro
+++ b/metis_l2_prep_vl_generic.pro
@@ -230,10 +230,25 @@ pro metis_l2_prep_vl_generic
 
 	; add the extension with the quality matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name'
+	base_header = primary_header
+	sxdelpar, base_header, 'EXTEND'
+	sxdelpar, base_header, 'DATASUM'
+	sxdelpar, base_header, 'CHECKSUM'
+	sxdelpar, base_header, 'COMMENT'
+	sxdelpar, base_header, 'HISTORY'
+	
+	extension_header = base_header
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Pixel quality'
+	fxaddpar, extension_header, 'BUNIT', 'None'
+	fxaddpar, extension_header, 'DATAMIN', min(quality_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(quality_matrix, /nan)
+	fxaddpar, extension_header, 'COMMENT', 'Quality matrix values:'
+	fxaddpar, extension_header, 'COMMENT', '  NaN = saturated or null L0 pixel counts'
+	fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
+	fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
 	if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
 	fits_add_checksum, extension_header, quality_matrix
 	mwrfits, float(quality_matrix), out_file_name, extension_header, /no_comment, /silent
@@ -242,11 +257,14 @@ pro metis_l2_prep_vl_generic
 
 	; add the extension with the error matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name'
+	extension_header = base_header
 	error_matrix = data * sqrt(error)
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Absolute error'
+	fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
 	if not ref_detector then data = metis_rectify(error_matrix, 'VL')
 	fits_add_checksum, extension_header, float(error_matrix)
 	mwrfits, float(error_matrix), out_file_name, extension_header, /no_comment, /silent
diff --git a/metis_l2_prep_vl_polariz.pro b/metis_l2_prep_vl_polariz.pro
index 9b6c791ce90e0eac23ae0aed0cc35125938dc20e..34f09d67bffa41070a8f6069c7e8c1119a983b7f 100755
--- a/metis_l2_prep_vl_polariz.pro
+++ b/metis_l2_prep_vl_polariz.pro
@@ -403,10 +403,25 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the quality matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name'
+	base_header = primary_pb_header
+	sxdelpar, base_header, 'EXTEND'
+	sxdelpar, base_header, 'DATASUM'
+	sxdelpar, base_header, 'CHECKSUM'
+	sxdelpar, base_header, 'COMMENT'
+	sxdelpar, base_header, 'HISTORY'
+	
+	extension_header = base_header
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Pixel quality'
+	fxaddpar, extension_header, 'BUNIT', 'None'
+	fxaddpar, extension_header, 'DATAMIN', min(quality_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(quality_matrix, /nan)
+	fxaddpar, extension_header, 'COMMENT', 'Quality matrix values:'
+	fxaddpar, extension_header, 'COMMENT', '  NaN = saturated or null L0 pixel counts'
+	fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
+	fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
 	if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
 	fits_add_checksum, extension_header, quality_matrix
 	mwrfits, float(quality_matrix), out_file_name[0], extension_header, /no_comment, /silent
@@ -415,11 +430,14 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the error matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name'
+	extension_header = base_header
 	error_matrix = intarr(header.naxis1, header.naxis2)
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Absolute error'
+	fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
 	if not ref_detector then error_matrix = metis_rectify(error_matrix, 'VL')
 	fits_add_checksum, extension_header, error_matrix
 	mwrfits, float(error_matrix), out_file_name[0], extension_header, /no_comment, /silent
@@ -457,10 +475,25 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the quality matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name'
+	base_header = primary_tb_header
+	sxdelpar, base_header, 'EXTEND'
+	sxdelpar, base_header, 'DATASUM'
+	sxdelpar, base_header, 'CHECKSUM'
+	sxdelpar, base_header, 'COMMENT'
+	sxdelpar, base_header, 'HISTORY'
+	
+	extension_header = base_header
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Pixel quality'
+	fxaddpar, extension_header, 'BUNIT', 'None'
+	fxaddpar, extension_header, 'DATAMIN', min(quality_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(quality_matrix, /nan)
+	fxaddpar, extension_header, 'COMMENT', 'Quality matrix values:'
+	fxaddpar, extension_header, 'COMMENT', '  NaN = saturated or null L0 pixel counts'
+	fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
+	fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
 	if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
 	fits_add_checksum, extension_header, quality_matrix
 	mwrfits, float(quality_matrix), out_file_name[1], extension_header, /no_comment, /silent
@@ -469,11 +502,14 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the error matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name'
+	extension_header = base_header
 	error_matrix = intarr(header.naxis1, header.naxis2)
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Absolute error'
+	fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
 	if not ref_detector then error_matrix = metis_rectify(error_matrix, 'VL')
 	fits_add_checksum, extension_header, error_matrix
 	mwrfits, float(error_matrix), out_file_name[1], extension_header, /no_comment, /silent
@@ -511,10 +547,25 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the quality matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name'
+	base_header = primary_polangle_header
+	sxdelpar, base_header, 'EXTEND'
+	sxdelpar, base_header, 'DATASUM'
+	sxdelpar, base_header, 'CHECKSUM'
+	sxdelpar, base_header, 'COMMENT'
+	sxdelpar, base_header, 'HISTORY'
+	
+	extension_header = base_header
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Pixel quality'
+	fxaddpar, extension_header, 'BUNIT', 'None'
+	fxaddpar, extension_header, 'DATAMIN', min(quality_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(quality_matrix, /nan)
+	fxaddpar, extension_header, 'COMMENT', 'Quality matrix values:'
+	fxaddpar, extension_header, 'COMMENT', '  NaN = saturated or null L0 pixel counts'
+	fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
+	fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
 	if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
 	fits_add_checksum, extension_header, quality_matrix
 	mwrfits, float(quality_matrix), out_file_name[2], extension_header, /no_comment, /silent
@@ -523,11 +574,14 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the error matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name'
+	extension_header = base_header
 	error_matrix = intarr(header.naxis1, header.naxis2)
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Absolute error'
+	fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
 	if not ref_detector then error_matrix = metis_rectify(error_matrix, 'VL')
 	fits_add_checksum, extension_header, error_matrix
 	mwrfits, float(error_matrix), out_file_name[2], extension_header, /no_comment, /silent
@@ -587,15 +641,15 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the stokes q image
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Stokes Q', 'extension name'
+	extension_header = primary_stokes_header
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Stokes Q', 'extension name', before = 'LONGSTRN'
 	fxaddpar, extension_header, 'BTYPE', 'Stokes Q'
 	fxaddpar, extension_header, 'BUNIT', cal_pack.vl_channel.cal_units
 	fxaddpar, extension_header, 'DATAMIN', min(q, /nan)
 	fxaddpar, extension_header, 'DATAMAX', max(q, /nan)
-
+	sxdelpar, extension_header, 'EXTEND'
 	if not ref_detector then q = metis_rectify(q, 'VL')
 	fits_add_checksum, extension_header, q
 	mwrfits, float(q), out_file_name[3], extension_header, /no_comment, /silent
@@ -604,15 +658,15 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the stokes u image
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Stokes U', 'extension name'
+	extension_header = primary_stokes_header
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Stokes U', 'extension name', before = 'LONGSTRN'
 	fxaddpar, extension_header, 'BTYPE', 'Stokes U'
 	fxaddpar, extension_header, 'BUNIT', cal_pack.vl_channel.cal_units
 	fxaddpar, extension_header, 'DATAMIN', min(u, /nan)
 	fxaddpar, extension_header, 'DATAMAX', max(u, /nan)
-
+	sxdelpar, extension_header, 'EXTEND'
 	if not ref_detector then u = metis_rectify(u, 'VL')
 	fits_add_checksum, extension_header, u
 	mwrfits, float(u), out_file_name[3], extension_header, /no_comment, /silent
@@ -621,11 +675,25 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the quality matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name'
-
+	base_header = primary_stokes_header
+	sxdelpar, base_header, 'EXTEND'
+	sxdelpar, base_header, 'DATASUM'
+	sxdelpar, base_header, 'CHECKSUM'
+	sxdelpar, base_header, 'COMMENT'
+	sxdelpar, base_header, 'HISTORY'
+	
+	extension_header = base_header
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Pixel quality'
+	fxaddpar, extension_header, 'BUNIT', 'None'
+	fxaddpar, extension_header, 'DATAMIN', min(quality_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(quality_matrix, /nan)
+	fxaddpar, extension_header, 'COMMENT', 'Quality matrix values:'
+	fxaddpar, extension_header, 'COMMENT', '  NaN = saturated or null L0 pixel counts'
+	fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
+	fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
 	if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
 	fits_add_checksum, extension_header, quality_matrix
 	mwrfits, float(quality_matrix), out_file_name[3], extension_header, /no_comment, /silent
@@ -634,12 +702,14 @@ pro metis_l2_prep_vl_polariz
 
 	; add the extension with the error matrix
 
-	extension_header = !null
-	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count'
-	fxaddpar, extension_header, 'GCOUNT', 1, 'group count'
-	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name'
+	extension_header = base_header
 	error_matrix = intarr(header.naxis1, header.naxis2)
-	
+	fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'extension name', before = 'LONGSTRN'
+	fxaddpar, extension_header, 'BTYPE', 'Absolute error'
+	fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
+	fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
 	if not ref_detector then error_matrix = metis_rectify(error_matrix, 'VL')
 	fits_add_checksum, extension_header, error_matrix
 	mwrfits, float(error_matrix), out_file_name[3], extension_header, /no_comment, /silent