convert hooks into soft hooks

This implements soft hooks in a very aggressive destructive way.

cc @Matt-Esch