Moved to core
Using generics