diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
index 7e3e315..d258466 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
@@ -638,16 +638,10 @@
                 exclude.add(COSName.P);
                 if (annot1 instanceof COSObject) {
                     COSObject annot = (COSObject) annot1;
-                    COSObject fieldObject = annot;
-                    COSDictionary field = (COSDictionary) fieldObject.getObject();
-                    COSObject parent;
-                    while ((parent = (COSObject) field.getItem(COSName.PARENT)) != null) {
-                        fieldObject = parent;
-                        field = (COSDictionary) fieldObject.getObject();
-                    }
-                    fields.add(fieldObject);
+                    getField(annot, fields);
 
-                    if (((COSDictionary) annot.getObject()).getItem(COSName.getPDFName("StructParent")) != null) {
+
+                    if (((COSDictionary) annot.getObject()).getItem(COSName.STRUCT_PARENT) != null) {
                         exclude.add(COSName.PARENT);
                     }
                 }
@@ -663,6 +657,25 @@
         return fields;
     }
 
+    private COSDictionary getField(COSObject fieldObject, Set<COSObject> fields) {
+        COSDictionary field = (COSDictionary) fieldObject.getObject();
+        COSObject parent;
+        while ((parent = getParent(field)) != null) {
+            fieldObject = parent;
+            field = (COSDictionary) fieldObject.getObject();
+        }
+        fields.add(fieldObject);
+        return field;
+    }
+
+    private COSObject getParent(COSDictionary field) {
+        COSBase parent = field.getItem(COSName.PARENT);
+        if (parent instanceof COSObject) {
+            return (COSObject) parent;
+        }
+        return null;
+    }
+
     static class CompareFields implements Comparator<COSObject>, Serializable {
         private static final long serialVersionUID = -6081505461660440801L;
 
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java b/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
index 48177f1..2436fc8 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
@@ -194,8 +194,7 @@
             copyElemEntries(cosParentElem, elemParent);
             elem.setParent(elemParent);
             fillKidsWithNull(elemParent, (COSDictionary)cosParentElem.getObject());
-            if (((COSName)parentElemDictionary.getDictionaryObject(COSName.S)).getName()
-                .equals(StandardStructureTypes.TR)) {
+            if (parentElemDictionary.getDictionaryObject(COSName.S) == COSName.TR) {
                 COSBase rowKids = parentElemDictionary.getItem(COSName.K);
                 createKids(rowKids, parentElemDictionary, elemParent, true);
             } else {
@@ -378,7 +377,7 @@
         for (COSBase base : originalParentTree) {
             if (base instanceof COSNull || base == null) {
                 complete.add(null);
-            } else {
+            } else if (!list.isEmpty()) {
                 complete.add(list.get(0));
                 list.remove(0);
             }
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index 0b953fb..ae63aba 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -28,6 +28,7 @@
 import java.io.OutputStream;
 import java.net.URI;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -44,8 +45,11 @@
 import org.apache.fontbox.cff.CFFParser;
 import org.apache.fontbox.ttf.TTFParser;
 import org.apache.fontbox.type1.Type1Font;
+import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDResources;
@@ -112,10 +116,10 @@
     private static final String XFORM = "test/resources/xform.pdf";
     private static final String LOOP = "test/resources/loop.pdf";
 
-    private PDFBoxAdapter getPDFBoxAdapter() {
+    private PDFBoxAdapter getPDFBoxAdapter(boolean mergeFonts) {
         PDFDocument doc = new PDFDocument("");
         PDFPage pdfpage = new PDFPage(new PDFResources(doc), 0, r, r, r, r);
-        doc.setMergeFontsEnabled(true);
+        doc.setMergeFontsEnabled(mergeFonts);
         pdfpage.setDocument(doc);
         pdfpage.setObjectNumber(1);
         return new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
@@ -180,7 +184,7 @@
         PDDocument doc = PDDocument.load(new File(pdf));
         PDPage page = doc.getDocumentCatalog().getPages().get(0);
         AffineTransform at = new AffineTransform();
-        String c = getPDFBoxAdapter().createStreamFromPDFBoxPage(doc, page, pdf, at, fi, new Rectangle());
+        String c = getPDFBoxAdapter(true).createStreamFromPDFBoxPage(doc, page, pdf, at, fi, new Rectangle());
 //        PDResources sourcePageResources = page.findResources();
 //        COSDictionary fonts = (COSDictionary)sourcePageResources.getCOSDictionary().getDictionaryObject(COSName.FONT);
 //        PDFBoxAdapter.PDFWriter w = adapter. new MergeFontsPDFWriter(fonts, fi, "", new ArrayList<COSName>());
@@ -356,6 +360,21 @@
     }
 
     @Test
+    public void testAnnot2() throws Exception {
+        PDFBoxAdapter adapter = getPDFBoxAdapter(false);
+        PDDocument doc = PDDocument.load(new File(ANNOT));
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
+        COSArray annots = (COSArray) page.getCOSObject().getDictionaryObject(COSName.ANNOTS);
+        COSDictionary dict = (COSDictionary) ((COSObject)annots.get(0)).getObject();
+        dict.setItem(COSName.PARENT, COSInteger.ONE);
+
+        AffineTransform at = new AffineTransform();
+        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+        adapter.createStreamFromPDFBoxPage(doc, page, "key", at, null, r);
+        doc.close();
+    }
+
+    @Test
     public void testLink() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
         PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
@@ -378,7 +397,7 @@
     @Test
     public void testXform() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
-        pdfdoc.getFilterMap().put(PDFFilterList.DEFAULT_FILTER, Arrays.asList("null"));
+        pdfdoc.getFilterMap().put(PDFFilterList.DEFAULT_FILTER, Collections.singletonList("null"));
         pdfdoc.setMergeFontsEnabled(true);
         PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
         pdfpage.setDocument(pdfdoc);
diff --git a/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java b/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
index ea11639..d0029d8 100644
--- a/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
@@ -35,9 +35,9 @@
 
         COSDictionary rolemap = new COSDictionary();
         COSName key1 = COSName.getPDFName("Para");
-        COSName value1 = COSName.getPDFName("P");
+        COSName value1 = COSName.P;
         COSName key2 = COSName.getPDFName("Icon");
-        COSName value2 = COSName.getPDFName("Image");
+        COSName value2 = COSName.IMAGE;
         rolemap.setItem(key1, value1);
         rolemap.setItem(key2, value2);
         String type = "Image";
