Index: src/java/org/apache/fop/afp/goca/AbstractGraphicsDrawingOrderContainer.java
===================================================================
--- src/java/org/apache/fop/afp/goca/AbstractGraphicsDrawingOrderContainer.java	(revision 746664)
+++ src/java/org/apache/fop/afp/goca/AbstractGraphicsDrawingOrderContainer.java	Mon Jul 13 14:59:03 CEST 2009
@@ -46,6 +46,8 @@
     /** object has started */
     private boolean started = false;
 
+    private int dataLength = 0;
+
     /**
      * Default constructor
      */
@@ -78,6 +80,7 @@
      */
     public void addObject(StructuredData object) {
         objects.add(object);
+        dataLength += object.getDataLength();
     }
 
     /**
@@ -88,6 +91,7 @@
     public void addAll(AbstractGraphicsDrawingOrderContainer graphicsContainer) {
         Collection/*<StructuredDataObject>*/ objects = graphicsContainer.getObjects();
         objects.addAll(objects);
+        dataLength += graphicsContainer.dataLength;
     }
 
     /**
@@ -107,10 +111,12 @@
     public StructuredData removeLast() {
         int lastIndex = objects.size() - 1;
         StructuredData object = null;
-        if (lastIndex > -1) {
-            object = (StructuredData)objects.get(lastIndex);
-            objects.remove(lastIndex);
+        if (lastIndex >= 0) {
+            object = (StructuredData)objects.remove(lastIndex);
         }
+        if (object != null) {
+            dataLength -= object.getDataLength();
+        }
         return object;
     }
 
@@ -121,13 +127,8 @@
      * all enclosed objects (and their containers)
      */
     public int getDataLength() {
-        int dataLen = 0;
-        Iterator it = objects.iterator();
-        while (it.hasNext()) {
-            dataLen += ((StructuredData)it.next()).getDataLength();
+        return this.dataLength;
-        }
+    }
-        return dataLen;
-    }
 
     /** {@inheritDoc} */
     public void setComplete(boolean complete) {
