diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc
index ab4abca..dfb1ac5 100644
--- a/poppler/PDFDoc.cc
+++ b/poppler/PDFDoc.cc
@@ -927,7 +927,7 @@
       Dict *trailerDict = trailerObj->getDict();
       const Object &ref = trailerDict->lookupNF("Info");
       if (ref.isRef()) {
-        yRef->add(ref.getRef().num, ref.getRef().gen, 0, true);
+        yRef->add(ref.getRef(), 0, true);
         if (getXRef()->getEntry(ref.getRef().num)->type == xrefEntryCompressed) {
           yRef->getEntry(ref.getRef().num)->type = xrefEntryCompressed;
         }
@@ -1129,9 +1129,9 @@
         Goffset offset = writeObjectHeader(&ref, outStr);
         writeObject(&obj1, outStr, fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
         writeObjectFooter(outStr);
-        uxref->add(ref.num, ref.gen, offset, true);
+        uxref->add(ref, offset, true);
       } else {
-        uxref->add(ref.num, ref.gen, 0, false);
+        uxref->add(ref, 0, false);
       }
     }
   }
@@ -1157,7 +1157,7 @@
     // Append an entry for the xref stream itself
     uxrefStreamRef.num = numobjects++;
     uxrefStreamRef.gen = 0;
-    uxref->add(uxrefStreamRef.num, uxrefStreamRef.gen, uxrefOffset, true);
+    uxref->add(uxrefStreamRef, uxrefOffset, true);
   }
 
   Object trailerDict = createTrailerDict(numobjects, true, getStartXRef(), &rootRef, getXRef(), fileNameA, uxrefOffset);
@@ -1194,12 +1194,12 @@
       /* the XRef class adds a lot of irrelevant free entries, we only want the significant one
           and we don't want the one with num=0 because it has already been added (gen = 65535)*/
       if (ref.gen > 0 && ref.num > 0)
-        uxref->add(ref.num, ref.gen, 0, false);
+        uxref->add(ref, 0, false);
     } else if (xref->getEntry(i)->getFlag(XRefEntry::DontRewrite)) {
       // This entry must not be written, put a free entry instead (with incremented gen)
       ref.num = i;
       ref.gen = xref->getEntry(i)->gen + 1;
-      uxref->add(ref.num, ref.gen, 0, false);
+      uxref->add(ref, 0, false);
     } else if (type == xrefEntryUncompressed){ 
       ref.num = i;
       ref.gen = xref->getEntry(i)->gen;
@@ -1212,7 +1212,7 @@
         writeObject(&obj1, outStr, fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
       }
       writeObjectFooter(outStr);
-      uxref->add(ref.num, ref.gen, offset, true);
+      uxref->add(ref, offset, true);
     } else if (type == xrefEntryCompressed) {
       ref.num = i;
       ref.gen = 0; //compressed entries have gen == 0
@@ -1220,7 +1220,7 @@
       Goffset offset = writeObjectHeader(&ref, outStr);
       writeObject(&obj1, outStr, fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
       writeObjectFooter(outStr);
-      uxref->add(ref.num, ref.gen, offset, true);
+      uxref->add(ref, offset, true);
     }
   }
   xref->unlock();
@@ -1952,7 +1952,7 @@
         writeObject(&obj, outStr, fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
       }
       writeObjectFooter(outStr);
-      xRef->add(ref.num, ref.gen, offset, true);
+      xRef->add(ref, offset, true);
     }
   }
   return objectsCount;
diff --git a/poppler/XRef.cc b/poppler/XRef.cc
index 87a08c7..22ce7f9 100644
--- a/poppler/XRef.cc
+++ b/poppler/XRef.cc
@@ -1264,6 +1264,11 @@
   else return -1;
 }
 
+void XRef::add(Ref ref, Goffset offs, bool used)
+{
+    add(ref.num, ref.gen, offs, used);
+}
+
 void XRef::add(int num, int gen, Goffset offs, bool used) {
   xrefLocker();
   if (num >= size) {
diff --git a/poppler/XRef.h b/poppler/XRef.h
index eb8684d..fc5c838 100644
--- a/poppler/XRef.h
+++ b/poppler/XRef.h
@@ -193,6 +193,7 @@
   Ref addIndirectObject (const Object* o);
   void removeIndirectObject(Ref r);
   void add(int num, int gen,  Goffset offs, bool used);
+  void add(Ref ref, Goffset offs, bool used);
 
   // Output XRef table to stream
   void writeTableToFile(OutStream* outStr, bool writeAllEntries);
