refactory #8