a little bit refactor
a mroe refactor