diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index ac8a6c6..7be1cab 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -60,6 +60,7 @@
 IMPROVEMENTS OVER PREVIOUS RELEASE
 ===================================
 
+ * [DIGESTER-152] The DigesterLoader doesn't allow binding a default Locator
  * [DIGESTER-151] The DigesterLoader doesn't allow binding a default ErrorHandler.
 
 DEPRECATIONS
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 21ec341..506f3db 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -26,6 +26,9 @@
     <action dev="simonetripodi" type="add" issue="DIGESTER-153">
       Add Constructor support to ObjectCreateRule
     </action>
+    <action dev="simonetripodi" type="add" issue="DIGESTER-152">
+      The org.apache.commons.digester3.binder.DigesterLoader doesn't allow binding a default org.xml.sax.Locator
+    </action>
     <action dev="simonetripodi" type="add" issue="DIGESTER-151">
       The org.apache.commons.digester3.binder.DigesterLoader doesn't allow binding a default org.xml.sax.ErrorHandler.
     </action>
diff --git a/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java b/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
index f1c29e3..5e91f25 100644
--- a/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
+++ b/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
@@ -43,6 +43,7 @@
 import org.apache.commons.digester3.Substitutor;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
 
@@ -145,6 +146,12 @@
     private ErrorHandler errorHandler = null;
 
     /**
+     * The Locator associated with our parser.
+     * @since 3.2
+     */
+    private Locator locator = null;
+
+    /**
      * Creates a new {@link DigesterLoader} instance given a collection of {@link RulesModule} instance.
      *
      * @param rulesModules The modules containing the {@code Rule} binding
@@ -409,6 +416,29 @@
     }
 
     /**
+     * Gets the document locator associated with our parser.
+     *
+     * @return the Locator supplied by the document parser
+     * @since 3.2
+     */
+    public Locator getDocumentLocator()
+    {
+        return locator;
+    }
+
+    /**
+     * Sets the document locator associated with our parser.
+     *
+     * @param locator the document locator associated with our parser.
+     * @since 3.2
+     */
+    public DigesterLoader setDocumentLocator( Locator locator )
+    {
+        this.locator = locator;
+        return this;
+    }
+
+    /**
      * Creates a new {@link Digester} instance that relies on the default {@link Rules} implementation.
      *
      * @return a new {@link Digester} instance
@@ -517,6 +547,7 @@
         digester.setNamespaceAware( isNamespaceAware() );
         digester.setExecutorService( executorService );
         digester.setErrorHandler( errorHandler );
+        digester.setDocumentLocator( locator );
 
         addRules( digester );
 
diff --git a/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java b/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java
index 9a77484..86dea27 100644
--- a/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java
+++ b/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java
@@ -25,6 +25,7 @@
 import org.apache.commons.digester3.Digester;
 import org.junit.Test;
 import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
@@ -76,4 +77,51 @@
         assertSame( expected, actual );
     }
 
+    @Test
+    public void digeser152()
+    {
+        Locator expected = new Locator()
+        {
+
+            public String getSystemId()
+            {
+                // just fake method
+                return null;
+            }
+
+            public String getPublicId()
+            {
+                // just fake method
+                return null;
+            }
+
+            public int getLineNumber()
+            {
+                // just fake method
+                return 0;
+            }
+
+            public int getColumnNumber()
+            {
+                // just fake method
+                return 0;
+            }
+        };
+
+        Digester digester = newLoader( new AbstractRulesModule()
+        {
+
+            @Override
+            protected void configure()
+            {
+                // do nothing
+            }
+
+        } ).setDocumentLocator( expected ).newDigester();
+
+        Locator actual = digester.getDocumentLocator();
+
+        assertSame( expected, actual );
+    }
+
 }
