support empty strings