split to separate implementation