actually use generic type