 
             model = @newNode {title: title, htmlAttributes: attributes, model: contentModel}
 
-            collection.add model, {parse:true}
+            collection.add model, {doNotReparse:true}
 
             @listenTo model, 'change:title', () =>
               console.warn 'TODO: BUG: Change the title in the ToC'
 
           else if $span[0]
             model = new TocNode {title: $span.text(), htmlAttributes: attributes, root: @}
-            collection.add model, {parse:true}
-
-            # Recurse
+
+            # Recurse and then add the node. that way we reduce the number of notifications
             recBuildTree(model.getChildren(), $ol, contextPath) if $ol[0]
+            collection.add model, {doNotReparse:true}
+
           else throw 'ERROR: Invalid Navigation Tree Structure'
 
           # Add the model to the tocNodes so we can listen to changes and update the ToC HTML
-          @tocNodes.add model, {parse:true}
+          @tocNodes.add model, {doNotReparse:true}
 
 
       $root = $body.find('nav > ol')
-      @tocNodes.reset [@], {parse:true}
-      @getChildren().reset()
+      @tocNodes.reset [@], {doNotReparse:true}
+      @getChildren().reset([], {doNotReparse:true})
       recBuildTree(@getChildren(), $root, @navModel.id)
 
 

      # This way we can ignore firing events when Backbone is parsing as well as
      # when we are internally updating models.
      setNavModel = (options) =>
        options.doNotReparse = true
        @navModel.set 'body', @_serializeNavModel(), options

      @tocNodes.on 'tree:add',    (model, collection, options) => @tocNodes.add model, options
      @tocNodes.on 'tree:remove', (model, collection, options) => @tocNodes.remove model, options

      @tocNodes.on 'add remove', (model, collection, options) =>
        setNavModel(options)
      @tocNodes.on 'tree:change change reset', (collection, options) =>
        # HACK: `?` is because `inherits/container.add` calls `trigger('change')`
        setNavModel(options)

      @load()

      super {root:@}

    _loadComplex: (fetchPromise) ->
      fetchPromise

    branch: true # This element will show up in the sidebar listing

    initialize: () ->
      super {root:@}

      # Contains all entries in the OPF file (including images)
      @manifest = new Backbone.Collection()
      # Contains all items in the ToC (including internal nodes like "Chapter 3")
