Issue #32: General string substitutions