Simple model of computation with homoiconicity Is there a simple model of computation with homoiconicity?

It would also be nice if, like beta reduction in lambda calculus, every step in execution yields a new valid program.

Besides the lack of homoiconicity, another annoyance of lambda calculus is the necessity of checking for free variables when performing substitution.
The paper Typed Self-Representation by Tillmann Rendel, Klaus Ostermann and    Christian Hofer seems to satisfy the requirements, and it's typed too. Perhaps it doesn't satisfy the criteria of being a simple model of computation.