refact again