added return value, use substitution