#4 more refactory