always pass 'self' to hooks