handle self. dynamically