second attempt, let's clean up