use introspection instead of hard-coded component