re-implement rf-add