#1: Use generics for component list