Split deferred init logic

Allow subclass to implement own logic for how determine when to run deferred initialization method. This change also keeps the original deferred init configuration in memory, so it can be re-executed.