elided unnecessary changes for version...the more you understand the simpler you can make it