   else
     $asFunction val
 
-  watcher = {
-    # Method allowing the cleanup when the helper is no longer used.
-    cleanUp: -> # TODO: noop for now.
-
-    # Keys of items using the current helper.
-    consumers: Object.create null
-
-    generator: ->
-      {key} = this
-
-      # Register this item has a consumer.
-      watcher.consumers[@key] = true
-
-      # Returns the value for this item if any or the common value.
-      values = watcher.values
-      namespace = "$#{key}"
-      if namespace of values
-        values[namespace]
-      else
-        values.common
-
-    # Current values.
-    values: Object.create null
-  }
-  watcher.values.common = init
-
+  # Method allowing the cleanup when the helper is no longer used.
+  #cleanUp = -> # TODO: noop for now.
+
+  # Keys of items using the current helper.
+  consumers = Object.create null
+
+  # Current values.
+  values = Object.create null
+  values.common = init
+
+  isProcessing = false
   process = (event, items) ->
+    throw new Error 'loop detected' if isProcessing
+    isProcessing = true
+
     # Values are grouped by namespace.
     valuesByNamespace = Object.create null
 


  options.init = []

  watcher = $watch this, options, (entered, exited) ->
    changed = false

    for value in entered

  keepLast = !!options.keepLast
  delete options.keepLast

  $watch this, options, (entered, exited) ->
    prev = @value

    if not $_.isEmpty entered
