 
 window.tubular = (rootModel, rootTemplate) ->
-  watchList = []
-
   createGetter = (model, path) ->
     if model is undefined
       # always is undefined

        getter = createGetter model, path
        value = getter()

        watch = ->
          # get and compare with cached values
          newValue = getter()
          if newValue isnt value
            value = newValue
            runTemplate value, viewModel, subTemplate

        watch.isCleared = false

        watchList.push watch

        runTemplate value, viewModel, subTemplate

        # return a handle to be able to unwatch
        {
          clear: ->
            # delayed removal for safety
            watch.isCleared = true
        }

      apply: (run) ->
        # fail fast on error

        # @todo wrap in an try/catch? or just let it bubble up?
        run.call(model)

        modelNotify()

    if preInitMap
      viewModel[n] = v for n, v of preInitMap
