much better exception handling with prototypes... still a few weird broken tests