change interface to abstract class and added some record fields