add defer optional construction