initial lifecycle works, pretty bulletproof. ( fixes #19 , fixes #1 ) , and just cleaner code all around