programmtic interface and generics rework