make value optional (otherwise adds nul bytes), add optional output_data_start