bug fix: substitution now strict