diff --git a/external/builder/fixtures_esprima/blocks-expected.js b/external/builder/fixtures_esprima/blocks-expected.js
index 22e7b7434..f45aff378 100644
--- a/external/builder/fixtures_esprima/blocks-expected.js
+++ b/external/builder/fixtures_esprima/blocks-expected.js
@@ -1,10 +1,10 @@
 function test() {
-  "test";
-  "1";
-  "2";
-  "3";
-  if ("test") {
-    "5";
-  }
-  "4";
+ "test";
+ "1";
+ "2";
+ "3";
+ if ("test") {
+  "5";
+ }
+ "4";
 }
diff --git a/external/builder/fixtures_esprima/comments-expected.js b/external/builder/fixtures_esprima/comments-expected.js
index 270742445..f36ff416d 100644
--- a/external/builder/fixtures_esprima/comments-expected.js
+++ b/external/builder/fixtures_esprima/comments-expected.js
@@ -1,28 +1,28 @@
 function f1() {
-  /* head */
-  "1";
-  /* mid */
-  "2";
+ /* head */
+ "1";
+ /* mid */
+ "2";
 }
 /* tail */
 function f2() {
-  // head
-  "1";
-  // mid
-  "2";
+ // head
+ "1";
+ // mid
+ "2";
 }
 // tail
 function f2() {
-  if ("1") {
-    // begin block
-    "1";
+ if ("1") {
+  // begin block
+  "1";
+ }
+ "2";
+ // trailing
+ if (/* s */
+  "3")
+  /*e*/
+  {
+   "4";
   }
-  "2";
-  // trailing
-  if (/* s */
-    "3")
-    /*e*/
-    {
-      "4";
-    }
 }
diff --git a/external/builder/fixtures_esprima/deadcode-expected.js b/external/builder/fixtures_esprima/deadcode-expected.js
new file mode 100644
index 000000000..ea82c1623
--- /dev/null
+++ b/external/builder/fixtures_esprima/deadcode-expected.js
@@ -0,0 +1,13 @@
+function f1() {
+}
+function f2() {
+ return 1;
+}
+function f3() {
+ var i = 0;
+ throw "test";
+}
+function f4() {
+ var i = 0;
+}
+
diff --git a/external/builder/fixtures_esprima/deadcode.js b/external/builder/fixtures_esprima/deadcode.js
new file mode 100644
index 000000000..60c9d0f07
--- /dev/null
+++ b/external/builder/fixtures_esprima/deadcode.js
@@ -0,0 +1,25 @@
+function f1() {
+  return;
+  var i = 0;
+}
+
+function f2() {
+  return 1;
+  var i = 0;
+}
+
+function f3() {
+  var i = 0;
+  throw "test";
+  var j = 0;
+}
+
+function f4() {
+  var i = 0;
+  if (true) {
+    return;
+  }
+  throw "test";
+  var j = 0;
+}
+
diff --git a/external/builder/fixtures_esprima/evals-expected.js b/external/builder/fixtures_esprima/evals-expected.js
index 414de051c..48f1d1605 100644
--- a/external/builder/fixtures_esprima/evals-expected.js
+++ b/external/builder/fixtures_esprima/evals-expected.js
@@ -5,8 +5,8 @@ var d = false;
 var e = true;
 var f = 'text';
 var g = {
-  "obj": { "i": 1 },
-  "j": 2
+ "obj": { "i": 1 },
+ "j": 2
 };
 var h = { 'test': 'test' };
 var i = '0';
diff --git a/external/builder/fixtures_esprima/ifs-expected.js b/external/builder/fixtures_esprima/ifs-expected.js
index 12599c619..2e045e7fa 100644
--- a/external/builder/fixtures_esprima/ifs-expected.js
+++ b/external/builder/fixtures_esprima/ifs-expected.js
@@ -1,17 +1,17 @@
 if ('test') {
-  "1";
+ "1";
 }
 {
-  "1";
+ "1";
 }
 {
-  "1";
+ "1";
 }
 ;
 {
-  "2";
+ "2";
 }
 ;
 if ('1') {
-  "1";
+ "1";
 }
diff --git a/external/builder/preprocessor2.js b/external/builder/preprocessor2.js
index ed05d2f55..82e15f293 100644
--- a/external/builder/preprocessor2.js
+++ b/external/builder/preprocessor2.js
@@ -169,22 +169,38 @@ function postprocessNode(ctx, node) {
     case 'BlockStatement':
       var subExpressionIndex = 0;
       while (subExpressionIndex < node.body.length) {
-        if (node.body[subExpressionIndex].type === 'EmptyStatement') {
-          // Removing empty statements from the blocks.
-          node.body.splice(subExpressionIndex, 1);
-          continue;
-        }
-        if (node.body[subExpressionIndex].type === 'BlockStatement') {
-          // Block statements inside a block are moved to the parent one.
-          var subChildren = node.body[subExpressionIndex].body;
-          Array.prototype.splice.apply(node.body,
-            [subExpressionIndex, 1].concat(subChildren));
-          subExpressionIndex += subChildren.length;
-          continue;
+        switch (node.body[subExpressionIndex].type) {
+          case 'EmptyStatement':
+            // Removing empty statements from the blocks.
+            node.body.splice(subExpressionIndex, 1);
+            continue;
+          case 'BlockStatement':
+            // Block statements inside a block are moved to the parent one.
+            var subChildren = node.body[subExpressionIndex].body;
+            Array.prototype.splice.apply(node.body,
+              [subExpressionIndex, 1].concat(subChildren));
+            subExpressionIndex += Math.max(subChildren.length - 1, 0);
+            continue;
+          case 'ReturnStatement':
+          case 'ThrowStatement':
+            // Removing dead code after return or throw.
+            node.body.splice(subExpressionIndex + 1,
+                             node.body.length - subExpressionIndex - 1);
+            break;
         }
         subExpressionIndex++;
       }
       break;
+    case 'FunctionDeclaration':
+    case 'FunctionExpression':
+      var block = node.body;
+      if (block.body.length > 0 &&
+          block.body[block.body.length - 1].type === 'ReturnStatement' &&
+          !block.body[block.body.length - 1].argument) {
+        // Function body ends with return without arg -- removing it.
+        block.body.pop();
+      }
+      break;
   }
   return node;
 }
diff --git a/src/display/font_loader.js b/src/display/font_loader.js
index fdee72d35..316a8b6d2 100644
--- a/src/display/font_loader.js
+++ b/src/display/font_loader.js
@@ -360,25 +360,25 @@ var FontFaceObject = (function FontFaceObjectClosure() {
   }
   FontFaceObject.prototype = {
     createNativeFontFace: function FontFaceObject_createNativeFontFace() {
-      if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('MOZCENTRAL')) {
-        if (!this.data) {
-          return null;
-        }
-
-        if (this.options.disableFontFace) {
-          this.disableFontFace = true;
-          return null;
-        }
-
-        var nativeFontFace = new FontFace(this.loadedName, this.data, {});
-
-        if (this.options.fontRegistry) {
-          this.options.fontRegistry.registerFont(this);
-        }
-        return nativeFontFace;
-      } else { // eslint-disable-line no-else-return
+      if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('MOZCENTRAL')) {
         throw new Error('Not implemented: createNativeFontFace');
       }
+
+      if (!this.data) {
+        return null;
+      }
+
+      if (this.options.disableFontFace) {
+        this.disableFontFace = true;
+        return null;
+      }
+
+      var nativeFontFace = new FontFace(this.loadedName, this.data, {});
+
+      if (this.options.fontRegistry) {
+        this.options.fontRegistry.registerFont(this);
+      }
+      return nativeFontFace;
     },
 
     createFontFaceRule: function FontFaceObject_createFontFaceRule() {
diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js
index 3dbd4815f..45b79754f 100644
--- a/web/pdf_page_view.js
+++ b/web/pdf_page_view.js
@@ -624,43 +624,43 @@ var PDFPageView = (function PDFPageViewClosure() {
           onRenderContinue: function (cont) { },
           cancel: function () { },
         };
-      } else { // eslint-disable-line no-else-return
-        var cancelled = false;
-        var ensureNotCancelled = function () {
-          if (cancelled) {
-            throw 'cancelled';
-          }
-        };
-
-        var self = this;
-        var pdfPage = this.pdfPage;
-        var SVGGraphics = pdfjsLib.SVGGraphics;
-        var actualSizeViewport = this.viewport.clone({scale: CSS_UNITS});
-        var promise = pdfPage.getOperatorList().then(function (opList) {
-          ensureNotCancelled();
-          var svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs);
-          return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) {
-            ensureNotCancelled();
-            self.svg = svg;
-            self.paintedViewport = actualSizeViewport;
-
-            svg.style.width = wrapper.style.width;
-            svg.style.height = wrapper.style.height;
-            self.renderingState = RenderingStates.FINISHED;
-            wrapper.appendChild(svg);
-          });
-        });
-
-        return {
-          promise: promise,
-          onRenderContinue: function (cont) {
-            cont();
-          },
-          cancel: function () {
-            cancelled = true;
-          }
-        };
       }
+
+      var cancelled = false;
+      var ensureNotCancelled = function () {
+        if (cancelled) {
+          throw 'cancelled';
+        }
+      };
+
+      var self = this;
+      var pdfPage = this.pdfPage;
+      var SVGGraphics = pdfjsLib.SVGGraphics;
+      var actualSizeViewport = this.viewport.clone({scale: CSS_UNITS});
+      var promise = pdfPage.getOperatorList().then(function (opList) {
+        ensureNotCancelled();
+        var svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs);
+        return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) {
+          ensureNotCancelled();
+          self.svg = svg;
+          self.paintedViewport = actualSizeViewport;
+
+          svg.style.width = wrapper.style.width;
+          svg.style.height = wrapper.style.height;
+          self.renderingState = RenderingStates.FINISHED;
+          wrapper.appendChild(svg);
+        });
+      });
+
+      return {
+        promise: promise,
+        onRenderContinue: function (cont) {
+          cont();
+        },
+        cancel: function () {
+          cancelled = true;
+        }
+      };
     },
 
     /**