Following the documentation at: https://docs.blender.org/api/blender_python_api_2_76_2/bge.types.KX_GameObject.html I can extend a game object with: class Mine( types.KX_GameObject ): def __init__( self, old_owner): #stuff def activate( controller ): # Called from Controller Mine( controller.owner ) But I'm missing what's doing the magic here. Somehow the controller not gets passed as second argument to __init__ but as first and the game object is internally (?) exchanged (?) with mine. So how is this working exactly? Is there some blender-foo or is this something Python can do for me which I'm not aware of?