moving more stuff to abstract classes