add an substitution implementation