Added generic support for ADTs