   scrollTopBus = new Bacon.Bus()
   selectItemBus = new Bacon.Bus()
   selectedItemProp = Bacon.update(undefined,
-    [searchChangeStream], -> undefined
-    [resetStream], -> undefined
+    [searchProp.changes()], -> undefined
     [selectItemBus], (..., newItem) -> newItem
     [moveSelectedStream, matchedItemsProp], selectItemByRelativeOffset
   ).skipDuplicates()

    [resetStream, elementProp], (..., el) ->
      # TODO: getModel/setText are really internals of atom-text-editor.. can be done in a better way?
      el.querySelector('.atom-notational-search').getModel().setText('')
    [resetStream.merge(searchChangeStream), elementProp], (..., el) ->
      el.querySelector('.tbody').scrollTop = 0 #return to top
  ).onValue() # no-op to setup the listener


    .toProperty()

  searchBus = new Bacon.Bus()
  searchProp = Bacon.update '',
    [searchBus.skipDuplicates()], (..., lastStr) -> lastStr
    [resetStream], -> ''
  matchedItemsProp = Bacon.combineWith (items, searchStr) ->
    return items unless searchStr
