diff --git a/pdf.c b/pdf.c
index c7d99574018a16d7a53491479e120787080407ab..f3fdb243ef9a54cdfb51999ab9ebde3a6462563f 100644
--- a/pdf.c
+++ b/pdf.c
@@ -13,6 +13,7 @@
 #include <hammer/hammer.h>
 #include <hammer/glue.h>
 #include <errno.h>
+#include <math.h>
 
 /* convenience macros */
 #define SEQ(...)	h_sequence(__VA_ARGS__, NULL)
@@ -375,8 +376,8 @@ typedef struct PtNode_S {
     TextState_T          ts;                    // text state associated with this node
     size_t               offset;                // This may not be useful -- often within encoded streams
     struct {
-        unsigned int    width;                  // page width described by MediaBox
-        unsigned int    height;                 // page height described by MediaBox
+        double    width;                        // page width described by MediaBox
+        double    height;                       // page height described by MediaBox
     } pagesz;
     union {
         struct {
@@ -5022,13 +5023,22 @@ void parse_pagenode (
     if (item) {
         item = resolve(aux, item);
         if (item->token_type == TT_SEQUENCE) {
-            int llx, lly, urx, ury; // typical but can be any diagonal
-            llx = H_INDEX_SINT(item, 0);
-            lly = H_INDEX_SINT(item, 1);
-            urx = H_INDEX_SINT(item, 2);
-            ury = H_INDEX_SINT(item, 3);
-            myNode->mediaBox.tx = abs(llx - urx);
-            myNode->mediaBox.ty = abs(lly - ury);;
+            double llx, lly, urx, ury; // typical but can be any diagonal
+            HParsedToken * token;
+            token = H_INDEX_TOKEN(item, 0);
+            if (token->token_type == TT_SINT)  llx = (double)token->sint;
+            else                               llx =         token->dbl;
+            token = H_INDEX_TOKEN(item, 1);
+            if (token->token_type == TT_SINT)  lly = (double)token->sint;
+            else                               lly =         token->dbl;
+            token = H_INDEX_TOKEN(item, 2);
+            if (token->token_type == TT_SINT)  urx = (double)token->sint;
+            else                               urx =         token->dbl;
+            token = H_INDEX_TOKEN(item, 3);
+            if (token->token_type == TT_SINT)  ury = (double)token->sint;
+            else                               ury =         token->dbl;
+            myNode->mediaBox.tx = fabs(llx - urx);
+            myNode->mediaBox.ty = fabs(lly - ury);;
         }
     }
 
@@ -5192,8 +5202,8 @@ parse_pagetree(
     }
     else {
         myNode->pgRsrc      = NULL;
-        myNode->mediaBox.tx = 0;
-        myNode->mediaBox.ty = 0;
+        myNode->mediaBox.tx = 0.0;
+        myNode->mediaBox.ty = 0.0;
     }
     myNode->offset   = 0;
 
@@ -5252,13 +5262,22 @@ parse_pagetree(
 	if (item) {
 	    item = resolve(aux, item);
 	    if (item->token_type == TT_SEQUENCE) {
-	        int llx, lly, urx, ury; // typical but can be any diagonal
-            llx = H_INDEX_SINT(item, 0);
-            lly = H_INDEX_SINT(item, 1);
-            urx = H_INDEX_SINT(item, 2);
-            ury = H_INDEX_SINT(item, 3);
-            myNode->mediaBox.tx = abs(llx - urx);
-            myNode->mediaBox.ty = abs(lly - ury);;
+	        double llx, lly, urx, ury; // typical but can be any diagonal
+	        HParsedToken * token;
+	        token = H_INDEX_TOKEN(item, 0);
+	        if (token->token_type == TT_SINT)  llx = (double)token->sint;
+	        else                               llx =         token->dbl;
+                token = H_INDEX_TOKEN(item, 1);
+                if (token->token_type == TT_SINT)  lly = (double)token->sint;
+                else                               lly =         token->dbl;
+                token = H_INDEX_TOKEN(item, 2);
+                if (token->token_type == TT_SINT)  urx = (double)token->sint;
+                else                               urx =         token->dbl;
+                token = H_INDEX_TOKEN(item, 3);
+                if (token->token_type == TT_SINT)  ury = (double)token->sint;
+                else                               ury =         token->dbl;
+                myNode->mediaBox.tx = fabs(llx - urx);
+                myNode->mediaBox.ty = fabs(lly - ury);;
 	    }
 	}