refactor with objects pool