refactor
it implemented