     @add(link: { rel: 'self', href: url, type: 'application/atom+xml;profile=opds-catalog;kind=navigation' })
     @add(link: { rel: 'start', href: '/opds', type: 'application/atom+xml;profile=opds-catalog;kind=navigation' })
     @add(title: title)
-    @add(updated: @date(updated))
+    @add(updated: @date(updated)) if updated
 
     @add(author: ->
       @add(name: 'Zotero OPDS')
       @add(uri: 'http://zotplus.github.io/opds')
       return)
     content.call(@)
+
+  search: (search) ->
+    @add(entry: ->
+      url = "/opds/search?library=#{search.libraryID || 0}&key=#{search.key}"
+      @add(title: search.name)
+      @add(link: { rel: 'subsection', href: url, type: 'application/atom+xml;profile=opds-catalog;kind=acquisition' })
+      @add(id: url)
+      @add(content: { type: 'text', '': search.name })
+      return)
+    return
 
   collection: (collection) ->
     updated = Zotero.DB.valueQuery(Zotero.OPDS.sql.collection, collection.id) or collection.dateModified

    return

  group: (group) ->
    updated = Zotero.DB.valueQuery(Zotero.OPDS.sql.group, group.id)
    libraryID = Zotero.Groups.getLibraryIDFromGroupID(group.id)
    @add(entry: ->
      url = "/opds/group?id=#{libraryID}"
      @add(title: group.name)
      @add(link: { rel: 'subsection', href: url, type: 'application/atom+xml;profile=opds-catalog;kind=acquisition' })
      @add(updated: @date(updated))
      @add(id: url)
      @add(content: { type: 'text', '': group.name })
      return)
    return


    collection:
      supportedMethods: ["GET"]
      init: (url, data, sendResponseCallback) ->
        collection = Zotero.Collections.getByLibraryAndKey((if url.query.library == '0' then null else url.query.library), url.query.key)
        updated = Zotero.DB.valueQuery(Zotero.OPDS.sql.collection, collection.id) or collection.dateModified

        feed = new Zotero.OPDS.Feed("/opds/collection?library=#{url.query.library}&key=#{url.query.key}", "Collection: #{collection.name}", updated, ->
