anchor.diff:          }
         },
   
  -      gotoPage: function(cfi) {
  -        if ( typeof(cfi) == "string" ) {
  -          cfi = { start: cfi.replace('epubcfi(', '').replace(')','') };
  +      gotoPage: function(value) {
  +        var pageNum;
  +        if ( typeof(value) == "string" ) {
  +          if ( value.indexOf('epubcfi') > -1 ) {
  +            pageNum = value.replace('epubcfi(page=','').replace(')', '');
  +          } else {
  +            pageNum = value.replace('page=','');
  +          }
  +        } else if ( typeof(value) == 'object' && value.start ) {
  +          pageNum = value.start;
  +        } else {
  +          pageNum = value;
           }
  -        var pageNum = cfi.start;
  -        this.pdfViewer.currentPageNumber = pageNum;
  +        this.pdfViewer.currentPageNumber = parseInt(pageNum, 10);
         },
   
         reopen: function(options) {
  
positive.code:           reset: function() { /* NOP */ }
          };
  
          $.loadScript("/web/viewer.js", function() {
            // stop Mozilla viewer messing with page title, also alters external link behavior, apparently
            // https://github.com/mozilla/pdf.js/blob/85acc9acac4c7699303216727a6300a6097e4dd3/web/app.js#L136
            window.PDFViewerApplication.isViewerEmbedded = true;
            self.PDFViewerApplication = window.PDFViewerApplication;
  
            self.PDFViewerApplication.open(self.options.href).then(function() {
              self.pdfViewer = this.PDFViewerApplication.pdfViewer;
  
              self.pdfViewer = this.PDFViewerApplication.pdfViewer;
              var setupInterval = setInterval(function() {
                if ( self.PDFViewerApplication.pdfDocument != null ) {
                  clearInterval(setupInterval);
  
negative.code:           var text = findController._pageContents[i];
            matches.forEach(function(match, index) {
              var snippet = self._getMatch(text, self.searchString, match);
              self._data.search_results.push({ cfi: 'page=' + ( i + 1 ), matchIdx: match, snippet: snippet });
            })
          }
  
  