diff --git a/metis_l2_prep_vl_polariz.pro b/metis_l2_prep_vl_polariz.pro
index 692044fdda897cfab3fce596bd962f5f6973ec84..8ebb7b863b1b2c21e6470f41fcb1f55ebcda1bb5 100755
--- a/metis_l2_prep_vl_polariz.pro
+++ b/metis_l2_prep_vl_polariz.pro
@@ -43,6 +43,7 @@ pro metis_l2_prep_vl_polariz
     ; calibration block
 
     data = !null
+    history = !null
     abs_error = !null
     data_header = !null
     data_subdark = !null
@@ -52,25 +53,28 @@ pro metis_l2_prep_vl_polariz
     for k = 0, 3 do begin
         ; read the input image
 
-        image = mrdfits(input.file_name[k], 0, primary_header, /silent)
+        image = mrdfits(input.file_name[k], 0, header, /silent)
 
-        ; patch to fix the lack of the keyword SEQ_NUM
+        ; fix the lack of the keyword SEQ_NUM
 
-        seq_num = fxpar(primary_header, 'SEQ_NUM', missing = 0)
+        seq_num = fxpar(header, 'SEQ_NUM', missing = 0)
         if seq_num eq 0 then begin
-            obj_cnt = fxpar(primary_header, 'OBJ_CNT')
-            n_pol = fxpar(primary_header, 'N_POL', missing = 4)
+            obj_cnt = fxpar(header, 'OBJ_CNT')
+            n_pol = fxpar(header, 'N_POL', missing = 4)
             seq_num = ((obj_cnt - 1) / n_pol + 1)
-            fxaddpar, primary_header, 'SEQ_NUM', seq_num, before = 'POL_ID'
+            fxaddpar, header, 'SEQ_NUM', seq_num, before = 'POL_ID'
         endif
 
-        if k eq 0 then comment = fxpar(primary_header, 'COMMENT') else begin
-            sxdelpar, primary_header, 'COMMENT'
-            foreach line, comment do $
-                fxaddpar, primary_header, 'COMMENT', line
-        endelse
+        if k eq 0 then primary_header = header
 
-        header = fits_hdr2struct(primary_header)
+        ; clean header from comments and history
+
+        sxdelpar, header, 'COMMENT'
+        sxdelpar, header, 'HISTORY'
+
+        ; convert header to idl structure
+
+        header = fits_hdr2struct(header)
 
         ; ======================================================================
         ; for old l1 data
@@ -126,9 +130,7 @@ pro metis_l2_prep_vl_polariz
 
         ; apply dark correction to compute stokes i and total brightness
 
-        tb_history = !null
-
-        image_subdark = metis_dark_vlda(image, header, error = image_error, quality_matrix = image_quality_matrix, cal_pack, history = tb_history)
+        image_subdark = metis_dark_vlda(image, header, error = image_error, quality_matrix = image_quality_matrix, cal_pack, history = k eq 0 ? history : !null)
 
         ; ======================================================================
         ; for data already subtracted of dark
@@ -269,9 +271,6 @@ pro metis_l2_prep_vl_polariz
 
     demod_history = 'Demodulation performed for angles ' + string(angles, format = '(3(f0.1, ", "), f0.1)') + ' deg'
 
-    tb_history = [tb_history, demod_history]
-    pb_history = demod_history
-
     i = reform(stokes_subdark[*, *, 0])
     i_abs_error = reform(stokes_abs_error[*, *, 0])
     q = reform(stokes[*, *, 1])
@@ -281,13 +280,15 @@ pro metis_l2_prep_vl_polariz
 
     ; compute the tb from the dark-subtracted stokes i and apply other calibrations
 
+    cal_history = !null
+
     journal, 'Calibrating total brightness...'
 
     tb_image = i
     tb_error = (i_abs_error / i) ^ 2
-    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)
+    tb_image = metis_flat_field(tb_image, header, error = tb_error, quality_matrix = quality_matrix, cal_pack, history = cal_history)
+    tb_image = metis_vignetting(tb_image, header, error = tb_error, quality_matrix = quality_matrix, cal_pack, history = cal_history)
+    tb_image = metis_rad_cal(tb_image, header, error = tb_error, quality_matrix = quality_matrix, cal_pack, history = cal_history, /polarimetric)
 
     ; compute the pb from the stokes q and u and apply other calibrations
 
@@ -295,9 +296,9 @@ 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_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)
+    pb_image = metis_flat_field(pb_image, header, error = pb_error, cal_pack)
+    pb_image = metis_vignetting(pb_image, header, error = pb_error, cal_pack)
+    pb_image = metis_rad_cal(pb_image, header, error = pb_error, cal_pack, /polarimetric)
 
     ; ==========================================================================
     ; for simple radiometric calibration
@@ -372,21 +373,18 @@ pro metis_l2_prep_vl_polariz
     wcs = metis_wcs(header, cal_pack, ref_detector = ref_detector)
     foreach element, wcs do fxaddpar, primary_header, element.name, element.value, element.comment, before = 'DATATYPE'
 
+    wcs_history = ['Update WCS and solar ephemeris:', '  SKD version = ' + kernel_version]
+
     ; append solar ephemeris keywords
 
     ephemeris = solo_get_ephemeris(header, cal_pack)
     foreach element, ephemeris do fxaddpar, primary_header, element.name, element.value, element.comment, before = 'DATATYPE'
 
-    ; update the comment and history keywords
+    ; update the comment keyword
 
     fxaddpar, primary_header, 'COMMENT', 'Uncertainty matrix in the FITS extension is preliminary.'
     fxaddpar, primary_header, 'COMMENT', 'Rotate CROTA degrees counter-clockwise to have Solar North up.'
 
-    history = ['Update WCS and solar ephemeris:', '  SKD version = ' + kernel_version]
-
-    tb_history = [tb_history, history]
-    pb_history = [pb_history, history]
-
     ; delete useless keywords
 
     sxdelpar, primary_header, 'BLANK'
@@ -443,7 +441,9 @@ pro metis_l2_prep_vl_polariz
 
     ; add the history keyword
 
+    pb_history = [demod_history, cal_history, wcs_history]
     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
 
     ; write the fits file
@@ -532,8 +532,9 @@ pro metis_l2_prep_vl_polariz
     fxaddpar, primary_tb_header, 'DATAMAX', max(tb_image, /nan)
 
     ; add the history keyword
-
+    tb_history = [history, demod_history, cal_history, wcs_history]
     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
 
     ; write the fits file
@@ -624,6 +625,7 @@ pro metis_l2_prep_vl_polariz
     ; add the history keyword
 
     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
 
     ; write the fits file
@@ -734,6 +736,7 @@ pro metis_l2_prep_vl_polariz
     ; add the history keyword
 
     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
 
     ; write the fits file