collect logic to abstract class