Index: pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
===================================================================
--- developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java	(revision 1467796)
+++ developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java	(working copy)
@@ -54,6 +54,10 @@
 public abstract class BaseParser
 {
 
+    private static final long OBJECT_NUMBER_THRESHOLD = 10000000000L;
+
+    private static final long GENERATION_NUMBER_THRESHOLD = 65535;
+    
     /**
      * system property allowing to define size of push back buffer.
      */
@@ -1585,6 +1589,36 @@
     }
 
     /**
+     * This will read a long from the Stream and throw an {@link IllegalArgumentException} if the long value
+     * has more than 10 digits (i.e. : bigger than {@link #OBJECT_NUMBER_THRESHOLD})
+     * @return
+     * @throws IOException
+     */
+    protected long readObjectNumber() throws IOException
+    {
+        long retval = readLong();
+        if(Math.abs(retval) >= OBJECT_NUMBER_THRESHOLD) { // an object number may be negative
+            throw new IllegalArgumentException("Object Number '" + retval + "' has more than 10 digits");
+        }
+        return retval;
+    }
+    
+    /**
+     * This will read a integer from the Stream and throw an {@link IllegalArgumentException} if the integer value
+     * has more than the maximum object revision (i.e. : bigger than {@link #GENERATION_NUMBER_THRESHOLD})
+     * @return
+     * @throws IOException
+     */
+    protected int readGenerationNumber() throws IOException
+    {
+        int retval = readInt();
+        if(retval < 0 || retval >= GENERATION_NUMBER_THRESHOLD) {
+            throw new IllegalArgumentException("Generation Number '" + retval + "' has more than 5 digits");
+        }
+        return retval;
+    }
+    
+    /**
      * This will read an integer from the stream.
      *
      * @return The integer that was read from the stream.
@@ -1596,8 +1630,57 @@
         skipSpaces();
         int retval = 0;
 
+        StringBuffer intBuffer = readStringNumber();
+
+        try
+        {
+            retval = Integer.parseInt( intBuffer.toString() );
+        }
+        catch( NumberFormatException e )
+        {
+            pdfSource.unread(intBuffer.toString().getBytes("ISO-8859-1"));
+            throw new IOException( "Error: Expected an integer type, actual='" + intBuffer + "'" );
+        }
+        return retval;
+    }
+    
+
+    /**
+     * This will read an long from the stream.
+     *
+     * @return The long that was read from the stream.
+     *
+     * @throws IOException If there is an error reading from the stream.
+     */
+    protected long readLong() throws IOException
+    {
+        skipSpaces();
+        long retval = 0;
+
+        StringBuffer longBuffer = readStringNumber();
+
+        try
+        {
+            retval = Long.parseLong( longBuffer.toString() );
+        }
+        catch( NumberFormatException e )
+        {
+            pdfSource.unread(longBuffer.toString().getBytes("ISO-8859-1"));
+            throw new IOException( "Error: Expected a long type, actual='" + longBuffer + "'" );
+        }
+        return retval;
+    }
+
+    /**
+     * This method is used to read a token by the {@linkplain #readInt()} method and the {@linkplain #readLong()} method.
+     *  
+     * @return the token to parse as integer or long by the calling method.
+     * @throws IOException throws by the {@link #pdfSource} methods.
+     */
+    private StringBuffer readStringNumber() throws IOException
+    {
         int lastByte = 0;
-        StringBuffer intBuffer = new StringBuffer();
+        StringBuffer buffer = new StringBuffer();
         while( (lastByte = pdfSource.read() ) != 32 &&
                 lastByte != 10 &&
                 lastByte != 13 &&
@@ -1605,22 +1688,13 @@
                 lastByte != 0 && //See sourceforge bug 853328
                 lastByte != -1 )
         {
-            intBuffer.append( (char)lastByte );
+            buffer.append( (char)lastByte );
         }
         if( lastByte != -1 )
         {
             pdfSource.unread( lastByte );
         }
-
-        try
-        {
-            retval = Integer.parseInt( intBuffer.toString() );
-        }
-        catch( NumberFormatException e )
-        {
-            pdfSource.unread(intBuffer.toString().getBytes("ISO-8859-1"));
-            throw new IOException( "Error: Expected an integer type, actual='" + intBuffer + "'" );
-        }
-        return retval;
+        return buffer;
     }
+
 }
Index: pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java
===================================================================
--- developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java	(revision 1488059)
+++ developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java	(working copy)
@@ -455,8 +455,8 @@
     private long parseXrefObjStream(long objByteOffset) throws IOException
     {
         // ---- parse indirect object head
-        readInt();
-        readInt();
+        readObjectNumber();
+        readGenerationNumber();
         readPattern(OBJ_MARKER);
 
         COSDictionary dict = parseCOSDictionary();
@@ -1180,8 +1180,8 @@
                 setPdfSource(offsetOrObjstmObNr);
 
                 // ---- we must have an indirect object
-                final int readObjNr = readInt();
-                final int readObjGen = readInt();
+                final long readObjNr = readObjectNumber();
+                final long readObjGen = readGenerationNumber();
                 readPattern(OBJ_MARKER);
 
                 // ---- consistency check
Index: pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java
===================================================================
--- developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java	(revision 1467796)
+++ developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java	(working copy)
@@ -44,7 +44,7 @@
         LogFactory.getLog(PDFObjectStreamParser.class);
 
     private List<COSObject> streamObjects = null;
-    private List<Integer> objectNumbers = null;
+    private List<Long> objectNumbers = null;
     private COSStream stream;
 
     /**
@@ -92,13 +92,13 @@
         {
             //need to first parse the header.
             int numberOfObjects = stream.getInt( "N" );
-            objectNumbers = new ArrayList<Integer>( numberOfObjects );
+            objectNumbers = new ArrayList<Long>( numberOfObjects );
             streamObjects = new ArrayList<COSObject>( numberOfObjects );
             for( int i=0; i<numberOfObjects; i++ )
             {
-                int objectNumber = readInt();
-                int offset = readInt();
-                objectNumbers.add( new Integer( objectNumber ) );
+                long objectNumber = readObjectNumber();
+                long offset = readLong();
+                objectNumbers.add( new Long( objectNumber ) );
             }
             COSObject object = null;
             COSBase cosObject = null;
Index: pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
===================================================================
--- developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java	(revision 1488059)
+++ developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java	(working copy)
@@ -507,7 +507,7 @@
         //we are going to parse an normal object
         else
         {
-            int number = -1;
+            long number = -1;
             int genNum = -1;
             String objectKey = null;
             boolean missingObjectNumber = false;
@@ -520,7 +520,7 @@
                 }
                 else
                 {
-                    number = readInt();
+                    number = readObjectNumber();
                 }
             }
             catch( IOException e )
@@ -529,12 +529,12 @@
                 //statements after an object, of course this is nonsense
                 //but because we want to support as many PDFs as possible
                 //we will simply try again
-                number = readInt();
+                number = readObjectNumber();
             }
             if( !missingObjectNumber )
             {
                 skipSpaces();
-                genNum = readInt();
+                genNum = readGenerationNumber();
 
                 objectKey = readString( 3 );
                 //System.out.println( "parseObject() num=" + number +
@@ -676,7 +676,7 @@
         /* This integer is the byte offset of the first object referenced by the xref or xref stream
          * Needed for the incremental update (PREV)
          */
-        getDocument().setStartXref(readInt());
+        getDocument().setStartXref(readLong());
         return true;
     }
 
@@ -709,8 +709,8 @@
          */
         while(true)
         {
-            int currObjID = readInt(); // first obj id
-            int count = readInt(); // the number of objects in the xref table
+            long currObjID = readObjectNumber(); // first obj id
+            long count = readLong(); // the number of objects in the xref table
             skipSpaces();
             for(int i = 0; i < count; i++)
             {
Index: pdfbox/src/main/java/org/apache/pdfbox/pdfparser/VisualSignatureParser.java
===================================================================
--- developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/VisualSignatureParser.java	(revision 1467796)
+++ developpement/java/workspace/pdfbox-trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/VisualSignatureParser.java	(working copy)
@@ -176,7 +176,7 @@
         else 
         {
             //we are going to parse an normal object
-            int number = -1;
+            long number = -1;
             int genNum = -1;
             String objectKey = null;
             boolean missingObjectNumber = false;
@@ -189,7 +189,7 @@
                 } 
                 else 
                 {
-                    number = readInt();
+                    number = readObjectNumber();
                 }
             } 
             catch(IOException e) 
@@ -198,12 +198,12 @@
                 //statements after an object, of course this is nonsense
                 //but because we want to support as many PDFs as possible
                 //we will simply try again
-                number = readInt();
+                number = readObjectNumber();
             }
             if(!missingObjectNumber)
             {
                 skipSpaces();
-                genNum = readInt();
+                genNum = readGenerationNumber();
 
                 objectKey = readString(3);
                 //System.out.println( "parseObject() num=" + number +
Index: preflight/src/main/java/org/apache/pdfbox/preflight/parser/PreflightParser.java
===================================================================
--- developpement/java/workspace/pdfbox-trunk/preflight/src/main/java/org/apache/pdfbox/preflight/parser/PreflightParser.java	(revision 1488059)
+++ developpement/java/workspace/pdfbox-trunk/preflight/src/main/java/org/apache/pdfbox/preflight/parser/PreflightParser.java	(working copy)
@@ -352,8 +352,8 @@
         while (true)
         {
             // just after the xref<EOL> there are an integer
-            int currObjID = 0; // first obj id
-            int count = 0; // the number of objects in the xref table
+            long currObjID = 0; // first obj id
+            long count = 0; // the number of objects in the xref table
 
             long offset = pdfSource.getOffset();
             String line = readLine();
@@ -370,8 +370,8 @@
                         "Cross reference subsection header is invalid"));
                 // reset pdfSource cursor to read xref information
                 pdfSource.seek(offset);
-                currObjID = readInt(); // first obj id
-                count = readInt(); // the number of objects in the xref table
+                currObjID = readObjectNumber(); // first obj id
+                count = readLong(); // the number of objects in the xref table
             }
 
             skipSpaces();
@@ -669,7 +669,7 @@
                 // ---- go to object start
                 setPdfSource(offsetOrObjstmObNr);
                 // ---- we must have an indirect object
-                int readObjNr = 0;
+                long readObjNr = 0;
                 int readObjGen = 0;
 
                 long offset = pdfSource.getOffset();
@@ -687,8 +687,8 @@
                     addValidationError(new ValidationError(ERROR_SYNTAX_OBJ_DELIMITER, "Single space expected"));
                     // reset pdfSource cursor to read object information
                     pdfSource.seek(offset);
-                    readObjNr = readInt();
-                    readObjGen = readInt();
+                    readObjNr = readObjectNumber();
+                    readObjGen = readGenerationNumber();
                     for (char c : OBJ_MARKER)
                     {
                         if (pdfSource.read() != c)
