Generics were definitely the wrong approach; working much better with
some minor casting magic and method overloading.