     @inputStreams = {}
     @inputCompleteSubject = new Rx.Subject()
     @bufferedValueChanges = bufferedValueChangeStream @valueChanges, @inputCompleteSubject
+    @slots = {}
+    @inputEvents = []
 
     @sheet = _.assign {}, @providedFunctions, {
       operations: new Operations("a function", @_inputItem)
       stored: {}
       storedUpToDate: {}
     }
+
 
 
 # TODO  rationalise this zoo of add...Functions

  @STREAM_RETURN = 'streamReturn'
  @AGGREGATE_RETURN = 'aggregateReturn'

  isRxObservable = (func) -> typeof func.subscribe == 'function'
  returnsStream = (func) -> func.kind == SheetRunner.STREAM or func.kind == SheetRunner.TRANSFORM_STREAM or func.returnKind == SheetRunner.STREAM_RETURN or func.returnKind == SheetRunner.SEQUENCE_RETURN
  returnsAggregate = (func) -> func.returnKind == SheetRunner.AGGREGATE_RETURN

        if not subj.hasObservers()
          delete @userFunctionSubjects[subjName]
          delete @userFunctionImpls[subjName]
      delete @slots[functionName]
      @sheet[functionName] = unknownNameFunction(functionName)
      @_recalculate()

