some progress on abstract types