generics everywhere
improvements
Simplify