nulls handled like empty strings