started modifying core to use generics