fall back on empty string rather than undef to avoid warnings