diff --git a/fix_fits_header.pro b/fix_fits_header.pro
index 60503b4788d5eba08cfe40f716f822c48c3642a2..973ecaaca075e948837fc32c66cdaad3b566f9f9 100644
--- a/fix_fits_header.pro
+++ b/fix_fits_header.pro
@@ -1,12 +1,13 @@
 pro fix_fits_header, filename
     fits_info, filename, n_ext = n_ext, /silent
     for ext = 0, n_ext do begin
-        data = readfits(filename, header, exten_no = ext, /silent)
+        data = readfits(filename, header, exten_no = ext, /noscale, /silent)
         for k = 0, n_elements(header) - 1 do begin
             while header[k].matches('\/  +') do begin
                 header[k] = header[k].replace('/  ', '/ ')
             endwhile
         endfor
+        fits_add_checksum, header, data
         modfits, filename, 0, header, exten_no = ext
     endfor
 end
\ No newline at end of file
diff --git a/metis_l2_prep_uv.pro b/metis_l2_prep_uv.pro
index 40b1a9b66fc0391fb3ef7f6d9ede11184cf6560c..93b48596cad2a10e88b93f43f52060d1984d0280 100644
--- a/metis_l2_prep_uv.pro
+++ b/metis_l2_prep_uv.pro
@@ -121,6 +121,14 @@ pro metis_l2_prep_uv
         end
     endcase
 
+    ; make rotations and compute absolute error
+
+    if not ref_detector then data = metis_rectify(data, 'UV')
+    if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'UV')
+    if not ref_detector then error = metis_rectify(error, 'UV')
+
+    error_matrix = data * sqrt(error)
+
     ; definitions for the primary header
     ; version of the fits file
 
@@ -145,6 +153,8 @@ pro metis_l2_prep_uv
     fxaddpar, primary_header, 'VERS_SW', input.sw_version
     fxaddpar, primary_header, 'VERS_CAL', cal_pack.version
     fxaddpar, primary_header, 'VERSION', version
+    fxaddpar, primary_header, 'OBJECT', 'Sun'
+    fxaddpar, primary_header, 'TARGET', 'Corona'
     fxaddpar, primary_header, 'BTYPE', btype
     fxaddpar, primary_header, 'BUNIT', bunit
     fxaddpar, primary_header, 'DATAMIN', min(data, /nan)
@@ -197,20 +207,19 @@ pro metis_l2_prep_uv
         fxaddpar, primary_header, 'HISTORY', history[k]
     fxaddpar, primary_header, 'HISTORY', 'L2 FITS file created on ' + date
 
-    if not ref_detector then data = metis_rectify(data, 'UV')
+    ; write the fits file
+
     fits_add_checksum, primary_header, float(data)
     mwrfits, float(data), out_file_name, primary_header, /no_comment, /create, /silent
 
     journal, 'Fits file created:'
     journal, '  file name = ' + file_basename(out_file_name)
 
-    ; add the extension with the quality matrix
+    ; quality matrix
 
     base_header = primary_header
     sxdelpar, base_header, 'SIMPLE'
     sxdelpar, base_header, 'EXTEND'
-    sxdelpar, base_header, 'DATASUM'
-    sxdelpar, base_header, 'CHECKSUM'
     sxdelpar, base_header, 'COMMENT'
     sxdelpar, base_header, 'HISTORY'
 
@@ -227,16 +236,16 @@ pro metis_l2_prep_uv
     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')
+
+    ; add the extension to the fits file
+
     fits_add_checksum, extension_header, float(quality_matrix)
     mwrfits, float(quality_matrix), out_file_name, extension_header, /no_comment, /silent
 
     journal, 'Quality-matrix extension correctly added.'
 
-    ; add the extension with the error matrix
+    ; error matrix
 
-    if not ref_detector then error = metis_rectify(error, 'UV')
-    error_matrix = data * sqrt(error)
     extension_header = base_header
     fxaddpar, extension_header, 'XTENSION', 'IMAGE', 'image extension', before = 'BITPIX'
     fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
@@ -246,6 +255,8 @@ pro metis_l2_prep_uv
     fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
     fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
 
+    ; add the extension to the fits file
+
     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 70c9f5a8107180e46fa64d83b5f4030f8e833b68..2f95adda153e53a83cfb6dce1fede08e23abe0fe 100644
--- a/metis_l2_prep_vl_generic.pro
+++ b/metis_l2_prep_vl_generic.pro
@@ -137,6 +137,14 @@ pro metis_l2_prep_vl_generic
         end
     endcase
 
+    ; make rotations and compute absolute error
+
+    if not ref_detector then data = metis_rectify(data, 'VL')
+    if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
+    if not ref_detector then error = metis_rectify(error, 'VL')
+
+    error_matrix = data * sqrt(error)
+
     ; definitions for the primary header
     ; version of the fits file
 
@@ -160,6 +168,8 @@ pro metis_l2_prep_vl_generic
     fxaddpar, primary_header, 'VERS_SW', input.sw_version
     fxaddpar, primary_header, 'VERS_CAL', cal_pack.version
     fxaddpar, primary_header, 'VERSION', version
+    fxaddpar, primary_header, 'OBJECT', 'Sun'
+    fxaddpar, primary_header, 'TARGET', 'Corona'
     fxaddpar, primary_header, 'BTYPE', btype
     fxaddpar, primary_header, 'BUNIT', bunit
     fxaddpar, primary_header, 'DATAMIN', min(data, /nan)
@@ -232,22 +242,19 @@ pro metis_l2_prep_vl_generic
         fxaddpar, primary_header, 'HISTORY', history[k]
     fxaddpar, primary_header, 'HISTORY', 'L2 FITS file created on ' + date
 
-    ; add checksum and datasum to the fits header
+    ; write the fits file
 
-    if not ref_detector then data = metis_rectify(data, 'VL')
     fits_add_checksum, primary_header, float(data)
     mwrfits, float(data), out_file_name, primary_header, /no_comment, /create, /silent
 
     journal, 'Fits file created:'
     journal, '  file name = ' + file_basename(out_file_name)
 
-    ; add the extension with the quality matrix
+    ; quality matrix
 
     base_header = primary_header
     sxdelpar, base_header, 'SIMPLE'
     sxdelpar, base_header, 'EXTEND'
-    sxdelpar, base_header, 'DATASUM'
-    sxdelpar, base_header, 'CHECKSUM'
     sxdelpar, base_header, 'COMMENT'
     sxdelpar, base_header, 'HISTORY'
 
@@ -264,16 +271,16 @@ pro metis_l2_prep_vl_generic
     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')
+
+    ; add the extension to the fits file
+
     fits_add_checksum, extension_header, float(quality_matrix)
     mwrfits, float(quality_matrix), out_file_name, extension_header, /no_comment, /silent
 
     journal, 'Quality-matrix extension correctly added.'
 
-    ; add the extension with the error matrix
+    ; error matrix
 
-    if not ref_detector then error = metis_rectify(error, 'VL')
-    error_matrix = data * sqrt(error)
     extension_header = base_header
     fxaddpar, extension_header, 'XTENSION', 'IMAGE', 'image extension', before = 'BITPIX'
     fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
@@ -282,6 +289,9 @@ pro metis_l2_prep_vl_generic
     fxaddpar, extension_header, 'BTYPE', 'Absolute error'
     fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
     fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
+
+    ; add the extension to the fits file
+
     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 2cad5819ca6b75f9fc7552384a188d1dfadd5883..692044fdda897cfab3fce596bd962f5f6973ec84 100755
--- a/metis_l2_prep_vl_polariz.pro
+++ b/metis_l2_prep_vl_polariz.pro
@@ -72,12 +72,12 @@ pro metis_l2_prep_vl_polariz
 
         header = fits_hdr2struct(primary_header)
 
-        ; ====================================
+        ; ======================================================================
         ; for old l1 data
         ; image = image * header.nbin * header.ndit
         ; header.xposure = header.dit/1000. * header.ndit
         ; header.nsumexp = header.ndit
-        ; ====================================
+        ; ======================================================================
 
         ; check data type
 
@@ -130,14 +130,14 @@ pro metis_l2_prep_vl_polariz
 
         image_subdark = metis_dark_vlda(image, header, error = image_error, quality_matrix = image_quality_matrix, cal_pack, history = tb_history)
 
-        ; ====================================
+        ; ======================================================================
         ; for data already subtracted of dark
         ; file = file_basename(header.parent, '.fits') + '_subdark.fits'
         ; image_subdark = mrdfits('input/subdark/' + file, 0, /silent)
         ; image_subdark = rebin(image_subdark, header.naxis1, header.naxis2) * header.nbin
         ; image_subdark = image_subdark * header.ndit
         ; tb_history = ['Dark correction: ', '  ' + file]
-        ; ====================================
+        ; ======================================================================
 
         data_subdark = [[[data_subdark]], [[image_subdark]]]
         abs_error = [[[abs_error]], [[image_subdark * sqrt(image_error)]]]
@@ -285,10 +285,9 @@ pro metis_l2_prep_vl_polariz
 
     tb_image = i
     tb_error = (i_abs_error / i) ^ 2
-    tb_quality_matrix = quality_matrix
-    tb_image = metis_flat_field(tb_image, header, error = tb_error, quality_matrix = tb_quality_matrix, cal_pack, history = tb_history)
-    tb_image = metis_vignetting(tb_image, header, error = tb_error, quality_matrix = tb_quality_matrix, cal_pack, history = tb_history)
-    tb_image = metis_rad_cal(tb_image, header, error = tb_error, quality_matrix = tb_quality_matrix, cal_pack, /polarimetric, history = tb_history)
+    tb_image = metis_flat_field(tb_image, header, error = tb_error, quality_matrix = quality_matrix, cal_pack, history = tb_history)
+    tb_image = metis_vignetting(tb_image, header, error = tb_error, quality_matrix = quality_matrix, cal_pack, history = tb_history)
+    tb_image = metis_rad_cal(tb_image, header, error = tb_error, quality_matrix = quality_matrix, cal_pack, history = tb_history, /polarimetric)
 
     ; compute the pb from the stokes q and u and apply other calibrations
 
@@ -296,25 +295,30 @@ pro metis_l2_prep_vl_polariz
 
     pb_image = sqrt(q ^ 2 + u ^ 2)
     pb_error = (q ^ 2 * q_abs_error ^ 2 + u ^ 2 * u_abs_error ^ 2) / pb_image ^ 4
-    pb_quality_matrix = quality_matrix
-    pb_image = metis_flat_field(pb_image, header, error = pb_error, quality_matrix = pb_quality_matrix, cal_pack, history = pb_history)
-    pb_image = metis_vignetting(pb_image, header, error = pb_error, quality_matrix = pb_quality_matrix, cal_pack, history = pb_history)
-    pb_image = metis_rad_cal(pb_image, header, error = pb_error, quality_matrix = pb_quality_matrix, cal_pack, /polarimetric, history = pb_history)
+    pb_image = metis_flat_field(pb_image, header, error = pb_error, cal_pack, history = pb_history)
+    pb_image = metis_vignetting(pb_image, header, error = pb_error, cal_pack, history = pb_history)
+    pb_image = metis_rad_cal(pb_image, header, error = pb_error, cal_pack, history = pb_history, /polarimetric)
 
-    ; ====================================
+    ; ==========================================================================
     ; for simple radiometric calibration
     ; cal_pack.vl_channel.cal_units = 'DN/s'
-    ; ====================================
+    ; ==========================================================================
 
     ; compute the polarization angle from the stokes q and u
 
     pol_angle = 0.5d0 * atan(stokes[*, *, 2], stokes[*, *, 1])
     pol_angle_error = (q ^ 2 * u_abs_error ^ 2 + u ^ 2 * q_abs_error ^ 2) / (2d0 * pb_image ^ 4) / pol_angle ^ 2
 
+    ; convert pol. angle to degrees
+
     pol_angle = pol_angle * !radeg
 
     journal, 'Polarization angle correctly computed.'
 
+    ; rotate the quality matrix if necessary
+
+    if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
+
     ; definitions for the primary header
     ; version of the fits file
 
@@ -332,6 +336,8 @@ pro metis_l2_prep_vl_polariz
     fxaddpar, primary_header, 'VERS_SW', input.sw_version
     fxaddpar, primary_header, 'VERS_CAL', cal_pack.version
     fxaddpar, primary_header, 'VERSION', version
+    fxaddpar, primary_header, 'OBJECT', 'Sun'
+    fxaddpar, primary_header, 'TARGET', 'Corona'
     fxaddpar, primary_header, 'DATE', date, 'date and time of FITS file creation'
     fxaddpar, primary_header, 'DATE-BEG', header.date_beg, 'start time of observation'
     fxaddpar, primary_header, 'DATE-OBS', header.date_obs, 'same as DATE-BEG'
@@ -409,6 +415,17 @@ pro metis_l2_prep_vl_polariz
 
     out_file_name = strarr(4)
 
+    ; ==========================================================================
+    ; polarized brightness
+    ; ==========================================================================
+
+    ; make rotations and compute absolute error
+
+    if not ref_detector then pb_image = metis_rectify(pb_image, 'VL')
+    if not ref_detector then pb_error = metis_rectify(pb_error, 'VL')
+
+    pb_error_matrix = pb_image * 0. ; pb_image * sqrt(pb_error)
+
     ; keywords specific for polarized brightness images
 
     primary_pb_header = primary_header
@@ -429,22 +446,19 @@ pro metis_l2_prep_vl_polariz
     for k = 0, n_elements(pb_history) - 1 do fxaddpar, primary_pb_header, 'HISTORY', pb_history[k]
     fxaddpar, primary_pb_header, 'HISTORY', 'L2 FITS file created on ' + date
 
-    ; add checksum and datasum to the fits header
+    ; write the fits file
 
-    if not ref_detector then pb_image = metis_rectify(pb_image, 'VL')
     fits_add_checksum, primary_pb_header, float(pb_image)
     mwrfits, float(pb_image), out_file_name[0], primary_pb_header, /no_comment, /create, /silent
 
     journal, 'Polarized-brightness FITS file created:'
     journal, '  file name = ' + file_basename(out_file_name[0])
 
-    ; add the extension with the quality matrix
+    ; quality matrix
 
     base_header = primary_pb_header
     sxdelpar, base_header, 'SIMPLE'
     sxdelpar, base_header, 'EXTEND'
-    sxdelpar, base_header, 'DATASUM'
-    sxdelpar, base_header, 'CHECKSUM'
     sxdelpar, base_header, 'COMMENT'
     sxdelpar, base_header, 'HISTORY'
 
@@ -461,26 +475,29 @@ pro metis_l2_prep_vl_polariz
     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 pb_quality_matrix = metis_rectify(pb_quality_matrix, 'VL')
-    fits_add_checksum, extension_header, float(pb_quality_matrix)
-    mwrfits, float(pb_quality_matrix), out_file_name[0], extension_header, /no_comment, /silent
+
+    ; add the extension to the fits file
+
+    fits_add_checksum, extension_header, float(quality_matrix)
+    mwrfits, float(quality_matrix), out_file_name[0], extension_header, /no_comment, /silent
 
     journal, 'Quality-matrix extension correctly added.'
 
-    ; add the extension with the error matrix
+    ; error matrix
 
-    if not ref_detector then pb_error = metis_rectify(pb_error, 'VL')
-    error_matrix = pb_image * 0. ; pb_image * sqrt(pb_error)
     extension_header = base_header
     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', '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)
-    fits_add_checksum, extension_header, float(error_matrix)
-    mwrfits, float(error_matrix), out_file_name[0], extension_header, /no_comment, /silent
+    fxaddpar, extension_header, 'DATAMIN', min(pb_error_matrix, /nan)
+    fxaddpar, extension_header, 'DATAMAX', max(pb_error_matrix, /nan)
+
+    ; add the extension to the fits file
+
+    fits_add_checksum, extension_header, float(pb_error_matrix)
+    mwrfits, float(pb_error_matrix), out_file_name[0], extension_header, /no_comment, /silent
 
     journal, 'Error-matrix extension correctly added.'
 
@@ -488,6 +505,17 @@ pro metis_l2_prep_vl_polariz
 
     fix_fits_header, out_file_name[0]
 
+    ; ==========================================================================
+    ; total brightness
+    ; ==========================================================================
+
+    ; make rotations and compute absolute error
+
+    if not ref_detector then tb_image = metis_rectify(tb_image, 'VL')
+    if not ref_detector then tb_error = metis_rectify(tb_error, 'VL')
+
+    tb_error_matrix = tb_image * 0. ; tb_image * sqrt(tb_error)
+
     ; keywords specific for total brightness images
 
     primary_tb_header = primary_header
@@ -508,22 +536,19 @@ pro metis_l2_prep_vl_polariz
     for k = 0, n_elements(tb_history) - 1 do fxaddpar, primary_tb_header, 'HISTORY', tb_history[k]
     fxaddpar, primary_tb_header, 'HISTORY', 'L2 FITS file created on ' + date
 
-    ; add checksum and datasum to the fits header
+    ; write the fits file
 
-    if not ref_detector then tb_image = metis_rectify(tb_image, 'VL')
     fits_add_checksum, primary_tb_header, float(tb_image)
     mwrfits, float(tb_image), out_file_name[1], primary_tb_header, /no_comment, /create, /silent
 
     journal, 'Total-brightness FITS file created:'
     journal, '  file name = ' + file_basename(out_file_name[1])
 
-    ; add the extension with the quality matrix
+    ; quality matrix
 
     base_header = primary_tb_header
     sxdelpar, base_header, 'SIMPLE'
     sxdelpar, base_header, 'EXTEND'
-    sxdelpar, base_header, 'DATASUM'
-    sxdelpar, base_header, 'CHECKSUM'
     sxdelpar, base_header, 'COMMENT'
     sxdelpar, base_header, 'HISTORY'
 
@@ -534,32 +559,35 @@ pro metis_l2_prep_vl_polariz
     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(tb_quality_matrix, /nan)
-    fxaddpar, extension_header, 'DATAMAX', max(tb_quality_matrix, /nan)
+    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 tb_quality_matrix = metis_rectify(tb_quality_matrix, 'VL')
-    fits_add_checksum, extension_header, float(tb_quality_matrix)
-    mwrfits, float(tb_quality_matrix), out_file_name[1], extension_header, /no_comment, /silent
+
+    ; add the extension to the fits file
+
+    fits_add_checksum, extension_header, float(quality_matrix)
+    mwrfits, float(quality_matrix), out_file_name[1], extension_header, /no_comment, /silent
 
     journal, 'Quality-matrix extension correctly added.'
 
-    ; add the extension with the error matrix
+    ; error matrix
 
-    if not ref_detector then tb_error = metis_rectify(tb_error, 'VL')
-    error_matrix = tb_image * 0. ; tb_image * sqrt(tb_error)
     extension_header = base_header
     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', '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)
-    fits_add_checksum, extension_header, float(error_matrix)
-    mwrfits, float(error_matrix), out_file_name[1], extension_header, /no_comment, /silent
+    fxaddpar, extension_header, 'DATAMIN', min(tb_error_matrix, /nan)
+    fxaddpar, extension_header, 'DATAMAX', max(tb_error_matrix, /nan)
+
+    ; add the extension to the fits file
+
+    fits_add_checksum, extension_header, float(tb_error_matrix)
+    mwrfits, float(tb_error_matrix), out_file_name[1], extension_header, /no_comment, /silent
 
     journal, 'Error-matrix extension correctly added.'
 
@@ -567,6 +595,17 @@ pro metis_l2_prep_vl_polariz
 
     fix_fits_header, out_file_name[1]
 
+    ; ==========================================================================
+    ; polarization angle
+    ; ==========================================================================
+
+    ; make rotations and compute absolute error
+
+    if not ref_detector then pol_angle = metis_rectify(pol_angle, 'VL')
+    if not ref_detector then pol_angle_error = metis_rectify(pol_angle_error, 'VL')
+
+    pol_angle_error_matrix = pol_angle * 0. ; pol_angle * sqrt(pol_angle_error)
+
     ; keywords specific for polarization-angle images
 
     primary_polangle_header = primary_header
@@ -587,22 +626,19 @@ pro metis_l2_prep_vl_polariz
     for k = 0, n_elements(pb_history) - 1 do fxaddpar, primary_polangle_header, 'HISTORY', pb_history[k]
     fxaddpar, primary_polangle_header, 'HISTORY', 'L2 FITS file created on ' + date
 
-    ; add checksum and datasum to the fits header
+    ; write the fits file
 
-    if not ref_detector then pol_angle = metis_rectify(pol_angle, 'VL')
     fits_add_checksum, primary_polangle_header, float(pol_angle)
     mwrfits, float(pol_angle), out_file_name[2], primary_polangle_header, /no_comment, /create, /silent
 
     journal, 'Polarization-angle FITS file created:'
     journal, '  file name = ' + file_basename(out_file_name[2])
 
-    ; add the extension with the quality matrix
+    ; quality matrix
 
     base_header = primary_polangle_header
     sxdelpar, base_header, 'SIMPLE'
     sxdelpar, base_header, 'EXTEND'
-    sxdelpar, base_header, 'DATASUM'
-    sxdelpar, base_header, 'CHECKSUM'
     sxdelpar, base_header, 'COMMENT'
     sxdelpar, base_header, 'HISTORY'
 
@@ -619,26 +655,29 @@ pro metis_l2_prep_vl_polariz
     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 pol_angle_quality_matrix = metis_rectify(quality_matrix, 'VL')
-    fits_add_checksum, extension_header, float(pol_angle_quality_matrix)
-    mwrfits, float(pol_angle_quality_matrix), out_file_name[2], extension_header, /no_comment, /silent
+
+    ; add the extension to the fits file
+
+    fits_add_checksum, extension_header, float(quality_matrix)
+    mwrfits, float(quality_matrix), out_file_name[2], extension_header, /no_comment, /silent
 
     journal, 'Quality-matrix extension correctly added.'
 
-    ; add the extension with the error matrix
+    ; error matrix
 
-    if not ref_detector then pol_angle_error = metis_rectify(pol_angle_error, 'VL')
-    error_matrix = pol_angle * 0. ; pol_angle * sqrt(pol_angle_error)
     extension_header = base_header
     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', '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)
-    fits_add_checksum, extension_header, float(error_matrix)
-    mwrfits, float(error_matrix), out_file_name[2], extension_header, /no_comment, /silent
+    fxaddpar, extension_header, 'DATAMIN', min(pol_angle_error_matrix, /nan)
+    fxaddpar, extension_header, 'DATAMAX', max(pol_angle_error_matrix, /nan)
+
+    ; add the extension to the fits file
+
+    fits_add_checksum, extension_header, float(pol_angle_error_matrix)
+    mwrfits, float(pol_angle_error_matrix), out_file_name[2], extension_header, /no_comment, /silent
 
     journal, 'Error-matrix extension correctly added.'
 
@@ -646,7 +685,9 @@ pro metis_l2_prep_vl_polariz
 
     fix_fits_header, out_file_name[2]
 
-    ; management of stokes images
+    ; ==========================================================================
+    ; stokes parameters
+    ; ==========================================================================
 
     journal, 'Calibrating Stokes parameter I...'
 
@@ -669,6 +710,12 @@ pro metis_l2_prep_vl_polariz
     u = metis_vignetting(u, header, cal_pack)
     u = metis_rad_cal(u, header, cal_pack, /polarimetric)
 
+    ; make rotations
+
+    if not ref_detector then i = metis_rectify(i, 'VL')
+    if not ref_detector then q = metis_rectify(q, 'VL')
+    if not ref_detector then u = metis_rectify(u, 'VL')
+
     ; keywords specific for stokes images
 
     primary_stokes_header = primary_header
@@ -689,8 +736,8 @@ pro metis_l2_prep_vl_polariz
     for k = 0, n_elements(tb_history) - 1 do fxaddpar, primary_stokes_header, 'HISTORY', tb_history[k]
     fxaddpar, primary_stokes_header, 'HISTORY', 'L2 FITS file created on ' + date
 
-    ; add checksum and datasum to the fits header
-    if not ref_detector then i = metis_rectify(i, 'VL')
+    ; write the fits file
+
     fits_add_checksum, primary_stokes_header, float(i)
     mwrfits, float(i), out_file_name[3], primary_stokes_header, /no_comment, /create, /silent
 
@@ -702,8 +749,6 @@ pro metis_l2_prep_vl_polariz
     base_header = primary_stokes_header
     sxdelpar, base_header, 'SIMPLE'
     sxdelpar, base_header, 'EXTEND'
-    sxdelpar, base_header, 'DATASUM'
-    sxdelpar, base_header, 'CHECKSUM'
 
     extension_header = base_header
     fxaddpar, extension_header, 'XTENSION', 'IMAGE', 'image extension', before = 'BITPIX'
@@ -714,8 +759,9 @@ pro metis_l2_prep_vl_polariz
     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')
+
+    ; add the extension to the fits file
+
     fits_add_checksum, extension_header, float(q)
     mwrfits, float(q), out_file_name[3], extension_header, /no_comment, /silent
 
@@ -732,8 +778,9 @@ pro metis_l2_prep_vl_polariz
     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')
+
+    ; add the extension to the fits file
+
     fits_add_checksum, extension_header, float(u)
     mwrfits, float(u), out_file_name[3], extension_header, /no_comment, /silent
 
@@ -742,7 +789,7 @@ pro metis_l2_prep_vl_polariz
     sxdelpar, base_header, 'COMMENT'
     sxdelpar, base_header, 'HISTORY'
 
-    ; add the extension with the quality matrix
+    ; quality matrix
 
     extension_header = base_header
     fxaddpar, extension_header, 'XTENSION', 'IMAGE', 'image extension', before = 'BITPIX'
@@ -757,26 +804,29 @@ pro metis_l2_prep_vl_polariz
     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')
+
+    ; add the extension to the fits file
+
     fits_add_checksum, extension_header, float(quality_matrix)
     mwrfits, float(quality_matrix), out_file_name[3], extension_header, /no_comment, /silent
 
     journal, 'Quality-matrix extension correctly added.'
 
-    ; add the extension with the error matrix
+    ; error matrix
 
-    if not ref_detector then error_matrix = metis_rectify(error_matrix, 'VL')
-    error_matrix = tb_image * 0. ; tb_image * sqrt(tb_error)
     extension_header = base_header
     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', '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)
-    fits_add_checksum, extension_header, float(error_matrix)
-    mwrfits, float(error_matrix), out_file_name[3], extension_header, /no_comment, /silent
+    fxaddpar, extension_header, 'DATAMIN', min(tb_error_matrix, /nan)
+    fxaddpar, extension_header, 'DATAMAX', max(tb_error_matrix, /nan)
+
+    ; add the extension to the fits file
+
+    fits_add_checksum, extension_header, float(tb_error_matrix)
+    mwrfits, float(tb_error_matrix), out_file_name[3], extension_header, /no_comment, /silent
 
     journal, 'Error-matrix extension correctly added.'