Fix: substitution must create a new node