http://www.aosabook.org/en/puppet.html Section 18.4 subsection **Indirector** could have a good explanation of this.