initial abstract class support and little cleanup