factory -> service; cleanup