re-factor approach; pretty clean