use deferred objects instead