add allow_nil option