// shadow the prototype getter
       return shadow(this, 'numPages', num);
     },
+    getFingerprint: function pdfDocGetFingerprint() {
+      if(this.fileID) {
+        return this.fileID;
+      } else {
+        // If we got no fileID, then we generate one, from the first 100 bytes of PDF
+        var data = this.stream.bytes.subarray(0, 100);
+        var hash = calculateMD5(data, 0, data.length);
+        var strHash = '';
+        for(var i = 0, length = hash.length; i < length; i++) {
+          strHash += Number(hash[i]).toString(16);
+        }
+
+        return strHash;
+      }
+    },
     getPage: function pdfDocGetPage(n) {
       return this.catalog.getPage(n);
     }
     this.data = data;
     this.stream = stream;
     this.pdf = new PDFDocModel(stream);
-    this.fileID = this.pdf.fileID;
+    this.fingerprint = this.pdf.getFingerprint();
     this.catalog = this.pdf.catalog;
     this.objs = new PDFObjects();
 
 
       pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i;
     }
 
-    var id = pdf.fileID;
+    var id = pdf.fingerprint;
     if (id) {
       var scroll = Settings.get(id + '.scroll', -1);
       if (scroll != -1) {
 
 window.addEventListener('scroll', function webViewerScroll(evt) {
   updateViewarea();
-  var fileID;
-  if((fileID = PDFView.pages[0].content.pdf.fileID)) {
-    Settings.set(fileID+'.scroll', window.pageYOffset);
+  var id;
+  if((id = PDFView.pages[0].content.pdf.fingerprint)) {
+    Settings.set(id+'.scroll', window.pageYOffset);
   }
 }, true);