Rarrange inheritence hierarchy to move away some common code