diff --git a/Makefile b/Makefile
index ebffb374c..a1902904c 100644
--- a/Makefile
+++ b/Makefile
@@ -18,6 +18,7 @@ PDF_JS_FILES = \
 	metrics.js \
 	charsets.js \
 	glyphlist.js \
+	cidmaps.js \
 	$(NULL)
 
 # not sure what to do for all yet
diff --git a/pdf.js b/pdf.js
index 46ad4de42..c53da444d 100644
--- a/pdf.js
+++ b/pdf.js
@@ -6072,12 +6072,13 @@ var CanvasGraphics = (function canvasGraphics() {
 
       var tmpCanvas = new this.ScratchCanvas(w, h);
       var tmpCtx = tmpCanvas.getContext('2d');
-      var fillColor = this.current.fillColor;
-
-      tmpCtx.fillStyle = (fillColor && fillColor.type === 'Pattern') ?
-        fillColor.getPattern(tmpCtx) : fillColor;
-      tmpCtx.fillRect(0, 0, w, h);
-
+      if (imageObj.imageMask) {
+        var fillColor = this.current.fillColor;
+        tmpCtx.fillStyle = (fillColor && fillColor.hasOwnProperty('type') &&
+                            fillColor.type === 'Pattern') ?
+                            fillColor.getPattern(tmpCtx) : fillColor;
+        tmpCtx.fillRect(0, 0, w, h);
+      }
       var imgData = tmpCtx.getImageData(0, 0, w, h);
       var pixels = imgData.data;
 
diff --git a/web/viewer.css b/web/viewer.css
index 040b87bdf..27ad0638a 100644
--- a/web/viewer.css
+++ b/web/viewer.css
@@ -215,6 +215,7 @@ canvas {
   box-shadow: 0px 4px 10px #000;
   -moz-box-shadow: 0px 4px 10px #000;
   -webkit-box-shadow: 0px 4px 10px #000;
+  background-color: white;
 }
 
 .page > a {
diff --git a/web/viewer.js b/web/viewer.js
index 12d0a3f37..0b68f1137 100644
--- a/web/viewer.js
+++ b/web/viewer.js
@@ -38,10 +38,10 @@ var PDFView = {
     var pages = this.pages;
     for (var i = 0; i < pages.length; i++)
       pages[i].update(val * kCssUnits);
-    this.currentScale = val;
 
-    this.pages[this.page - 1].scrollIntoView();
-    this.pages[this.page - 1].draw();
+    if (this.currentScale != val)
+      this.pages[this.page - 1].scrollIntoView();
+    this.currentScale = val;
 
     var event = document.createEvent('UIEvents');
     event.initUIEvent('scalechange', false, false, window, 0);
@@ -107,6 +107,10 @@ var PDFView = {
     if (updateViewarea.inProgress)
       return;
 
+    // Avoid scrolling the first page during loading
+    if (this.loading && val == 1)
+      return;
+
     pages[val - 1].scrollIntoView();
   },
 
@@ -117,17 +121,20 @@ var PDFView = {
   open: function pdfViewOpen(url, scale) {
     document.title = this.url = url;
 
+    var self = this;
     getPdf(
       {
         url: url,
         progress: function getPdfProgress(evt) {
           if (evt.lengthComputable)
-            PDFView.progress(evt.loaded / evt.total);
+            self.progress(evt.loaded / evt.total);
         },
-        error: PDFView.error
+        error: self.error
       },
       function getPdfLoad(data) {
-        PDFView.load(data, scale);
+        self.loading = true;
+        self.load(data, scale);
+        self.loading = false;
       });
   },
 
@@ -267,7 +274,7 @@ var PDFView = {
           var currentPage = this.pages[pageNumber - 1];
           currentPage.scrollIntoView(dest);
         } else
-          this.page = page; // simple page
+          this.page = params.page; // simple page
         return;
       }
     } else if (/^\d+$/.test(hash)) // page number
@@ -466,11 +473,11 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
     var canvas = document.createElement('canvas');
     canvas.id = 'page' + this.id;
     canvas.mozOpaque = true;
+    div.appendChild(canvas);
 
     var scale = this.scale;
     canvas.width = pageWidth * scale;
     canvas.height = pageHeight * scale;
-    div.appendChild(canvas);
 
     var ctx = canvas.getContext('2d');
     ctx.save();
@@ -598,6 +605,10 @@ window.addEventListener('load', function webViewerLoad(evt) {
     document.getElementById('fileInput').value = null;
 }, true);
 
+window.addEventListener('unload', function webViewerUnload(evt) {
+  window.scrollTo(0, 0);
+}, true);
+
 function updateViewarea() {
   var visiblePages = PDFView.getVisiblePages();
   for (var i = 0; i < visiblePages.length; i++) {