more refactory