Really shouldn't wrap modifying images. Its not exactly cheap!
Lots of cleanup and fixes as well as a unittest