move some methods to abstract class