almost done , but ctor can't instantiate generic types
works