diff --git a/extensions/b2g/viewer.html b/extensions/b2g/viewer.html
index f3c6ea5a5..d39ed5724 100644
--- a/extensions/b2g/viewer.html
+++ b/extensions/b2g/viewer.html
@@ -25,7 +25,6 @@ limitations under the License.
     <link rel="resource" type="application/l10n" href="locale.properties"/>
     <link rel="stylesheet" href="/shared/style/headers.css" type="text/css" />
     <link rel="stylesheet" href="viewer-b2g.css" type="text/css" />
-    <link rel="stylesheet" href="/shared/style/responsive.css" type="text/css" />
     <script type="text/javascript" src="l10n.js"></script>
     <script type="text/javascript" src="../build/pdf.js"></script>
     <script type="text/javascript" src="/shared/js/async_storage.js"></script>
diff --git a/src/api.js b/src/api.js
index 1d0bf133c..c1ab09d95 100644
--- a/src/api.js
+++ b/src/api.js
@@ -21,6 +21,13 @@
 
  'use strict';
 
+/**
+ * The maximum allowed image size in total pixels e.g. width * height. Images
+ * above this value will not be drawn. Use -1 for no limit.
+ * @var {Number}
+ */
+PDFJS.maxImageSize = PDFJS.maxImageSize === undefined ? -1 : PDFJS.maxImageSize;
+
 /**
  * This is the main entry point for loading a PDF and interacting with it.
  * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR)
@@ -760,7 +767,8 @@ var WorkerTransport = (function WorkerTransportClosure() {
       source.chunkedViewerLoading = !!this.pdfDataRangeTransport;
       this.messageHandler.send('GetDocRequest', {
         source: source,
-        disableRange: PDFJS.disableRange
+        disableRange: PDFJS.disableRange,
+        maxImageSize: PDFJS.maxImageSize
       });
     },
 
diff --git a/src/evaluator.js b/src/evaluator.js
index 33674d085..b3de3b102 100644
--- a/src/evaluator.js
+++ b/src/evaluator.js
@@ -234,6 +234,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
       var w = dict.get('Width', 'W');
       var h = dict.get('Height', 'H');
 
+      if (PDFJS.maxImageSize !== -1 && w * h > PDFJS.maxImageSize) {
+        warn('Image exceeded maximum allowed size and was removed.');
+        return null;
+      }
+
       var dependencies = {};
       var retData = {
         dependencies: dependencies
@@ -706,6 +711,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
               } else if ('Image' == type.name) {
                 var data = self.buildPaintImageXObject(
                     resources, xobj, false);
+                if (!data) {
+                  args = [];
+                  continue;
+                }
                 Util.extendObj(dependencies, data.dependencies);
                 self.insertDependencies(queue, data.dependencies);
                 fn = data.fn;
@@ -720,6 +729,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
           } else if (cmd == 'EI') {
             var data = self.buildPaintImageXObject(
                 resources, args[0], true);
+            if (!data) {
+              args = [];
+              continue;
+            }
             Util.extendObj(dependencies, data.dependencies);
             self.insertDependencies(queue, data.dependencies);
             fn = data.fn;
diff --git a/src/worker.js b/src/worker.js
index a312643a2..9b12a2ff1 100644
--- a/src/worker.js
+++ b/src/worker.js
@@ -307,6 +307,9 @@ var WorkerMessageHandler = {
         }
       };
 
+      PDFJS.maxImageSize = data.maxImageSize === undefined ?
+                           -1 : data.maxImageSize;
+
       getPdfManager(data).then(function pdfManagerReady() {
         loadDocument(false).then(onSuccess, function loadFailure(ex) {
           // Try again with recoveryMode == true
diff --git a/web/viewer.js b/web/viewer.js
index 9ac2f5a95..192234271 100644
--- a/web/viewer.js
+++ b/web/viewer.js
@@ -3201,6 +3201,7 @@ window.addEventListener('afterprint', function afterPrint(evt) {
 //#if B2G
 //window.navigator.mozSetMessageHandler('activity', function(activity) {
 //  var url = activity.source.data.url;
+//  PDFJS.maxImageSize = 1024 * 1024;
 //  PDFView.open(url);
 //  var cancelButton = document.getElementById('activityClose');
 //  cancelButton.addEventListener('click', function() {