isCompatible was not virtual, child implementations were not called