added a bunch of explanation and more detail