broke abstract classes into their own files