Index: src/java/org/apache/fop/area/BookmarkData.java
===================================================================
--- src/java/org/apache/fop/area/BookmarkData.java	(revision 1056512)
+++ src/java/org/apache/fop/area/BookmarkData.java	(working copy)
@@ -19,8 +19,6 @@
 
 package org.apache.fop.area;
 
-import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -34,13 +32,13 @@
  */
 public class BookmarkData extends AbstractOffDocumentItem implements Resolvable {
 
-    private List subData = new java.util.ArrayList();
+    private List<BookmarkData> subData = new java.util.ArrayList<BookmarkData>();
 
     // bookmark-title for this fo:bookmark
     private String bookmarkTitle = null;
 
     // indicator of whether to initially display/hide child bookmarks of this object
-    private boolean bShow = true;
+    private boolean showChildren = true;
 
     // ID Reference for this bookmark
     private String idRef;
@@ -49,7 +47,8 @@
     private PageViewport pageRef = null;
 
     // unresolved idrefs by this bookmark and child bookmarks below it
-    private Map unresolvedIDRefs = new java.util.HashMap();
+    private Map<String, List<Resolvable>> unresolvedIDRefs
+            = new java.util.HashMap<String, List<Resolvable>>();
 
     /**
      * Create a new bookmark data object.
@@ -59,10 +58,10 @@
      * @param bookmarkTree fo:bookmark-tree for this document
      */
     public BookmarkData(BookmarkTree bookmarkTree) {
-        idRef = null;
-        whenToProcess = END_OF_DOC;
+        this.idRef = null;
+        this.whenToProcess = END_OF_DOC;
         // top level defined in Rec to show all child bookmarks
-        bShow = true;
+        this.showChildren = true;
 
         for (int count = 0; count < bookmarkTree.getBookmarks().size(); count++) {
             Bookmark bkmk = (Bookmark)(bookmarkTree.getBookmarks()).get(count);
@@ -79,15 +78,15 @@
      * @param bookmark the fo:bookmark object
      */
     public BookmarkData(Bookmark bookmark) {
-        bookmarkTitle = bookmark.getBookmarkTitle();
-        bShow = bookmark.showChildItems();
+        this.bookmarkTitle = bookmark.getBookmarkTitle();
+        this.showChildren = bookmark.showChildItems();
         this.idRef = bookmark.getInternalDestination();
     }
 
     private void putUnresolved(String id, BookmarkData bd) {
-        List refs = (List)unresolvedIDRefs.get(id);
+        List<Resolvable> refs = unresolvedIDRefs.get(id);
         if (refs == null) {
-            refs = new java.util.ArrayList();
+            refs = new java.util.ArrayList<Resolvable>();
             unresolvedIDRefs.put(id, refs);
         }
         refs.add(bd);
@@ -101,7 +100,7 @@
     public BookmarkData() {
         idRef = null;
         whenToProcess = END_OF_DOC;
-        bShow = true;
+        showChildren = true;
     }
 
     /**
@@ -116,7 +115,7 @@
      */
     public BookmarkData(String title, boolean showChildren, PageViewport pv, String idRef) {
         bookmarkTitle = title;
-        bShow = showChildren;
+        this.showChildren = showChildren;
         pageRef = pv;
         this.idRef = idRef;
     }
@@ -138,11 +137,11 @@
      */
     public void addSubData(BookmarkData sub) {
         subData.add(sub);
-        if (sub.pageRef == null || sub.pageRef.equals("")) {
+        if (sub.pageRef == null) {
             putUnresolved(sub.getIDRef(), sub);
             String[] ids = sub.getIDRefs();
-            for (int count = 0; count < ids.length; count++) {
-                putUnresolved(ids[count], sub);
+            for (String id : ids) {
+                putUnresolved(id, sub);
             }
         }
     }
@@ -162,7 +161,7 @@
      * @return true to initially display child bookmarks, false otherwise
      */
     public boolean showChildItems() {
-        return bShow;
+        return showChildren;
     }
 
     /**
@@ -181,7 +180,7 @@
      * @return the child bookmark data
      */
     public BookmarkData getSubData(int count) {
-        return (BookmarkData) subData.get(count);
+        return subData.get(count);
     }
 
     /**
@@ -208,7 +207,8 @@
      * {@inheritDoc}
      */
     public String[] getIDRefs() {
-        return (String[])unresolvedIDRefs.keySet().toArray(new String[] {});
+        return unresolvedIDRefs.keySet().toArray(
+                new String[unresolvedIDRefs.keySet().size()]);
     }
 
     /**
@@ -217,22 +217,20 @@
      * resolves id references of child elements that have the same
      * id reference.
      *
-     * {@inheritDoc} List)
+     * {@inheritDoc}
      */
-    public void resolveIDRef(String id, List pages) {
+    public void resolveIDRef(String id, List<PageViewport> pages) {
         if (id.equals(idRef)) {
             //Own ID has been resolved, so note the page
-            pageRef = (PageViewport) pages.get(0);
+            pageRef = pages.get(0);
             //Note: Determining the placement inside the page is the renderer's job.
         }
 
         //Notify all child bookmarks
-        Collection refs = (Collection)unresolvedIDRefs.get(id);
+        List<Resolvable> refs = unresolvedIDRefs.get(id);
         if (refs != null) {
-            Iterator iter = refs.iterator();
-            while (iter.hasNext()) {
-                BookmarkData bd = (BookmarkData)iter.next();
-                bd.resolveIDRef(id, pages);
+            for (Resolvable res : refs) {
+                res.resolveIDRef(id, pages);
             }
         }
         unresolvedIDRefs.remove(id);
Index: src/java/org/apache/fop/area/MainReference.java
===================================================================
--- src/java/org/apache/fop/area/MainReference.java	(revision 1056512)
+++ src/java/org/apache/fop/area/MainReference.java	(working copy)
@@ -34,7 +34,7 @@
     private static final long serialVersionUID = 7635126485620012448L;
 
     private BodyRegion parent;
-    private List spanAreas = new java.util.ArrayList();
+    private List<Span> spanAreas = new java.util.ArrayList<Span>();
     private boolean isEmpty = true;
 
     /**
@@ -59,7 +59,7 @@
             spanAreas.remove(spanAreas.size() - 1);
         }
         RegionViewport rv = parent.getRegionViewport();
-        int ipdWidth = (int) parent.getIPD()
+        int ipdWidth = parent.getIPD()
             - rv.getBorderAndPaddingWidthStart() - rv.getBorderAndPaddingWidthEnd();
 
         Span newSpan = new Span(((spanAll) ? 1 : getColumnCount()),
@@ -84,8 +84,8 @@
      *
      * @param spans content already laid out
      */
-    public void setSpans(List spans) {
-        spanAreas = new ArrayList(spans);
+    public void setSpans(List<Span> spans) {
+        spanAreas = new ArrayList<Span>(spans);
     }
 
     /**
@@ -93,7 +93,7 @@
      * @return the active span.
      */
     public Span getCurrentSpan() {
-        return (Span) spanAreas.get(spanAreas.size() - 1);
+        return spanAreas.get(spanAreas.size() - 1);
     }
 
     /**
@@ -103,16 +103,13 @@
      * @return true if no child areas have been added yet.
      */
     public boolean isEmpty() {
-        if (isEmpty) {
-            boolean nonEmptyFound = false;
-            if (spanAreas != null) {
-                for (Iterator spaniter = spanAreas.iterator(); spaniter.hasNext();) {
-                    Span spanArea = (Span) spaniter.next();
-                    nonEmptyFound |= !spanArea.isEmpty();
+        if (isEmpty && spanAreas != null) {
+            for (Span spanArea : spanAreas) {
+                if (!spanArea.isEmpty()) {
+                    isEmpty = false;
+                    break;
                 }
             }
-
-            isEmpty = !nonEmptyFound;
         }
         return isEmpty;
     }
Index: src/java/org/apache/fop/area/AreaTreeParser.java
===================================================================
--- src/java/org/apache/fop/area/AreaTreeParser.java	(revision 1056512)
+++ src/java/org/apache/fop/area/AreaTreeParser.java	(working copy)
@@ -136,7 +136,7 @@
 
     private static class Handler extends DefaultHandler {
 
-        private Map makers = new java.util.HashMap();
+        private Map<String, AbstractMaker> makers = new java.util.HashMap<String, AbstractMaker>();
 
         private AreaTreeModel treeModel;
         private FOUserAgent userAgent;
@@ -148,14 +148,15 @@
         private boolean ignoreCharacters = true;
 
         private PageViewport currentPageViewport;
-        private Map pageViewportsByKey = new java.util.HashMap();
+        private Map<String, PageViewport> pageViewportsByKey
+                = new java.util.HashMap<String, PageViewport>();
         // set of "ID firsts" that have already been assigned to a PV:
-        private Set idFirstsAssigned = new java.util.HashSet();
+        private Set<String> idFirstsAssigned = new java.util.HashSet<String>();
 
-        private Stack areaStack = new Stack();
+        private Stack<Object> areaStack = new Stack<Object>();
         private boolean firstFlow;
 
-        private Stack delegateStack = new Stack();
+        private Stack<String> delegateStack = new Stack<String>();
         private ContentHandler delegate;
         private DOMImplementation domImplementation;
         private Locator locator;
@@ -228,9 +229,9 @@
             if (areaStack.size() > 0) {
                 int pos = areaStack.size() - 1;
                 Object obj = null;
-                while ( pos >= 0 ) {
+                while (pos >= 0) {
                     obj = areaStack.get(pos);
-                    if ( clazz.isInstance ( obj ) ) {
+                    if (clazz.isInstance(obj)) {
                         break;
                     } else {
                         pos--;
@@ -358,7 +359,7 @@
         private boolean startAreaTreeElement(String localName, Attributes attributes)
                 throws SAXException {
             lastAttributes = new AttributesImpl(attributes);
-            Maker maker = (Maker)makers.get(localName);
+            Maker maker = makers.get(localName);
             content.clear();
             ignoreCharacters = true;
             if (maker != null) {
@@ -387,7 +388,7 @@
                 }
             } else {
                 if ("".equals(uri)) {
-                    Maker maker = (Maker)makers.get(localName);
+                    Maker maker = makers.get(localName);
                     if (maker != null) {
                         maker.endElement();
                         content.clear();
@@ -982,7 +983,7 @@
                         attributes, "show-children", false);
                 String[] linkdata
                         = InternalLink.parseXMLAttribute(attributes.getValue("internal-link"));
-                PageViewport pv = (PageViewport) pageViewportsByKey.get(linkdata[0]);
+                PageViewport pv = pageViewportsByKey.get(linkdata[0]);
                 BookmarkData bm = new BookmarkData(title, showChildren, pv, linkdata[1]);
                 Object tos = areaStack.peek();
                 if (tos instanceof BookmarkData) {
@@ -1002,9 +1003,9 @@
             public void startElement(Attributes attributes) {
                 String[] linkdata
                     = InternalLink.parseXMLAttribute(lastAttributes.getValue("internal-link"));
-                PageViewport pv = (PageViewport) pageViewportsByKey.get(linkdata[0]);
+                PageViewport pv = pageViewportsByKey.get(linkdata[0]);
                 DestinationData dest = new DestinationData(linkdata[1]);
-                List pages = new java.util.ArrayList();
+                List<PageViewport> pages = new java.util.ArrayList<PageViewport>();
                 pages.add(pv);
                 dest.resolveIDRef(linkdata[1], pages);
                 areaStack.push(dest);
@@ -1096,7 +1097,7 @@
 
         private void setTraits(Attributes attributes, Area area, Object[] traitSubset) {
             for (int i = traitSubset.length; --i >= 0;) {
-                Object trait = traitSubset[i];
+                Integer trait = (Integer) traitSubset[i];
                 String traitName = Trait.getTraitName(trait);
                 String value = attributes.getValue(traitName);
                 if (value != null) {
@@ -1107,7 +1108,7 @@
                         area.addTrait(trait, Boolean.valueOf(value));
                     } else if (cl == String.class) {
                         area.addTrait(trait, value);
-                        if (trait == Trait.PROD_ID
+                        if (Trait.PROD_ID.equals(trait)
                                 && !idFirstsAssigned.contains(value)
                                 && currentPageViewport != null) {
                             currentPageViewport.setFirstWithID(value);
@@ -1173,7 +1174,7 @@
                         area.addTrait(trait, BorderProps.valueOf(this.userAgent, value));
                     }
                 } else {
-                    if (trait == Trait.FONT) {
+                    if (Trait.FONT.equals(trait)) {
                         String fontName = attributes.getValue("font-name");
                         if (fontName != null) {
                             String fontStyle = attributes.getValue("font-style");
Index: src/java/org/apache/fop/area/IDTracker.java
===================================================================
--- src/java/org/apache/fop/area/IDTracker.java	(revision 1056512)
+++ src/java/org/apache/fop/area/IDTracker.java	(working copy)
@@ -19,8 +19,7 @@
 
 package org.apache.fop.area;
 
-import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -36,18 +35,20 @@
 
     private static final Log LOG = LogFactory.getLog(IDTracker.class);
 
-    // HashMap of ID's whose area is located on one or more consecutive
-    // PageViewports. Each ID has an arraylist of PageViewports that
+    // Map of ID's whose area is located on one or more consecutive
+    // PageViewports. Each ID has a list of PageViewports that
     // form the defined area of this ID
-    private Map idLocations = new java.util.HashMap();
+    private Map<String, List<PageViewport>> idLocations
+            = new java.util.HashMap<String, List<PageViewport>>();
 
     // idref's whose target PageViewports have yet to be identified
     // Each idref has a HashSet of Resolvable objects containing that idref
-    private Map unresolvedIDRefs = new java.util.HashMap();
+    private Map<String, Set<Resolvable>> unresolvedIDRefs
+            = new java.util.HashMap<String, Set<Resolvable>>();
 
-    private Set unfinishedIDs = new java.util.HashSet();
+    private Set<String> unfinishedIDs = new java.util.HashSet<String>();
 
-    private Set alreadyResolvedIDs = new java.util.HashSet();
+    private Set<String> alreadyResolvedIDs = new java.util.HashSet<String>();
 
     /**
      * Tie a PageViewport with an ID found on a child area of the PV. Note that
@@ -61,9 +62,9 @@
         if (LOG.isDebugEnabled()) {
             LOG.debug("associateIDWithPageViewport(" + id + ", " + pv + ")");
         }
-        List pvList = (List) idLocations.get(id);
+        List<PageViewport> pvList = idLocations.get(id);
         if (pvList == null) { // first time ID located
-            pvList = new ArrayList();
+            pvList = new java.util.ArrayList<PageViewport>();
             idLocations.put(id, pvList);
             pvList.add(pv);
             // signal the PageViewport that it is the first PV to contain this id:
@@ -73,7 +74,7 @@
              * Resolvable objects tied to it.
              */
             if (!unfinishedIDs.contains(id)) {
-                tryIDResolution(id, pv, pvList);
+                tryIDResolution(id, pvList);
             }
         } else {
             /* TODO: The check is a quick-fix to avoid a waste
@@ -116,12 +117,11 @@
         }
         unfinishedIDs.remove(id);
 
-        List pvList = (List) idLocations.get(id);
-        Set todo = (Set) unresolvedIDRefs.get(id);
+        List<PageViewport> idLocs = idLocations.get(id);
+        Set<Resolvable> todo = unresolvedIDRefs.get(id);
         if (todo != null) {
-            for (Iterator iter = todo.iterator(); iter.hasNext();) {
-                Resolvable res = (Resolvable) iter.next();
-                res.resolveIDRef(id, pvList);
+            for (Resolvable res : todo) {
+                res.resolveIDRef(id, idLocs);
             }
             unresolvedIDRefs.remove(id);
         }
@@ -138,17 +138,15 @@
     }
 
     /**
-     * Tries to resolve all unresolved ID references on the given page.
+     * Tries to resolve all unresolved ID references on the given set of pages.
      *
      * @param id ID to resolve
-     * @param pv page viewport whose ID refs to resolve
-     * @param pvList of PageViewports
+     * @param pvList list of PageViewports
      */
-    private void tryIDResolution(String id, PageViewport pv, List pvList) {
-        Set todo = (Set) unresolvedIDRefs.get(id);
+    private void tryIDResolution(String id, List<PageViewport> pvList) {
+        Set<Resolvable> todo = unresolvedIDRefs.get(id);
         if (todo != null) {
-            for (Iterator iter = todo.iterator(); iter.hasNext();) {
-                Resolvable res = (Resolvable) iter.next();
+            for (Resolvable res : todo) {
                 if (!unfinishedIDs.contains(id)) {
                     res.resolveIDRef(id, pvList);
                 } else {
@@ -168,10 +166,10 @@
     public void tryIDResolution(PageViewport pv) {
         String[] ids = pv.getIDRefs();
         if (ids != null) {
-            for (int i = 0; i < ids.length; i++) {
-                List pvList = (List) idLocations.get(ids[i]);
-                if (pvList != null) {
-                    tryIDResolution(ids[i], pv, pvList);
+            for (String id : ids) {
+                List<PageViewport> pvList = idLocations.get(id);
+                if (!(pvList == null || pvList.isEmpty())) {
+                    tryIDResolution(id, pvList);
                 }
             }
         }
@@ -183,20 +181,58 @@
      * @param id the id to lookup
      * @return the list of PageViewports
      */
-    public List getPageViewportsContainingID(String id) {
-        return (List) idLocations.get(id);
+    public List<PageViewport> getPageViewportsContainingID(String id) {
+        if (!(idLocations == null || idLocations.isEmpty())) {
+            List<PageViewport> idLocs = idLocations.get(id);
+            if (idLocs != null) {
+                return idLocs;
+            }
+        }
+        return Collections.emptyList();
     }
 
     /**
+     * Get the first {@link PageViewport} containing content generated
+     * by the FO with the given {@code id}.
+     *
+     * @param id    the id
+     * @return  the first {@link PageViewport} for the id; {@code null} if
+     *          no matching {@link PageViewport} was found
+     */
+    public PageViewport getFirstPageViewportContaining(String id) {
+        List<PageViewport> list = getPageViewportsContainingID(id);
+        if (!(list == null || list.isEmpty())) {
+            return list.get(0);
+        }
+        return null;
+    }
+
+    /**
+     * Get the last {@link PageViewport} containing content generated
+     * by the FO with the given {@code id}.
+     *
+     * @param id    the id
+     * @return  the last {@link PageViewport} for the id; {@code null} if
+     *          no matching {@link PageViewport} was found
+     */
+    public PageViewport getLastPageViewportContaining(String id) {
+        List<PageViewport> list = getPageViewportsContainingID(id);
+        if (!(list == null || list.isEmpty())) {
+            return list.get(list.size() - 1);
+        }
+        return null;
+    }
+
+    /**
      * Add an Resolvable object with an unresolved idref
      *
      * @param idref the idref whose target id has not yet been located
      * @param res the Resolvable object needing the idref to be resolved
      */
     public void addUnresolvedIDRef(String idref, Resolvable res) {
-        Set todo = (Set) unresolvedIDRefs.get(idref);
+        Set<Resolvable> todo = unresolvedIDRefs.get(idref);
         if (todo == null) {
-            todo = new java.util.HashSet();
+            todo = new java.util.HashSet<Resolvable>();
             unresolvedIDRefs.put(idref, todo);
         }
         // add Resolvable object to this HashSet
Index: src/java/org/apache/fop/area/AreaTreeModel.java
===================================================================
--- src/java/org/apache/fop/area/AreaTreeModel.java	(revision 1056512)
+++ src/java/org/apache/fop/area/AreaTreeModel.java	(working copy)
@@ -36,7 +36,7 @@
  * the life of the area tree model.
  */
 public class AreaTreeModel {
-    private List/*<PageSequence>*/ pageSequenceList = null;
+    private List<PageSequence> pageSequenceList = null;
     private int currentPageSequenceIndex = -1;
     /** the current page sequence */
     protected PageSequence currentPageSequence;
@@ -48,7 +48,7 @@
      * Create a new store pages model
      */
     public AreaTreeModel() {
-        pageSequenceList = new java.util.ArrayList/*<PageSequence>*/();
+        pageSequenceList = new java.util.ArrayList<PageSequence>();
     }
 
     /**
@@ -72,7 +72,7 @@
         currentPageSequence.addPage(page);
         int pageIndex = 0;
         for (int i = 0; i < currentPageSequenceIndex; i++) {
-            pageIndex += ((PageSequence)pageSequenceList.get(i)).getPageCount();
+            pageIndex += pageSequenceList.get(i).getPageCount();
         }
         pageIndex += currentPageSequence.getPageCount() - 1;
         page.setPageIndex(pageIndex);
@@ -113,8 +113,7 @@
      * @return returns the number of pages in a page sequence
      */
     public int getPageCount(int seq) {
-        PageSequence sequence = (PageSequence)pageSequenceList.get(seq - 1);
-        return sequence.getPageCount();
+        return pageSequenceList.get(seq - 1).getPageCount();
     }
 
     /**
@@ -124,7 +123,6 @@
      * @return the PageViewport for the particular page
      */
     public PageViewport getPage(int seq, int count) {
-        PageSequence sequence = (PageSequence)pageSequenceList.get(seq - 1);
-        return sequence.getPage(count);
+        return pageSequenceList.get(seq - 1).getPage(count);
     }
 }
Index: src/java/org/apache/fop/area/DestinationData.java
===================================================================
--- src/java/org/apache/fop/area/DestinationData.java	(revision 1056512)
+++ src/java/org/apache/fop/area/DestinationData.java	(working copy)
@@ -101,8 +101,8 @@
      * TODO check to make sure it works if multiple bookmark-items
      * have the same idref
      */
-    public void resolveIDRef(String id, List pages) {
-        pageRef = (PageViewport) pages.get(0);
+    public void resolveIDRef(String id, List<PageViewport> pages) {
+        pageRef = pages.get(0);
         // TODO get rect area of id on page
     }
 
Index: src/java/org/apache/fop/area/PageViewport.java
===================================================================
--- src/java/org/apache/fop/area/PageViewport.java	(revision 1056512)
+++ src/java/org/apache/fop/area/PageViewport.java	(working copy)
@@ -25,7 +25,6 @@
 import java.io.ObjectOutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -34,6 +33,7 @@
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.flow.Marker;
 import org.apache.fop.fo.pagination.SimplePageMaster;
 
 /**
@@ -63,26 +63,24 @@
 
     private transient PageSequence pageSequence;
 
-    // list of id references and the rectangle on the page
-    //private Map idReferences = null;
-
     // set of IDs that appear first (or exclusively) on this page:
-    private Set idFirsts = new java.util.HashSet();
+    private Set<String> idFirsts = new java.util.HashSet<String>();
 
     // this keeps a list of currently unresolved areas or extensions
     // once an idref is resolved it is removed
     // when this is empty the page can be rendered
-    private Map unresolvedIDRefs = new java.util.HashMap();
+    private Map<String, List<Resolvable>> unresolvedIDRefs
+            = new java.util.HashMap<String, List<Resolvable>>();
 
-    private Map pendingResolved = null;
+    private Map<String, List<PageViewport>> pendingResolved = null;
 
     // hashmap of markers for this page
     // start and end are added by the fo that contains the markers
-    private Map markerFirstStart = null;
-    private Map markerLastStart = null;
-    private Map markerFirstAny = null;
-    private Map markerLastEnd = null;
-    private Map markerLastAny = null;
+    private Map<String, Marker> markerFirstStart = null;
+    private Map<String, Marker> markerLastStart = null;
+    private Map<String, Marker> markerFirstAny = null;
+    private Map<String, Marker> markerLastEnd = null;
+    private Map<String, Marker> markerLastAny = null;
 
     /**
      * logging instance
@@ -287,14 +285,14 @@
      */
     public void addUnresolvedIDRef(String idref, Resolvable res) {
         if (unresolvedIDRefs == null) {
-            unresolvedIDRefs = new HashMap();
+            unresolvedIDRefs = new HashMap<String, List<Resolvable>>();
         }
-        List list = (List)unresolvedIDRefs.get(idref);
-        if (list == null) {
-            list = new ArrayList();
-            unresolvedIDRefs.put(idref, list);
+        List<Resolvable> pageViewports = unresolvedIDRefs.get(idref);
+        if (pageViewports == null) {
+            pageViewports = new ArrayList<Resolvable>();
+            unresolvedIDRefs.put(idref, pageViewports);
         }
-        list.add(res);
+        pageViewports.add(res);
     }
 
     /**
@@ -312,24 +310,22 @@
      */
     public String[] getIDRefs() {
         return (unresolvedIDRefs == null) ? null
-            : (String[]) unresolvedIDRefs.keySet().toArray(new String[] {});
+            : unresolvedIDRefs.keySet().toArray(
+                new String[unresolvedIDRefs.keySet().size()]);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public void resolveIDRef(String id, List pages) {
+    /** {@inheritDoc} */
+    public void resolveIDRef(String id, List<PageViewport> pages) {
         if (page == null) {
             if (pendingResolved == null) {
-                pendingResolved = new HashMap();
+                pendingResolved = new HashMap<String, List<PageViewport>>();
             }
             pendingResolved.put(id, pages);
         } else {
             if (unresolvedIDRefs != null) {
-                List todo = (List)unresolvedIDRefs.get(id);
+                List<Resolvable> todo = unresolvedIDRefs.get(id);
                 if (todo != null) {
-                    for (int count = 0; count < todo.size(); count++) {
-                        Resolvable res = (Resolvable)todo.get(count);
+                    for (Resolvable res : todo) {
                         res.resolveIDRef(id, pages);
                     }
                 }
@@ -363,7 +359,7 @@
      * @param isfirst if the area being added has is-first trait
      * @param islast if the area being added has is-last trait
      */
-    public void addMarkers(Map marks, boolean starting,
+    public void addMarkers(Map<String, Marker> marks, boolean starting,
             boolean isfirst, boolean islast) {
 
         if (marks == null) {
@@ -380,14 +376,13 @@
         if (starting) {
             if (isfirst) {
                 if (markerFirstStart == null) {
-                    markerFirstStart = new HashMap();
+                    markerFirstStart = new HashMap<String, Marker>();
                 }
                 if (markerFirstAny == null) {
-                    markerFirstAny = new HashMap();
+                    markerFirstAny = new HashMap<String, Marker>();
                 }
                 // first on page: only put in new values, leave current
-                for (Iterator iter = marks.keySet().iterator(); iter.hasNext();) {
-                    Object key = iter.next();
+                for (String key : marks.keySet()) {
                     if (!markerFirstStart.containsKey(key)) {
                         markerFirstStart.put(key, marks.get(key));
                         if (log.isTraceEnabled()) {
@@ -404,7 +399,7 @@
                     }
                 }
                 if (markerLastStart == null) {
-                    markerLastStart = new HashMap();
+                    markerLastStart = new HashMap<String, Marker>();
                 }
                 // last on page: replace all
                 markerLastStart.putAll(marks);
@@ -414,11 +409,10 @@
                 }
             } else {
                 if (markerFirstAny == null) {
-                    markerFirstAny = new HashMap();
+                    markerFirstAny = new HashMap<String, Marker>();
                 }
                 // first on page: only put in new values, leave current
-                for (Iterator iter = marks.keySet().iterator(); iter.hasNext();) {
-                    Object key = iter.next();
+                for (String key : marks.keySet()) {
                     if (!markerFirstAny.containsKey(key)) {
                         markerFirstAny.put(key, marks.get(key));
                         if (log.isTraceEnabled()) {
@@ -432,7 +426,7 @@
             // at the end of the area, register is-last and any areas
             if (islast) {
                 if (markerLastEnd == null) {
-                    markerLastEnd = new HashMap();
+                    markerLastEnd = new HashMap<String, Marker>();
                 }
                 // last on page: replace all
                 markerLastEnd.putAll(marks);
@@ -442,7 +436,7 @@
                 }
             }
             if (markerLastAny == null) {
-                markerLastAny = new HashMap();
+                markerLastAny = new HashMap<String, Marker>();
             }
             // last on page: replace all
             markerLastAny.putAll(marks);
@@ -462,8 +456,8 @@
      * @param pos the position to retrieve
      * @return Object the marker found or null
      */
-    public Object getMarker(String name, int pos) {
-        Object mark = null;
+    public Marker getMarker(String name, int pos) {
+        Marker mark = null;
         String posName = null;
         switch (pos) {
             case Constants.EN_FSWP:
@@ -550,10 +544,8 @@
         page = (Page) in.readObject();
         unresolvedIDRefs = page.getUnresolvedReferences();
         if (unresolvedIDRefs != null && pendingResolved != null) {
-            for (Iterator iter = pendingResolved.keySet().iterator();
-                         iter.hasNext();) {
-                String id = (String) iter.next();
-                resolveIDRef(id, (List)pendingResolved.get(id));
+            for (String id : pendingResolved.keySet()) {
+                resolveIDRef(id, pendingResolved.get(id));
             }
             pendingResolved = null;
         }
@@ -659,5 +651,4 @@
     public RegionReference getRegionReference(int id) {
         return getPage().getRegionViewport(id).getRegionReference();
     }
-
 }
Index: src/java/org/apache/fop/area/Page.java
===================================================================
--- src/java/org/apache/fop/area/Page.java	(revision 1056923)
+++ src/java/org/apache/fop/area/Page.java	(working copy)
@@ -22,7 +22,7 @@
 import java.awt.Rectangle;
 import java.awt.geom.Rectangle2D;
 import java.io.Serializable;
-import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.fop.datatypes.FODimension;
@@ -58,7 +58,7 @@
     private RegionViewport regionAfter = null;
 
     // temporary map of unresolved objects used when serializing the page
-    private Map unresolved = null;
+    private Map<String, List<Resolvable>> unresolved = null;
 
     /** Set to true to make this page behave as if it were not empty. */
     private boolean fakeNonEmpty = false;
@@ -119,10 +119,8 @@
             spm.getWritingMode(), pageRefRect, reldims);
 
         // Create a RegionViewport/ reference area pair for each page region
-        RegionReference rr = null;
-        for (Iterator regenum = spm.getRegions().values().iterator();
-            regenum.hasNext();) {
-            Region r = (Region)regenum.next();
+        RegionReference rr;
+        for (Region r : spm.getRegions().values()) {
             RegionViewport rvp = makeRegionViewport(r, reldims, pageCTM);
             if (r.getNameId() == Constants.FO_REGION_BODY) {
                 rr = new BodyRegion((RegionBody) r, rvp);
@@ -155,7 +153,7 @@
      * @param pageCTM page coordinate transformation matrix
      * @return the new region viewport
      */
-    private RegionViewport makeRegionViewport(Region r, FODimension reldims, CTM pageCTM) {
+    private static RegionViewport makeRegionViewport(Region r, FODimension reldims, CTM pageCTM) {
         Rectangle2D relRegionRect = r.getViewportRectangle(reldims);
         Rectangle2D absRegionRect = pageCTM.transform(relRegionRect);
         // Get the region viewport rectangle in absolute coords by
@@ -180,7 +178,7 @@
      * where x=distance from left, y=distance from bottom, width=right-left
      * height=top-bottom
      */
-    private void setRegionReferencePosition(RegionReference rr, Region r,
+    private static void setRegionReferencePosition(RegionReference rr, Region r,
                                   Rectangle2D absRegVPRect) {
         FODimension reldims = new FODimension(0, 0);
         rr.setCTM(CTM.getCTMandRelDims(r.getReferenceOrientation(),
@@ -284,7 +282,7 @@
      *
      * @param unres the Map of unresolved objects
      */
-    public void setUnresolvedReferences(Map unres) {
+    public void setUnresolvedReferences(Map<String, List<Resolvable>> unres) {
         unresolved = unres;
     }
 
@@ -295,7 +293,7 @@
      *
      * @return the de-serialized HashMap of unresolved objects
      */
-    public Map getUnresolvedReferences() {
+    public Map<String, List<Resolvable>> getUnresolvedReferences() {
         return unresolved;
     }
 
Index: src/java/org/apache/fop/area/AreaTreeObject.java
===================================================================
--- src/java/org/apache/fop/area/AreaTreeObject.java	(revision 1056512)
+++ src/java/org/apache/fop/area/AreaTreeObject.java	(working copy)
@@ -34,10 +34,10 @@
 public abstract class AreaTreeObject {
 
     /** Foreign attributes */
-    protected Map foreignAttributes = null;
+    protected Map<QName, String> foreignAttributes = null;
 
     /** Extension attachments */
-    protected List/*<ExtensionAttachment>*/ extensionAttachments = null;
+    protected List<ExtensionAttachment> extensionAttachments = null;
 
     /**
      * Sets a foreign attribute.
@@ -46,25 +46,22 @@
      */
     public void setForeignAttribute(QName name, String value) {
         if (this.foreignAttributes == null) {
-            this.foreignAttributes = new java.util.HashMap();
+            this.foreignAttributes = new java.util.HashMap<QName, String>();
         }
         this.foreignAttributes.put(name, value);
     }
 
     /**
-     * Set foreign attributes from a Map.
+     * Add foreign attributes from a Map.
+     *
      * @param atts a Map with attributes (keys: QName, values: String)
      */
-    public void setForeignAttributes(Map atts) {
-        if (atts.size() == 0) {
+    public void setForeignAttributes(Map<QName, String> atts) {
+        if (atts == null || atts.size() == 0) {
             return;
         }
-        Iterator iter = atts.entrySet().iterator();
-        while (iter.hasNext()) {
-            Map.Entry entry = (Map.Entry)iter.next();
-            String value = (String)entry.getValue();
-            //The casting is only to ensure type safety (too bad we can't use generics, yet)
-            setForeignAttribute((QName)entry.getKey(), value);
+        for (Map.Entry<QName, String> e : atts.entrySet()) {
+            setForeignAttribute(e.getKey(), e.getValue());
         }
     }
 
@@ -75,24 +72,24 @@
      */
     public String getForeignAttributeValue(QName name) {
         if (this.foreignAttributes != null) {
-            return (String)this.foreignAttributes.get(name);
+            return this.foreignAttributes.get(name);
         } else {
             return null;
         }
     }
 
     /** @return the foreign attributes associated with this area */
-    public Map getForeignAttributes() {
+    public Map<QName, String> getForeignAttributes() {
         if (this.foreignAttributes != null) {
             return Collections.unmodifiableMap(this.foreignAttributes);
         } else {
-            return Collections.EMPTY_MAP;
+            return Collections.emptyMap();
         }
     }
 
     private void prepareExtensionAttachmentContainer() {
         if (this.extensionAttachments == null) {
-            this.extensionAttachments = new java.util.ArrayList/*<ExtensionAttachment>*/();
+            this.extensionAttachments = new java.util.ArrayList<ExtensionAttachment>();
         }
     }
 
@@ -109,17 +106,17 @@
      * Set extension attachments from a List
      * @param extensionAttachments a List with extension attachments
      */
-    public void setExtensionAttachments(List extensionAttachments) {
+    public void setExtensionAttachments(List<ExtensionAttachment> extensionAttachments) {
         prepareExtensionAttachmentContainer();
         this.extensionAttachments.addAll(extensionAttachments);
     }
 
     /** @return the extension attachments associated with this area */
-    public List getExtensionAttachments() {
+    public List<ExtensionAttachment> getExtensionAttachments() {
         if (this.extensionAttachments != null) {
             return Collections.unmodifiableList(this.extensionAttachments);
         } else {
-            return Collections.EMPTY_LIST;
+            return Collections.emptyList();
         }
     }
 
Index: src/java/org/apache/fop/area/inline/TextArea.java
===================================================================
--- src/java/org/apache/fop/area/inline/TextArea.java	(revision 1056512)
+++ src/java/org/apache/fop/area/inline/TextArea.java	(working copy)
@@ -99,14 +99,12 @@
      */
     public String getText() {
         StringBuffer text = new StringBuffer();
-        InlineArea child;
         // assemble the text
-        for (int i = 0; i < inlines.size(); i++) {
-            child = (InlineArea) inlines.get(i);
-            if (child instanceof WordArea) {
-                text.append(((WordArea) child).getWord());
+        for (InlineArea inline : inlines) {
+            if (inline instanceof WordArea) {
+                text.append(((WordArea) inline).getWord());
             } else {
-                text.append(((SpaceArea) child).getSpace());
+                text.append(((SpaceArea) inline).getSpace());
             }
         }
         return text.toString();
Index: src/java/org/apache/fop/area/inline/Container.java
===================================================================
--- src/java/org/apache/fop/area/inline/Container.java	(revision 1056512)
+++ src/java/org/apache/fop/area/inline/Container.java	(working copy)
@@ -38,7 +38,7 @@
     /**
      * The list of block areas stacked inside this container
      */
-    protected List blocks = new ArrayList();
+    protected List<Block> blocks = new ArrayList<Block>();
 
     /**
      * The width of this container
Index: src/java/org/apache/fop/area/inline/FilledArea.java
===================================================================
--- src/java/org/apache/fop/area/inline/FilledArea.java	(revision 1056512)
+++ src/java/org/apache/fop/area/inline/FilledArea.java	(working copy)
@@ -93,8 +93,7 @@
      */
     public int getBPD() {
         int bpd = 0;
-        for (Iterator childAreaIt = getChildAreas().iterator(); childAreaIt.hasNext();) {
-            InlineArea area = (InlineArea)childAreaIt.next();
+        for (InlineArea area : getChildAreas()) {
             if (bpd < area.getBPD()) {
                 bpd = area.getBPD();
             }
@@ -110,9 +109,9 @@
      *
      * @return the list of child areas copied to fill the width
      */
-    public List getChildAreas() {
-        int units = (int)(getIPD() / unitWidth);
-        List newList = new ArrayList();
+    public List<InlineArea> getChildAreas() {
+        int units = getIPD() / unitWidth;
+        List<InlineArea> newList = new ArrayList<InlineArea>();
         for (int count = 0; count < units; count++) {
             newList.addAll(inlines);
         }
Index: src/java/org/apache/fop/area/inline/UnresolvedPageNumber.java
===================================================================
--- src/java/org/apache/fop/area/inline/UnresolvedPageNumber.java	(revision 1056512)
+++ src/java/org/apache/fop/area/inline/UnresolvedPageNumber.java	(working copy)
@@ -92,18 +92,14 @@
      * @param id an id whose PageViewports have been determined
      * @param pages the list of PageViewports associated with this ID
      */
-    public void resolveIDRef(String id, List pages) {
+    public void resolveIDRef(String id, List<PageViewport> pages) {
         if (!resolved && pageIDRef.equals(id) && pages != null) {
             if (log.isDebugEnabled()) {
                 log.debug("Resolving pageNumber: " + id);
             }
             resolved = true;
-            PageViewport page;
-            if (pageType == FIRST) {
-                page = (PageViewport)pages.get(0);
-            } else {
-                page = (PageViewport)pages.get(pages.size() - 1);
-            }
+            int pageIndex = pageType ? 0 : pages.size() - 1;
+            PageViewport page = pages.get(pageIndex);
             // replace the text
             removeText();
             text = page.getPageNumberString();
Index: src/java/org/apache/fop/area/BlockParent.java
===================================================================
--- src/java/org/apache/fop/area/BlockParent.java	(revision 1056512)
+++ src/java/org/apache/fop/area/BlockParent.java	(working copy)
@@ -50,7 +50,7 @@
     /**
      * The children of this block parent area.
      */
-    protected List children = null;
+    protected List<Area> children = null;
 
     // orientation if reference area
 //    private int orientation = ORIENT_0;
@@ -58,7 +58,7 @@
     /** {@inheritDoc} */
     public void addChildArea(Area childArea) {
         if (children == null) {
-            children = new ArrayList();
+            children = new ArrayList<Area>();
         }
         children.add(childArea);
     }
Index: src/java/org/apache/fop/area/PageSequence.java
===================================================================
--- src/java/org/apache/fop/area/PageSequence.java	(revision 1056512)
+++ src/java/org/apache/fop/area/PageSequence.java	(working copy)
@@ -26,7 +26,7 @@
  */
 public class PageSequence extends AreaTreeObject {
 
-    private List pages = new java.util.ArrayList();
+    private List<PageViewport> pages = new java.util.ArrayList<PageViewport>();
     private LineArea title;
     private String language;
     private String country;
@@ -75,7 +75,7 @@
      * @return the requested page or null if it was not found
      */
     public PageViewport getPage(int idx) {
-        return (PageViewport)this.pages.get(idx);
+        return this.pages.get(idx);
     }
 
     /**
Index: src/java/org/apache/fop/area/CachedRenderPagesModel.java
===================================================================
--- src/java/org/apache/fop/area/CachedRenderPagesModel.java	(revision 1056512)
+++ src/java/org/apache/fop/area/CachedRenderPagesModel.java	(working copy)
@@ -48,7 +48,7 @@
  * the contents are reloaded.
  */
 public class CachedRenderPagesModel extends RenderPagesModel {
-    private Map pageMap = new HashMap();
+    private Map<PageViewport, String> pageMap = new HashMap<PageViewport, String>();
 
     /** Base directory to save temporary file in, typically points to the user's temp dir. */
     protected File baseDir;
@@ -77,7 +77,7 @@
                 if (pageViewport != newpage) {
                     try {
                         // load page from cache
-                        String name = (String)pageMap.get(pageViewport);
+                        String name = pageMap.get(pageViewport);
                         File tempFile = new File(baseDir, name);
                         log.debug("Loading page from: " + tempFile);
                         ObjectInputStream in = new ObjectInputStream(
Index: src/java/org/apache/fop/area/Area.java
===================================================================
--- src/java/org/apache/fop/area/Area.java	(revision 1056512)
+++ src/java/org/apache/fop/area/Area.java	(working copy)
@@ -132,7 +132,7 @@
     /**
      * Traits for this area stored in a HashMap
      */
-    protected Map props = null;
+    protected Map<Integer, Object> props = null;
 
     /**
      * logging instance
@@ -239,7 +239,7 @@
 
         Integer padWidth = (Integer) getTrait(Trait.PADDING_BEFORE);
         if (padWidth != null) {
-            margin += padWidth.intValue();
+            margin += padWidth;
         }
 
         return margin;
@@ -260,7 +260,7 @@
 
         Integer padWidth = (Integer) getTrait(Trait.PADDING_AFTER);
         if (padWidth != null) {
-            margin += padWidth.intValue();
+            margin += padWidth;
         }
 
         return margin;
@@ -280,7 +280,7 @@
 
         Integer padWidth = (Integer) getTrait(Trait.PADDING_START);
         if (padWidth != null) {
-            margin += padWidth.intValue();
+            margin += padWidth;
         }
 
         return margin;
@@ -300,7 +300,7 @@
 
         Integer padWidth = (Integer) getTrait(Trait.PADDING_END);
         if (padWidth != null) {
-            margin += padWidth.intValue();
+            margin += padWidth;
         }
 
         return margin;
@@ -315,7 +315,7 @@
         int margin = 0;
         Integer space = (Integer) getTrait(Trait.SPACE_BEFORE);
         if (space != null) {
-            margin = space.intValue();
+            margin = space;
         }
         return margin;
     }
@@ -329,7 +329,7 @@
         int margin = 0;
         Integer space = (Integer) getTrait(Trait.SPACE_AFTER);
         if (space != null) {
-            margin = space.intValue();
+            margin = space;
         }
         return margin;
     }
@@ -343,7 +343,7 @@
         int margin = 0;
         Integer space = (Integer) getTrait(Trait.SPACE_START);
         if (space != null) {
-            margin = space.intValue();
+            margin = space;
         }
         return margin;
     }
@@ -357,7 +357,7 @@
         int margin = 0;
         Integer space = (Integer) getTrait(Trait.SPACE_END);
         if (space != null) {
-            margin = space.intValue();
+            margin = space;
         }
         return margin;
     }
@@ -380,9 +380,9 @@
      */
     public void addTrait(Object traitCode, Object prop) {
         if (props == null) {
-            props = new java.util.HashMap(20);
+            props = new java.util.HashMap<Integer, Object>(20);
         }
-        props.put(traitCode, prop);
+        props.put((Integer)traitCode, prop);
     }
 
     /**
@@ -390,7 +390,7 @@
      *
      * @return the map of traits
      */
-    public Map getTraits() {
+    public Map<Integer, Object> getTraits() {
         return this.props;
     }
 
@@ -402,44 +402,44 @@
     /**
      * Get a trait from this area.
      *
-     * @param oTraitCode the trait key
+     * @param traitCode the trait key
      * @return the trait value
      */
-    public Object getTrait(Object oTraitCode) {
-        return (props != null ? props.get(oTraitCode) : null);
+    public Object getTrait(Integer traitCode) {
+        return (props != null ? props.get(traitCode) : null);
     }
 
     /**
      * Checks whether a certain trait is set on this area.
-     * @param oTraitCode the trait key
+     * @param traitCode the trait key
      * @return true if the trait is set
      */
-    public boolean hasTrait(Object oTraitCode) {
-        return (getTrait(oTraitCode) != null);
+    public boolean hasTrait(Integer traitCode) {
+        return (getTrait(traitCode) != null);
     }
 
     /**
      * Get a boolean trait from this area.
-     * @param oTraitCode the trait key
+     * @param traitCode the trait key
      * @return the trait value
      */
-    public boolean getTraitAsBoolean(Object oTraitCode) {
-        return Boolean.TRUE.equals(getTrait(oTraitCode));
+    public boolean getTraitAsBoolean(Integer traitCode) {
+        return Boolean.TRUE.equals(getTrait(traitCode));
     }
 
     /**
      * Get a trait from this area as an integer.
      *
-     * @param oTraitCode the trait key
+     * @param traitCode the trait key
      * @return the trait value
      */
-    public int getTraitAsInteger(Object oTraitCode) {
-        final Object obj = getTrait(oTraitCode);
+    public int getTraitAsInteger(Integer traitCode) {
+        final Object obj = getTrait(traitCode);
         if (obj instanceof Integer) {
-            return ((Integer)obj).intValue();
+            return (Integer) obj;
         } else {
             throw new IllegalArgumentException("Trait "
-                    + oTraitCode.getClass().getName()
+                    + traitCode.getClass().getName()
                     + " could not be converted to an integer");
         }
     }
Index: src/java/org/apache/fop/area/LinkResolver.java
===================================================================
--- src/java/org/apache/fop/area/LinkResolver.java	(revision 1056512)
+++ src/java/org/apache/fop/area/LinkResolver.java	(working copy)
@@ -23,12 +23,6 @@
 import java.util.List;
 import java.io.Serializable;
 
-// FOP
-import org.apache.fop.area.Trait;
-import org.apache.fop.area.Resolvable;
-import org.apache.fop.area.PageViewport;
-import org.apache.fop.area.Area;
-
 /**
  * Link resolving for resolving internal links.
  */
@@ -72,8 +66,8 @@
      *
      * {@inheritDoc}
      */
-    public void resolveIDRef(String id, List pages) {
-        resolveIDRef(id, (PageViewport)pages.get(0));
+    public void resolveIDRef(String id, List<PageViewport> pages) {
+        resolveIDRef(id, pages.get(0));
     }
 
     /**
Index: src/java/org/apache/fop/area/LineArea.java
===================================================================
--- src/java/org/apache/fop/area/LineArea.java	(revision 1056512)
+++ src/java/org/apache/fop/area/LineArea.java	(working copy)
@@ -75,7 +75,7 @@
     // this class can contain the dominant char styling info
     // this means that many renderers can optimise a bit
 
-    private List inlineAreas = new ArrayList();
+    private List<InlineArea> inlineAreas = new ArrayList<InlineArea>();
 
     /**
      * default constructor:
@@ -150,8 +150,8 @@
         int ipd = 0;
         int bpd = 0;
         for (int i = 0, len = inlineAreas.size(); i < len; i++) {
-            ipd = Math.max(ipd, ((InlineArea)inlineAreas.get(i)).getAllocIPD());
-            bpd += ((InlineArea)inlineAreas.get(i)).getAllocBPD();
+            ipd = Math.max(ipd, inlineAreas.get(i).getAllocIPD());
+            bpd += inlineAreas.get(i).getAllocBPD();
         }
         setIPD(ipd);
         setBPD(bpd);
@@ -179,11 +179,11 @@
                 break;
             case Constants.EN_CENTER:
                 // re-compute indent
-                addTrait(Trait.START_INDENT, new Integer(getStartIndent() - ipdVariation / 2));
+                addTrait(Trait.START_INDENT, getStartIndent() - ipdVariation / 2);
                 break;
             case Constants.EN_END:
                 // re-compute indent
-                addTrait(Trait.START_INDENT, new Integer(getStartIndent() - ipdVariation));
+                addTrait(Trait.START_INDENT, getStartIndent() - ipdVariation);
                 break;
             case Constants.EN_JUSTIFY:
                 // compute variation factor
Index: src/java/org/apache/fop/area/AreaTreeHandler.java
===================================================================
--- src/java/org/apache/fop/area/AreaTreeHandler.java	(revision 1059389)
+++ src/java/org/apache/fop/area/AreaTreeHandler.java	(working copy)
@@ -21,7 +21,6 @@
 
 // Java
 import java.io.OutputStream;
-import java.util.Iterator;
 import java.util.List;
 
 import org.xml.sax.SAXException;
@@ -210,10 +209,8 @@
         }
     }
 
-    private void wrapAndAddExtensionAttachments(List list) {
-        Iterator it = list.iterator();
-        while (it.hasNext()) {
-            ExtensionAttachment attachment = (ExtensionAttachment) it.next();
+    private void wrapAndAddExtensionAttachments(List<ExtensionAttachment> list) {
+        for (ExtensionAttachment attachment : list) {
             addOffDocumentItem(new OffDocumentExtensionAttachment(attachment));
         }
     }
@@ -287,10 +284,10 @@
         finishPrevPageSequence(null);
         // process fox:destination elements
         if (rootFObj != null) {
-            List destinationList = rootFObj.getDestinationList();
+            List<Destination> destinationList = rootFObj.getDestinationList();
             if (destinationList != null) {
                 while (destinationList.size() > 0) {
-                    Destination destination = (Destination) destinationList.remove(0);
+                    Destination destination = destinationList.remove(0);
                     DestinationData destinationData = new DestinationData(destination);
                     addOffDocumentItem(destinationData);
                 }
@@ -325,15 +322,15 @@
         if (odi instanceof Resolvable) {
             Resolvable res = (Resolvable) odi;
             String[] ids = res.getIDRefs();
-            for (int count = 0; count < ids.length; count++) {
-                List pageVPList = idTracker.getPageViewportsContainingID(ids[count]);
+            for (String id : ids) {
+                List<PageViewport> pageVPList = idTracker.getPageViewportsContainingID(id);
                 if (pageVPList != null) {
-                    res.resolveIDRef(ids[count], pageVPList);
+                    res.resolveIDRef(id, pageVPList);
                 } else {
                     AreaEventProducer eventProducer = AreaEventProducer.Provider.get(
                             getUserAgent().getEventBroadcaster());
-                    eventProducer.unresolvedIDReference(this, odi.getName(), ids[count]);
-                    idTracker.addUnresolvedIDRef(ids[count], res);
+                    eventProducer.unresolvedIDReference(this, odi.getName(), id);
+                    idTracker.addUnresolvedIDRef(id, res);
                 }
             }
             // check to see if ODI is now fully resolved, if so process it
@@ -414,13 +411,13 @@
     }
 
     /**
-     * Get the list of page viewports that have an area with a given id.
+     * Get the set of page viewports that have an area with a given id.
      *
      * @param id the id to lookup
      * @return the list of PageViewports
      * @deprecated use getIDTracker().getPageViewportsContainingID(id) instead
      */
-    public List getPageViewportsContainingID(String id) {
+    public List<PageViewport> getPageViewportsContainingID(String id) {
         return idTracker.getPageViewportsContainingID(id);
     }
 
Index: src/java/org/apache/fop/area/Resolvable.java
===================================================================
--- src/java/org/apache/fop/area/Resolvable.java	(revision 1056512)
+++ src/java/org/apache/fop/area/Resolvable.java	(working copy)
@@ -59,5 +59,5 @@
      * @param pages the list of PageViewports with the given ID
      *
      */
-    void resolveIDRef(String id, List pages);
+    void resolveIDRef(String id, List<PageViewport> pages);
 }
