refactory 3