Add more generics, make builders class private