abstracted better