fix abstract class; add more doc comment