       titles = @$xml[0].querySelectorAll('title')
       title = titles.length and $(titles[0]).text() or ''
 
+      # read out metadata
+      @set {
+        language: @$xml.find('language[xsi\\:type="dcterms:RFC4646"]').text()
+        description: @$xml.find('description').text()
+        rights: @$xml.find('rights').text()
+        rightsUrl: @$xml.find('meta[property="lrmi:useRightsUrl"]').text()
+        dateModified: @$xml.find('meta[properties="dcterms:modified"]').text()
+        subject: $.makeArray @$xml.find('subject[xsi\\:type="http://github.com/Connexions/rhaptos.cnxmlutils/rhaptos/cnxmlutils/schema"]').map((i, el) -> $(el).text())
+        rightsHolders: $.makeArray @$xml.find('meta[property="dcterms:rightsHolder"]').map((i, el) -> $(el).text())
+        keywords: $.makeArray @$xml.find('subject').not('[xsi\\:type="http://github.com/Connexions/rhaptos.cnxmlutils/rhaptos/cnxmlutils/schema"]').map((i, el) -> $(el).text())
+        authors: $.makeArray @$xml.find('meta[property="role"]:contains(aut)').map((i, el) => @$xml.find($(el).attr('refines')).text())
+        publishers: $.makeArray @$xml.find('meta[property="role"]:contains(pbl)').map((i, el) => @$xml.find($(el).attr('refines')).text())
+        editors: $.makeArray @$xml.find('meta[property="role"]:contains(edt)').map((i, el) => @$xml.find($(el).attr('refines')).text())
+        translators: $.makeArray @$xml.find('meta[property="role"]:contains(trl)').map((i, el) => @$xml.find($(el).attr('refines')).text())
+        illustrators: $.makeArray @$xml.find('meta[property="role"]:contains(ill)').map((i, el) => @$xml.find($(el).attr('refines')).text())
+        }, {doNotUpdate: true}
+
       # The manifest contains all the items in the spine
       # but the spine element says which order they are in
 

        @_save()

      @on 'change:authors', (model, value, options) =>
        creatorHelper('author', 'aut', value)
      @on 'change:publishers', (model, value, options) =>
        creatorHelper('publisher', 'pbl', value)
      @on 'change:editors', (model, value, options) =>
        creatorHelper('editor', 'edt', value)
      @on 'change:translators', (model, value, options) =>
        creatorHelper('translator', 'trl', value)
      @on 'change:illustrators', (model, value, options) =>
        creatorHelper('illustrator', 'ill', value)

      # When a title changes on one of the nodes in the ToC:
      #

        )
          
      @on 'change:language', (model, value, options) =>
        tagHelper('dc:language', value, {'xsi:type': "dcterms:RFC4646"}) unless options.doNotUpdate
      @on 'change:description', (model, value, options) =>
        tagHelper('dc:description', value) unless options.doNotUpdate
      @on 'change:rights', (model, value, options) =>
        tagHelper('dc:rights', value) unless options.doNotUpdate

      metaHelper = (value, attributes) =>
        tagHelper('meta', value, attributes)

      @on 'change:rightsUrl', (model, value, options) =>
        metaHelper(value, {property: "lrmi:useRightsUrl"}) unless options.doNotUpdate
      @on 'change:dateModified', (model, value, options) =>
        metaHelper(value, {properties: "dcterms:modified"}) unless options.doNotUpdate

      tagGroupHelper = (tagName, values, attributes) =>
        # make sure we actually have content
