cleaned up the code and added example