Ok, here we go...
This is the latest version, not handling EL < 1. Didn't take too much, just another if/else. As a note, I am destroying the object each time rather than caching it because it makes debugging 100x easier. I will start caching all the data once I am sure everything works right...