finish first draft: simple substitution live binding