almost done pushing all overlapping character functionality to abstract character