add keep_order parameter