refactored classes again to see if we can come closer to agreement on hooks