splitOn and replaceOn are moved to upstream