diff --git a/fop-core/src/main/java/org/apache/fop/area/MainReference.java b/fop-core/src/main/java/org/apache/fop/area/MainReference.java
index c3d5534..06271dc 100644
--- a/fop-core/src/main/java/org/apache/fop/area/MainReference.java
+++ b/fop-core/src/main/java/org/apache/fop/area/MainReference.java
@@ -37,7 +37,7 @@
     private BodyRegion parent;
     private List<Span> spanAreas = new java.util.ArrayList<Span>();
     private boolean isEmpty = true;
-    private WritingModeTraitsGetter wmtg;
+    private transient WritingModeTraitsGetter wmtg;
 
     /**
      * Constructor
diff --git a/fop-core/src/test/java/org/apache/fop/render/ConserveMemoryTestCase.java b/fop-core/src/test/java/org/apache/fop/render/ConserveMemoryTestCase.java
new file mode 100644
index 0000000..ae1b974
--- /dev/null
+++ b/fop-core/src/test/java/org/apache/fop/render/ConserveMemoryTestCase.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fop.render;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.junit.Test;
+
+import org.xml.sax.SAXException;
+
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.Fop;
+import org.apache.fop.apps.FopFactory;
+
+public class ConserveMemoryTestCase {
+    @Test
+    public void testLink() throws TransformerException, SAXException {
+        String fo = "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n"
+                + "  <fo:layout-master-set>\n"
+                + "    <fo:simple-page-master master-name=\"simple\" page-height=\"27.9cm\" page-width=\"21.6cm\">\n"
+                + "      <fo:region-body />\n"
+                + "    </fo:simple-page-master>\n"
+                + "  </fo:layout-master-set>\n"
+                + "  <fo:page-sequence master-reference=\"simple\">\n"
+                + "    <fo:flow flow-name=\"xsl-region-body\">\n"
+                + " <fo:block><fo:basic-link internal-destination=\"a\">a</fo:basic-link></fo:block>\n"
+                + "    </fo:flow>\n"
+                + "  </fo:page-sequence>\n"
+                + "</fo:root>";
+        foToOutput(fo);
+    }
+
+    private void foToOutput(String fo) throws SAXException, TransformerException {
+        FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
+        FOUserAgent userAgent = fopFactory.newFOUserAgent();
+        userAgent.setConserveMemoryPolicy(true);
+        Fop fop = fopFactory.newFop("application/pdf", userAgent, new ByteArrayOutputStream());
+        Transformer transformer = TransformerFactory.newInstance().newTransformer();
+        Source src = new StreamSource(new ByteArrayInputStream(fo.getBytes()));
+        Result res = new SAXResult(fop.getDefaultHandler());
+        transformer.transform(src, res);
+    }
+}
