diff --git a/metis_l1_prep.pro b/metis_l1_prep.pro
index 7d03b4e671fa3d0993769b6837366c1e0978ed1d..2b0de25b6eb46d6ebecf09f26dc023523974ff53 100755
--- a/metis_l1_prep.pro
+++ b/metis_l1_prep.pro
@@ -533,35 +533,87 @@ pro metis_l1_prep
     journal, 'Fits file created:'
     journal, '  file name = ' + out_file_name
 
+    base_header = primary_header
+    sxdelpar, base_header, 'SIMPLE'
+    sxdelpar, base_header, 'EXTEND'
+    sxdelpar, base_header, 'COMMENT'
+    sxdelpar, base_header, 'HISTORY'
+
     ; if applicable, save the data binary-table extension as it is
 
     if isa(data_bin_table) then begin
-        if datatype lt 9 then fits_add_checksum, data_extension_header, data_bin_table
-        mwrfits, data_bin_table, out_file_name, data_extension_header, /no_comment, /silent
+        extension_header = base_header
+        sxdelpar, extension_header, 'BSCALE'
+        sxdelpar, extension_header, 'BZERO'
+        sxdelpar, extension_header, 'BUNIT'
+        sxdelpar, extension_header, 'BTYPE'
+        sxdelpar, extension_header, 'BLANK'
+        sxdelpar, extension_header, 'DATAMIN'
+        sxdelpar, extension_header, 'DATAMAX'
+        fxaddpar, extension_header, 'XTENSION', 'BINTABLE', 'binary table extension', before = 'BITPIX'
+        fxaddpar, extension_header, 'NAXIS', 2, 'number of data axes'
+        fxaddpar, extension_header, 'NAXIS1', 0, 'length of dimension 1', after = 'NAXIS'
+        fxaddpar, extension_header, 'NAXIS2', 0, 'length of dimension 2', after = 'NAXIS1'
+        fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+        fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+        fxaddpar, extension_header, 'TFIELDS', 0, 'number of columns in table', before = 'LONGSTRN'
+        fxaddpar, extension_header, 'EXTNAME', fxpar(data_extension_header, 'EXTNAME'), 'extension name', before = 'LONGSTRN'
+
+        ; add the extension to the fits file
+
+        mwrfits, data_bin_table, out_file_name, extension_header, /no_comment, /silent
     endif
 
     ; save the quality matrix
 
     if datatype le 6 and isa(quality_matrix) then begin
-        quality_matrix_header = !null
-        fxaddpar, quality_matrix_header, 'PCOUNT', 0, 'parameter count'
-        fxaddpar, quality_matrix_header, 'GCOUNT', 1, 'group count'
-        fxaddpar, quality_matrix_header, 'EXTNAME', 'Quality matrix', 'extension name'
-        fits_add_checksum, quality_matrix_header, quality_matrix
-        mwrfits, quality_matrix, out_file_name, quality_matrix_header, /no_comment, /silent
+        extension_header = base_header
+        sxdelpar, extension_header, 'BLANK'
+        fxaddpar, extension_header, 'XTENSION', 'IMAGE', 'image extension', before = 'BITPIX'
+        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'
+
+        ; add the extension to the fits file
+
+        fits_add_checksum, extension_header, quality_matrix
+        mwrfits, quality_matrix, out_file_name, extension_header, /no_comment, /silent
 
         journal, 'Quality-matrix extension correctly added.'
     endif
 
     ; build the telemetry extension
 
-    hk_extension_header = !null
-    fxaddpar, hk_extension_header, 'PCOUNT', 0, 'parameter count'
-    fxaddpar, hk_extension_header, 'GCOUNT', 1, 'group count'
-    fxaddpar, hk_extension_header, 'EXTNAME', 'House-keeping', 'extension name'
-
     hk_bin_table = make_bin_table(hk_table)
-    mwrfits, hk_bin_table, out_file_name, hk_extension_header, /no_comment, /silent
+
+    extension_header = base_header
+    sxdelpar, extension_header, 'BSCALE'
+    sxdelpar, extension_header, 'BZERO'
+    sxdelpar, extension_header, 'BUNIT'
+    sxdelpar, extension_header, 'BTYPE'
+    sxdelpar, extension_header, 'BLANK'
+    sxdelpar, extension_header, 'DATAMIN'
+    sxdelpar, extension_header, 'DATAMAX'
+    fxaddpar, extension_header, 'XTENSION', 'BINTABLE', 'binary table extension', before = 'BITPIX'
+    fxaddpar, extension_header, 'NAXIS', 2, 'number of data axes'
+    fxaddpar, extension_header, 'NAXIS1', 0, 'length of dimension 1', after = 'NAXIS'
+    fxaddpar, extension_header, 'NAXIS2', 0, 'length of dimension 2', after = 'NAXIS1'
+    fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
+    fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
+    fxaddpar, extension_header, 'TFIELDS', 0, 'number of columns in table', before = 'LONGSTRN'
+    fxaddpar, extension_header, 'EXTNAME', 'House-keeping', 'extension name', before = 'LONGSTRN'
+
+    ; add the extension to the fits file
+
+    mwrfits, hk_bin_table, out_file_name, extension_header, /no_comment, /silent
 
     journal, 'HK binary-table extension correctly added.'