changing generic types ... overcomplicated signatures now :(