return null when not compatible.