diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 5a89ebe..cd94138 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -60,6 +60,7 @@
 IMPROVEMENTS OVER PREVIOUS RELEASE
 ===================================
 
+ * [DIGESTER-157] Improve Set(Nested)PropertiesRuleAlias performances in the XML ruleset while binding rules
  * [DIGESTER-156] Make (Nested|Set)PropertiesBuilder#addAlias() fluent.
  * [DIGESTER-152] The DigesterLoader doesn't allow binding a default Locator
  * [DIGESTER-151] The DigesterLoader doesn't allow binding a default ErrorHandler.
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 39343b3..d3d266c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -23,6 +23,9 @@
   </properties>
   <body>
   <release version="3.2" date="201?-??-??" description="Maintenance release.">
+    <action dev="simonetripodi" type="fix" issue="DIGESTER-157">
+      Improve Set(Nested)PropertiesRuleAlias performances in the XML ruleset while binding rules.
+    </action>
     <action dev="simonetripodi" type="fix" issue="DIGESTER-156">
       Make (Nested|Set)PropertiesBuilder#addAlias() fluent.
     </action>
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java
index e3a3d6d..4cb2d0e 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java
@@ -19,33 +19,29 @@
  * under the License.
  */
 
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.binder.NestedPropertiesBuilder;
 import org.xml.sax.Attributes;
 
 /**
  *
  */
 final class SetNestedPropertiesAliasRule
-    extends AbstractXmlRule
+    extends Rule
 {
 
-    public SetNestedPropertiesAliasRule( RulesBinder targetRulesBinder, PatternStack patternStack )
-    {
-        super( targetRulesBinder, patternStack );
-    }
-
     /**
      * {@inheritDoc}
      */
     @Override
-    protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
+    public void begin( String namespace, String name, Attributes attributes )
         throws Exception
     {
         String elementName = attributes.getValue( "attr-name" );
         String propertyName = attributes.getValue( "prop-name" );
 
-        linkedRuleBuilder.setNestedProperties().addAlias( elementName ).forProperty( propertyName );
+        NestedPropertiesBuilder builder = getDigester().peek();
+        builder.addAlias( elementName ).forProperty( propertyName );
     }
 
 }
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesIgnoreRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesIgnoreRule.java
index b5aa987..1b4bcae 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesIgnoreRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesIgnoreRule.java
@@ -19,32 +19,28 @@
  * under the License.
  */
 
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.binder.NestedPropertiesBuilder;
 import org.xml.sax.Attributes;
 
 /**
- * 
+ *
  */
 final class SetNestedPropertiesIgnoreRule
-    extends AbstractXmlRule
+    extends Rule
 {
 
-    public SetNestedPropertiesIgnoreRule( RulesBinder targetRulesBinder, PatternStack patternStack )
-    {
-        super( targetRulesBinder, patternStack );
-    }
-
     /**
      * {@inheritDoc}
      */
     @Override
-    protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
+    public void begin( String namespace, String name, Attributes attributes )
         throws Exception
     {
         String elementName = attributes.getValue( "elem-name" );
 
-        linkedRuleBuilder.setNestedProperties().ignoreElement( elementName );
+        NestedPropertiesBuilder builder = getDigester().peek();
+        builder.ignoreElement( elementName );
     }
 
 }
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesRule.java
index acaeb9b..121e081 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesRule.java
@@ -20,11 +20,12 @@
  */
 
 import org.apache.commons.digester3.binder.LinkedRuleBuilder;
+import org.apache.commons.digester3.binder.NestedPropertiesBuilder;
 import org.apache.commons.digester3.binder.RulesBinder;
 import org.xml.sax.Attributes;
 
 /**
- * 
+ *
  */
 final class SetNestedPropertiesRule
     extends AbstractXmlRule
@@ -44,7 +45,20 @@
     {
         boolean allowUnknownChildElements =
             "true".equalsIgnoreCase( attributes.getValue( "allow-unknown-child-elements" ) );
-        linkedRuleBuilder.setNestedProperties().allowUnknownChildElements( allowUnknownChildElements );
+        NestedPropertiesBuilder builder = linkedRuleBuilder
+                                            .setNestedProperties()
+                                            .allowUnknownChildElements( allowUnknownChildElements );
+        getDigester().push( builder );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void end( String namespace, String name )
+        throws Exception
+    {
+        getDigester().pop();
     }
 
 }
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java
index a61f4f5..a485bd7 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java
@@ -19,33 +19,29 @@
  * under the License.
  */
 
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.binder.SetPropertiesBuilder;
 import org.xml.sax.Attributes;
 
 /**
  *
  */
 final class SetPropertiesAliasRule
-    extends AbstractXmlRule
+    extends Rule
 {
 
-    public SetPropertiesAliasRule( RulesBinder targetRulesBinder, PatternStack patternStack )
-    {
-        super( targetRulesBinder, patternStack );
-    }
-
     /**
      * {@inheritDoc}
      */
     @Override
-    protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
+    public void begin( String namespace, String name, Attributes attributes )
         throws Exception
     {
         String attributeName = attributes.getValue( "attr-name" );
         String propertyName = attributes.getValue( "prop-name" );
 
-        linkedRuleBuilder.setProperties().addAlias( attributeName ).forProperty( propertyName );
+        SetPropertiesBuilder builder = getDigester().peek();
+        builder.addAlias( attributeName ).forProperty( propertyName );
     }
 
 }
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesIgnoreRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesIgnoreRule.java
index b954aa9..b75756c 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesIgnoreRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesIgnoreRule.java
@@ -19,32 +19,27 @@
  * under the License.
  */
 
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.binder.SetPropertiesBuilder;
 import org.xml.sax.Attributes;
 
 /**
- * 
+ *
  */
 final class SetPropertiesIgnoreRule
-    extends AbstractXmlRule
+    extends Rule
 {
 
-    public SetPropertiesIgnoreRule( RulesBinder targetRulesBinder, PatternStack patternStack )
-    {
-        super( targetRulesBinder, patternStack );
-    }
-
     /**
      * {@inheritDoc}
      */
-    @Override
-    protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
+    public void begin(String namespace, String name, Attributes attributes)
         throws Exception
     {
         String attributeName = attributes.getValue( "attr-name" );
 
-        linkedRuleBuilder.setProperties().ignoreAttribute( attributeName );
+        SetPropertiesBuilder builder = getDigester().peek();
+        builder.ignoreAttribute( attributeName );
     }
 
 }
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesRule.java
index e589623..3595e35 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesRule.java
@@ -21,10 +21,11 @@
 
 import org.apache.commons.digester3.binder.LinkedRuleBuilder;
 import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.binder.SetPropertiesBuilder;
 import org.xml.sax.Attributes;
 
 /**
- * 
+ *
  */
 final class SetPropertiesRule
     extends AbstractXmlRule
@@ -43,7 +44,19 @@
         throws Exception
     {
         boolean ignoreMissingProperty = "true".equalsIgnoreCase( attributes.getValue( "ignore-missing-property" ) );
-        linkedRuleBuilder.setProperties().ignoreMissingProperty( ignoreMissingProperty );
+
+        SetPropertiesBuilder builder = linkedRuleBuilder.setProperties().ignoreMissingProperty( ignoreMissingProperty );
+        getDigester().push( builder );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void end( String namespace, String name )
+        throws Exception
+    {
+        getDigester().pop();
     }
 
 }
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java b/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java
index d6c7621..29b0f99 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java
@@ -94,18 +94,18 @@
 
             forPattern( "*/set-properties-rule" ).addRule( new SetPropertiesRule( targetRulesBinder, patternStack ) );
             forPattern( "*/set-properties-rule/alias" )
-                .addRule( new SetPropertiesAliasRule( targetRulesBinder, patternStack ) );
+                .addRule( new SetPropertiesAliasRule() );
             forPattern( "*/set-properties-rule/ignore" )
-                .addRule( new SetPropertiesIgnoreRule( targetRulesBinder, patternStack ) );
+                .addRule( new SetPropertiesIgnoreRule() );
 
             forPattern( "*/set-property-rule" ).addRule( new SetPropertyRule( targetRulesBinder, patternStack ) );
 
             forPattern( "*/set-nested-properties-rule" )
                 .addRule( new SetNestedPropertiesRule( targetRulesBinder, patternStack ) );
             forPattern( "*/set-nested-properties-rule/alias" )
-                .addRule( new SetNestedPropertiesAliasRule( targetRulesBinder, patternStack ) );
+                .addRule( new SetNestedPropertiesAliasRule() );
             forPattern( "*/set-nested-properties-rule/ignore" )
-                .addRule( new SetPropertiesIgnoreRule( targetRulesBinder, patternStack ) );
+                .addRule( new SetNestedPropertiesIgnoreRule() );
 
             forPattern( "*/set-top-rule" ).addRule( new SetTopRule( targetRulesBinder, patternStack ) );
             forPattern( "*/set-next-rule" ).addRule( new SetNextRule( targetRulesBinder, patternStack ) );
