more flexible generics