impl
refactor
cont.