use introspection