   sessionContext.virtualParameters = []
   sessionContext.channels = {}
   sessionContext.declarations = []
-  sessionContext.doneProvisions = 0
+  sessionContext.provisionsRet = []
   sessionContext.revisions = [0]
   sessionContext.extensionsCache = {}
 

        done &&= _done
        allDeclarations[j] = _declarations or []
        allClear[j] = _clear or []
        virtualParameterUpdates[j] = _returnValue if _done

        if (counter -= 2) == 1
          toClear = null
          if done
            for vpu, i in virtualParameterUpdates
              toClear = commitVirtualParameter(sessionContext, provisions[i], vpu, toClear)

          clear(sessionContext, toClear, (err) ->
            allDeclarations = Array.prototype.concat.apply([], allDeclarations)
            allClear = Array.prototype.concat.apply([], allClear)
            return callback(err, null, done, allDeclarations, allClear)
          )
      )

  if (counter -= 2) == 1
    toClear = null
    if done
      for vpu, i in virtualParameterUpdates
        toClear = commitVirtualParameter(sessionContext, provisions[i], vpu, toClear)

    clear(sessionContext, toClear, (err) ->
      allDeclarations = Array.prototype.concat.apply([], allDeclarations)
      allClear = Array.prototype.concat.apply([], allClear)
      return callback(err, null, done, allDeclarations, allClear)
    )


runDeclarations = (sessionContext, declarations) ->

  if sessionContext.virtualParameters.length == 0 and
      sessionContext.declarations.length == 0 and
      not _declarations?.length and
      sessionContext.provisions.length == 0
    return callback()

  if sessionContext.declarations.length <= sessionContext.virtualParameters.length
