refactor, nuew design