diff --git a/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java b/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java
index e9a0625..7888dd5 100644
--- a/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java
+++ b/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java
@@ -19,6 +19,10 @@
  * under the License.
  */
 
+import static java.lang.String.format;
+
+import java.util.Arrays;
+
 import org.apache.commons.digester3.ObjectCreateRule;
 
 /**
@@ -112,6 +116,40 @@
      * @return
      * @since 3.2
      */
+    public ObjectCreateBuilder usingConstructor( String...paramTypeNames )
+    {
+        if ( paramTypeNames == null )
+        {
+            reportError( "createObject().usingConstructor( String[] )", "NULL parametersTypes not allowed" );
+        }
+
+        Class<?>[] paramTypes = null;
+        if ( paramTypeNames != null )
+        {
+            paramTypes = new Class<?>[paramTypeNames.length];
+            for ( int i = 0; i < paramTypeNames.length; i++ )
+            {
+                try
+                {
+                    paramTypes[i] = classLoader.loadClass( paramTypeNames[i] );
+                }
+                catch ( ClassNotFoundException e )
+                {
+                    this.reportError( format( "createObject().usingConstructor( %s )",
+                                              Arrays.toString( paramTypeNames ) ),
+                                      format( "class '%s' cannot be load", paramTypeNames[i] ) );
+                }
+            }
+        }
+
+        return usingConstructor( paramTypes );
+    }
+
+    /**
+     *
+     * @return
+     * @since 3.2
+     */
     public ObjectCreateBuilder usingConstructor( Class<?>...constructorArgumentsType )
     {
         if ( constructorArgumentsType == null )
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/ObjectCreateRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/ObjectCreateRule.java
index 0bc38fb..d179c4b 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/ObjectCreateRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/ObjectCreateRule.java
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import java.util.StringTokenizer;
+
 import org.apache.commons.digester3.binder.LinkedRuleBuilder;
 import org.apache.commons.digester3.binder.ObjectCreateBuilder;
 import org.apache.commons.digester3.binder.RulesBinder;
@@ -46,14 +48,19 @@
         ObjectCreateBuilder builder = linkedRuleBuilder.createObject()
             .ofType( attributes.getValue( "classname" ) )
             .ofTypeSpecifiedByAttribute( attributes.getValue( "attrname" ) );
-        getDigester().push( builder );
-    }
 
-    @Override
-    public void end( String namespace, String name )
-        throws Exception
-    {
-        getDigester().pop();
+        String paramTypesStr = attributes.getValue( "paramtypes" );
+        if ( paramTypesStr != null && paramTypesStr.length() > 0 )
+        {
+            StringTokenizer tokens = new StringTokenizer( paramTypesStr, " \t\n\r," );
+            String[] paramTypeNames = new String[tokens.countTokens()];
+            int counter = 0;
+            while ( tokens.hasMoreTokens() )
+            {
+                paramTypeNames[counter++] = tokens.nextToken();
+            }
+            builder.usingConstructor( paramTypeNames );
+        }
     }
 
 }
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/ObjectParamRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/ObjectParamRule.java
deleted file mode 100644
index 2cb1669..0000000
--- a/src/main/java/org/apache/commons/digester3/xmlrules/ObjectParamRule.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.commons.digester3.xmlrules;
-
-/*
- * 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.
- */
-
-import static org.apache.commons.beanutils.ConvertUtils.convert;
-
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.ObjectParamBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
-import org.xml.sax.Attributes;
-
-/**
- * 
- */
-final class ObjectParamRule
-    extends AbstractXmlRule
-{
-
-    public ObjectParamRule( RulesBinder targetRulesBinder, PatternStack patternStack )
-    {
-        super( targetRulesBinder, patternStack );
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
-        throws Exception
-    {
-        // create callparamrule
-        int paramIndex = Integer.parseInt( attributes.getValue( "paramnumber" ) );
-
-        String attributeName = attributes.getValue( "attrname" );
-        String type = attributes.getValue( "type" );
-        String value = attributes.getValue( "value" );
-
-        // type name is requried
-        if ( type == null )
-        {
-            throw new RuntimeException( "Attribute 'type' is required." );
-        }
-
-        // create object instance
-        Object param = null;
-        Class<?> clazz = Class.forName( type );
-        if ( value == null )
-        {
-            param = clazz.newInstance();
-        }
-        else
-        {
-            param = convert( value, clazz );
-        }
-
-        ObjectParamBuilder<?> builder = linkedRuleBuilder.objectParam( param ).ofIndex( paramIndex );
-        if ( attributeName != null )
-        {
-            builder.matchingAttribute( attributeName );
-        }
-    }
-
-}
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 6a5ba25..8d572ef 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java
@@ -85,7 +85,6 @@
 
             forPattern( "*/call-method-rule" ).addRule( new CallMethodRule( targetRulesBinder, patternStack ) );
             forPattern( "*/call-param-rule" ).addRule( new CallParamRule( targetRulesBinder, patternStack ) );
-            forPattern( "*/object-param-rule" ).addRule( new ObjectParamRule( targetRulesBinder, patternStack ) );
 
             forPattern( "*/factory-create-rule" ).addRule( new FactoryCreateRule( targetRulesBinder, patternStack ) );
             forPattern( "*/node-create-rule" ).addRule( new NodeCreateRule( targetRulesBinder, patternStack ) );
diff --git a/src/main/resources/org/apache/commons/digester3/xmlrules/digester-rules.dtd b/src/main/resources/org/apache/commons/digester3/xmlrules/digester-rules.dtd
index 921fab7..942a807 100644
--- a/src/main/resources/org/apache/commons/digester3/xmlrules/digester-rules.dtd
+++ b/src/main/resources/org/apache/commons/digester3/xmlrules/digester-rules.dtd
@@ -185,15 +185,12 @@
     ignore-exceptions  CDATA #IMPLIED>
 
 <!-- ObjectCreateRule -->
-<!ELEMENT object-create-rule (constructor-argument)*>
+<!ELEMENT object-create-rule EMPTY>
 <!ATTLIST object-create-rule
-    pattern   CDATA #IMPLIED
-    classname CDATA #REQUIRED
-    attrname  CDATA #IMPLIED>
-<!ELEMENT constructor-argument EMPTY>
-<!ATTLIST constructor-argument
-    attrname  CDATA #IMPLIED
-    type      CDATA #REQUIRED>
+    pattern    CDATA #IMPLIED
+    classname  CDATA #REQUIRED
+    attrname   CDATA #IMPLIED
+    paramtypes CDATA #IMPLIED>
 
 <!-- SetPropertiesRule -->
 <!ELEMENT set-properties-rule (alias)*>
diff --git a/src/site/resources/dtds/digester-rules-3.0.dtd b/src/site/resources/dtds/digester-rules-3.0.dtd
index 921fab7..942a807 100644
--- a/src/site/resources/dtds/digester-rules-3.0.dtd
+++ b/src/site/resources/dtds/digester-rules-3.0.dtd
@@ -185,15 +185,12 @@
     ignore-exceptions  CDATA #IMPLIED>
 
 <!-- ObjectCreateRule -->
-<!ELEMENT object-create-rule (constructor-argument)*>
+<!ELEMENT object-create-rule EMPTY>
 <!ATTLIST object-create-rule
-    pattern   CDATA #IMPLIED
-    classname CDATA #REQUIRED
-    attrname  CDATA #IMPLIED>
-<!ELEMENT constructor-argument EMPTY>
-<!ATTLIST constructor-argument
-    attrname  CDATA #IMPLIED
-    type      CDATA #REQUIRED>
+    pattern    CDATA #IMPLIED
+    classname  CDATA #REQUIRED
+    attrname   CDATA #IMPLIED
+    paramtypes CDATA #IMPLIED>
 
 <!-- SetPropertiesRule -->
 <!ELEMENT set-properties-rule (alias)*>
diff --git a/src/test/java/org/apache/commons/digester3/Digester153TestCase.java b/src/test/java/org/apache/commons/digester3/Digester153TestCase.java
index 325924a..d79204b 100644
--- a/src/test/java/org/apache/commons/digester3/Digester153TestCase.java
+++ b/src/test/java/org/apache/commons/digester3/Digester153TestCase.java
@@ -26,6 +26,7 @@
 import org.apache.commons.digester3.annotations.FromAnnotationsRuleModule;
 import org.apache.commons.digester3.binder.AbstractRulesModule;
 import org.apache.commons.digester3.binder.RulesModule;
+import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
 import org.junit.Test;
 
 /**
@@ -122,7 +123,7 @@
         } );
     }
 
-    /* @Test
+    @Test
     public void basicConstructorViaXML()
         throws Exception
     {
@@ -136,7 +137,7 @@
             }
 
         } );
-    } */
+    }
 
     private void succesfullConstructor( RulesModule rulesModule )
         throws Exception
diff --git a/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml b/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml
index cc3a595..a4ecc48 100644
--- a/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml
+++ b/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml
@@ -18,9 +18,9 @@
 -->
 <digester-rules>
   <pattern value="toplevel/bean">
-    <object-create-rule classname="org.apache.commons.digester3.TestBean">
-      <constructor-argument attrname="boolean" type="java.lang.Boolean" />
-      <constructor-argument attrname="double" type="java.lang.Double" />
-    </object-create-rule>
+    <object-create-rule classname="org.apache.commons.digester3.TestBean"
+      paramtypes="java.lang.Boolean,java.lang.Double" />
+    <call-param-rule paramnumber="0" attrname="boolean" />
+    <call-param-rule paramnumber="1" attrname="double" />
   </pattern>
 </digester-rules>
