changed before/after clear to around
errors now all handled with ->clear_error and ->has_error
added 'return if $self->has_error' after all hook calls