Add generics(wip)