Deferred

This patch defines `prepare()` method that records all the method calls and executes them later on demand.

Solution is admittedly bit on a hackish side, so if you think this is an overall good idea, please do leave a feedback, and I'll be glad to clean it up.