diff --git a/metis_l2_prep_vl_generic.pro b/metis_l2_prep_vl_generic.pro
index 53a4d5399552435e9c9e32de158a229eabb900d0..ec4e83b34e590c32eb5a9caaeab3596659eae026 100644
--- a/metis_l2_prep_vl_generic.pro
+++ b/metis_l2_prep_vl_generic.pro
@@ -53,6 +53,12 @@ pro metis_l2_prep_vl_generic
 
 	; calibration block
 
+	file_name_fields = strsplit(header.filename, '_', /extract)
+
+	; error is the quadratic relative error
+	
+	error = 0.
+
 	case header.datatype of
 	0 : begin
 		data = double(data)
@@ -64,7 +70,7 @@ pro metis_l2_prep_vl_generic
 		; header.nsumexp = header.ndit
 		; ====================================
 
-		data = metis_dark_vlda(data, header, cal_pack, history = history)
+		data = metis_dark_vlda(data, header, cal_pack, error = error, quality_matrix = quality_matrix, history = history)
 
 		; ====================================
 		; for data already subtracted of dark
@@ -75,17 +81,23 @@ pro metis_l2_prep_vl_generic
 		; history = ['Dark correction: ', '  ' + file]
 		; ====================================
 
-		data = metis_flat_field(data, header, cal_pack, history = history)
-		data = metis_vignetting(data, header, cal_pack, history = history)
-		data = metis_rad_cal(data, header, cal_pack, history = history, /polarimetric)
-
 		if header.pol_id eq 0 then begin
 			btype = 'VL fixed-polarization intensity'
+			descriptor = 'metis-vl-image'
+			polarimetric = 1
 		endif else if header.pol_id ge 1 and header.pol_id le 4 then begin
 			btype = 'VL fixed-polarization intensity'
+			descriptor = 'metis-vl-image'
+			polarimetric = 1
 		endif else begin
 			btype = 'VL total brightness'
+			descriptor = 'metis-vl-tb'
+			polarimetric = 0
 		endelse
+
+		data = metis_flat_field(data, header, cal_pack, error = error, quality_matrix = quality_matrix, history = history)
+		data = metis_vignetting(data, header, cal_pack, error = error, quality_matrix = quality_matrix, history = history)
+		data = metis_rad_cal(data, header, cal_pack, polarimetric = polarimetric, error = error, quality_matrix = quality_matrix, history = history)
 		
 		bunit = cal_pack.vl_channel.cal_units
 	end
@@ -93,6 +105,7 @@ pro metis_l2_prep_vl_generic
 	3 : begin
 		; calibration of temporal noise images
 		btype = 'VL temporal standard deviation'
+		descriptor = file_name_fields[2]
 		bunit = 'DN'
 		history = !null
 	end
@@ -100,6 +113,7 @@ pro metis_l2_prep_vl_generic
 	5 : begin
 		; calibration of cr/sep log matrices
 		btype = 'VL cosmic-ray matrix'
+		descriptor = file_name_fields[2]
 		bunit = 'DN'
 		history = !null
 	end
@@ -122,15 +136,14 @@ pro metis_l2_prep_vl_generic
 
 	; name of the fits file
 
-	file_name_fields = strsplit(header.filename, '_', /extract)
-	file_name = 'solo_L2_' + file_name_fields[2] + '_' + file_name_fields[3] + '_V' + version + '.fits'
+	file_name = 'solo_L2_' + descriptor + '_' + file_name_fields[3] + '_V' + version + '.fits'
 	out_file_name = 'output/' + file_name
 
 	; adjust the primary header
 
 	fxaddpar, primary_header, 'FILENAME', file_name
 	fxaddpar, primary_header, 'PARENT', file_basename(input.file_name)
-	fxaddpar, primary_header, 'LEVEL', 'L2-draft'
+	fxaddpar, primary_header, 'LEVEL', 'L2'
 	fxaddpar, primary_header, 'ORIGIN', ''
 	fxaddpar, primary_header, 'CREATOR', 'metis_l2_prep_vl_generic.pro'
 	fxaddpar, primary_header, 'VERS_SW', input.sw_version
@@ -143,6 +156,8 @@ pro metis_l2_prep_vl_generic
 	fxaddpar, primary_header, 'XPOSURE', header.xposure
 	fxaddpar, primary_header, 'NSUMEXP', header.nsumexp
 
+	sxdelpar, primary_header, 'BLANK'
+	
 	; append wcs keywords
 
 	wcs = metis_wcs(header, cal_pack, ref_detector = ref_detector)
@@ -155,10 +170,6 @@ pro metis_l2_prep_vl_generic
 
 	history = [history, 'Update WCS and solar ephemeris:', '  SKD version = ' + kernel_version]
 
-	; delete useless keywords
-
-	sxdelpar, primary_header, 'BLANK'
-
 	; add the history keyword
 
 	for k = 0, n_elements(history) - 1 do $
@@ -192,7 +203,7 @@ pro metis_l2_prep_vl_generic
 	fxaddpar, extension_header, 'PCOUNT', 0, 'Parameter count'
 	fxaddpar, extension_header, 'GCOUNT', 1, 'Group count'
 	fxaddpar, extension_header, 'EXTNAME', 'Error matrix', 'Extension name'
-	error_matrix = intarr(header.naxis1, header.naxis2)
+	error_matrix = data * sqrt(error)
 	if not ref_detector then data = metis_rectify(error_matrix, 'VL')
 	fits_add_checksum, extension_header, intarr(header.naxis1, header.naxis2)
 	mwrfits, error_matrix, out_file_name, extension_header, /no_comment, /silent