diff --git a/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java b/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java
index 40370f7..12a6c3e 100644
--- a/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java
@@ -1707,4 +1707,8 @@
     public void setEventBroadcaster(EventBroadcaster eventBroadcaster) {
         this.eventBroadcaster = eventBroadcaster;
     }
+
+    public EventBroadcaster getEventBroadcaster() {
+        return eventBroadcaster;
+    }
 }
diff --git a/fop-core/src/main/java/org/apache/fop/pdf/PDFRoot.java b/fop-core/src/main/java/org/apache/fop/pdf/PDFRoot.java
index b230ad8..7b60384 100644
--- a/fop-core/src/main/java/org/apache/fop/pdf/PDFRoot.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFRoot.java
@@ -23,6 +23,7 @@
 import java.io.OutputStream;
 import java.util.Locale;
 
+import org.apache.fop.render.pdf.PDFEventProducer;
 import org.apache.fop.util.LanguageTags;
 
 /**
@@ -287,6 +288,11 @@
     }
 
     private void setLanguage(String lang) {
+        Object oldLang = get("Lang");
+        if (oldLang != null && !"x-unknown".equals(oldLang) && !lang.equals(oldLang)) {
+            PDFEventProducer eventProducer = PDFEventProducer.Provider.get(document.getFactory().getEventBroadcaster());
+            eventProducer.languageChanged(this, oldLang, lang);
+        }
         put("Lang", lang);
     }
 
diff --git a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFEventProducer.java b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFEventProducer.java
index 24d0eb0..b78b472 100644
--- a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFEventProducer.java
+++ b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFEventProducer.java
@@ -90,4 +90,14 @@
      * @event.severity ERROR
      */
     void unpairedSurrogate(Object source);
+
+    /**
+     * The language was changed between pages
+     *
+     * @param source the event source
+     * @param oldLang current language
+     * @param newLang new language
+     * @event.severity WARN
+     */
+    void languageChanged(Object source, Object oldLang, String newLang);
 }
diff --git a/fop-core/src/main/resources/org/apache/fop/render/pdf/PDFEventProducer.xml b/fop-core/src/main/resources/org/apache/fop/render/pdf/PDFEventProducer.xml
index bc05182..d33d991 100644
--- a/fop-core/src/main/resources/org/apache/fop/render/pdf/PDFEventProducer.xml
+++ b/fop-core/src/main/resources/org/apache/fop/render/pdf/PDFEventProducer.xml
@@ -5,4 +5,5 @@
   <message key="incorrectEncryptionLength">Encryption length must be a multiple of 8 between 40 and 128. Setting encryption length to {correctedValue} instead of {originalValue}.</message>
   <message key="unknownLanguage">A piece of text or an image’s alternate text is missing language information [(See position {location})|(No context info available)]</message>
   <message key="unpairedSurrogate">A unicode char map was found to end with an unpaired surrogate.</message>
+  <message key="languageChanged">Input has xml:lang {oldLang} and {newLang}, PDF will only use {newLang}</message>
 </catalogue>
diff --git a/fop-core/src/test/java/org/apache/fop/pdf/PDFRootTestCase.java b/fop-core/src/test/java/org/apache/fop/pdf/PDFRootTestCase.java
index 67703c1..11470ab 100644
--- a/fop-core/src/test/java/org/apache/fop/pdf/PDFRootTestCase.java
+++ b/fop-core/src/test/java/org/apache/fop/pdf/PDFRootTestCase.java
@@ -1,42 +1,69 @@
-/*
- * 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.
- */
-
-/* $Id: PDFFactoryTestCase.java 1823552 2018-02-08 12:26:33Z ssteiner $ */
-
-package org.apache.fop.pdf;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class PDFRootTestCase {
-
-    @Test
-    public void testAddAf() {
-        String germanAe = "\u00E4";
-        String unicodeFilename = "t" + germanAe + "st.pdf";
-        PDFFileSpec fileSpec = new PDFFileSpec(unicodeFilename);
-
-        String filename = fileSpec.getFilename();
-
-        PDFDocument doc = new PDFDocument("");
-        doc.getRoot().addAF(fileSpec);
-
-        assertEquals(filename, fileSpec.getFilename());
-        assertEquals(unicodeFilename, fileSpec.getUnicodeFilename());
-    }
-}
+/*
+ * 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.
+ */
+
+/* $Id$ */
+package org.apache.fop.pdf;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.junit.Assert;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.FopFactory;
+import org.apache.fop.events.Event;
+import org.apache.fop.events.EventListener;
+
+public class PDFRootTestCase {
+
+    @Test
+    public void testAddAf() {
+        String germanAe = "\u00E4";
+        String unicodeFilename = "t" + germanAe + "st.pdf";
+        PDFFileSpec fileSpec = new PDFFileSpec(unicodeFilename);
+
+        String filename = fileSpec.getFilename();
+
+        PDFDocument doc = new PDFDocument("");
+        doc.getRoot().addAF(fileSpec);
+
+        assertEquals(filename, fileSpec.getFilename());
+        assertEquals(unicodeFilename, fileSpec.getUnicodeFilename());
+    }
+
+    @Test
+    public void testLanguage() {
+        PDFDocument document = new PDFDocument("");
+        FOUserAgent ua = FopFactory.newInstance(new File(".").toURI()).newFOUserAgent();
+        final List<Event> events = new ArrayList<>();
+        ua.getEventBroadcaster().addEventListener(new EventListener() {
+            public void processEvent(Event event) {
+                events.add(event);
+            }
+        });
+        document.getFactory().setEventBroadcaster(ua.getEventBroadcaster());
+        PDFRoot root = new PDFRoot(document, new PDFPages(document));
+        root.setLanguage(Locale.US);
+        Assert.assertTrue(events.isEmpty());
+        root.setLanguage(Locale.UK);
+        assertEquals(events.get(0).getEventKey(), "languageChanged");
+    }
+}
