added deferOnce and pushOnce