refactored lists into classes where appropriate
first attempt at diffuse reflection