Index: server/src/java/org/apache/jackrabbit/server/io/DefaultIOManager.java
===================================================================
--- server/src/java/org/apache/jackrabbit/server/io/DefaultIOManager.java	(revision 395459)
+++ server/src/java/org/apache/jackrabbit/server/io/DefaultIOManager.java	(working copy)
@@ -36,7 +36,7 @@
         this(true);
     }
 
-    protected DefaultIOManager(boolean doInit) {
+    public DefaultIOManager(boolean doInit) {
         if (doInit) {
            init();
         }
Index: server/src/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java
===================================================================
--- server/src/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java	(revision 395459)
+++ server/src/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java	(working copy)
@@ -18,10 +18,12 @@
 import org.apache.log4j.Logger;
 import org.apache.jackrabbit.server.io.IOManager;
 import org.apache.jackrabbit.server.io.DefaultIOManager;
+import org.apache.jackrabbit.server.io.IOHandler;
 import org.apache.jackrabbit.webdav.xml.ElementIterator;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.w3c.dom.Element;
 import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
 import org.xml.sax.SAXException;
 
 import javax.jcr.Item;
@@ -35,6 +37,7 @@
 import java.util.ArrayList;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Constructor;
 
 /**
  * <code>ResourceConfig</code>...
@@ -54,9 +57,11 @@
      * <pre>
      * &lt;!ELEMENT config (iomanager, (collection | noncollection)?, filter?) &gt;
      * &lt;!ELEMENT iomanager (class) &gt;
+     * &lt;!ELEMENT iohandlers (iohandler) &gt;
      * &lt;!ELEMENT collection (nodetypes) &gt;
      * &lt;!ELEMENT noncollection (nodetypes) &gt;
      * &lt;!ELEMENT filter (class, namespaces?, nodetypes?) &gt;
+     * &lt;!ELEMENT iohandler (class) &gt;
      * &lt;!ELEMENT class &gt;
      *    &lt;!ATTLIST class
      *      name  CDATA #REQUIRED
@@ -84,9 +89,15 @@
                 return;
             }
 
+            Element elIOhandlers = DomUtil.getChildElement(config, "iohandlers", null);
+
             Element el = DomUtil.getChildElement(config, "iomanager", null);
             if (el != null) {
-                Object inst = buildClassFromConfig(el);
+                Object inst;
+                if (elIOhandlers != null)
+                    inst = buildIOManagerFromConfig(el,false);
+                else
+                    inst = buildClassFromConfig(el);
                 if (inst != null && inst instanceof IOManager) {
                     ioManager = (IOManager)inst;
                 }
@@ -94,6 +105,13 @@
                 log.error("Resource configuration: mandatory 'iomanager' element is missing.");
             }
 
+            if (elIOhandlers != null)
+            {
+                if (this.ioManager == null)
+                    this.ioManager = new DefaultIOManager(false);
+                parseIOHandlers(elIOhandlers);
+            }
+
             el = DomUtil.getChildElement(config, "collection", null);
             if (el != null) {
                 nodetypeNames = parseNodeTypesEntry(el);
@@ -126,6 +144,68 @@
         }
     }
 
+    private void parseIOHandlers(Element el) {
+        NodeList elHandlers = el.getElementsByTagName("iohandler");
+        if (elHandlers != null) {
+            for (int i = 0; i < elHandlers.getLength(); i++) {
+                Element elHandler = (Element) elHandlers.item(i);
+                Object inst = buildIOHandlerFromConfig(elHandler, ioManager);
+                if (inst != null && inst instanceof IOHandler) {
+                    this.ioManager.addIOHandler((IOHandler) inst);
+                }
+                else {
+                    log.error("Resource configuration: the handler is not a valid IOHandler.");
+                }
+            }
+        } else {
+            log.error("Resource configuration: mandatory 'iohandler' elements is missing.");
+        }
+    }
+
+    private Object buildIOManagerFromConfig(Element parent, boolean init) {
+        Object instance = null;
+        Element classElem = DomUtil.getChildElement(parent, "class", null);
+        if (classElem != null) {
+            // contains a 'class' child node
+            try {
+                    String className = DomUtil.getAttribute(classElem, "name", null);
+                if (className != null) {
+                    Class c = Class.forName(className);
+                    Constructor cnst =c.getConstructor( new Class[] { Boolean.TYPE } );
+
+                    instance = cnst.newInstance( new Object[] { new Boolean(init) } );
+                    } else {
+                    log.error("Invalid configuration: missing 'class' element");
+                }
+            } catch (Exception e) {
+                log.error("Error while create class instance: " + e.getMessage());
+            }
+        }
+        return instance;
+    }
+
+    private Object buildIOHandlerFromConfig(Element parent, IOManager ioManager) {
+        Object instance = null;
+        Element classElem = DomUtil.getChildElement(parent, "class", null);
+        if (classElem != null) {
+            // contains a 'class' child node
+            try {
+                    String className = DomUtil.getAttribute(classElem, "name", null);
+                if (className != null) {
+                    Class c = Class.forName(className);
+                    Constructor cnst =c.getConstructor( new Class[] { IOManager.class } );
+
+                    instance = cnst.newInstance( new Object[] { ioManager } );
+                    } else {
+                    log.error("Invalid configuration: missing 'class' element");
+                }
+            } catch (Exception e) {
+                log.error("Error while create class instance: " + e.getMessage());
+            }
+        }
+        return instance;
+    }
+
     private Object buildClassFromConfig(Element parent) {
         Object instance = null;
         Element classElem = DomUtil.getChildElement(parent, "class", null);
Index: webapp/src/webapp/WEB-INF/config.xml
===================================================================
--- webapp/src/webapp/WEB-INF/config.xml	(revision 395459)
+++ webapp/src/webapp/WEB-INF/config.xml	(working copy)
@@ -5,15 +5,20 @@
 
         <!ELEMENT iomanager (class) >
 
+        <!ELEMENT iohandlers (iohandler) >
+
         <!ELEMENT collection (nodetypes) >
         <!ELEMENT noncollection (nodetypes) >
 
         <!ELEMENT filter (class, namespaces?, nodetypes?) >
 
+        <!ELEMENT iohandler (class) >
+
         <!ELEMENT class >
         <!ATTLIST class
             name  CDATA #REQUIRED
         >
+        
         <!ELEMENT namespaces (prefix | uri)* >
         <!ELEMENT prefix (CDATA) >
         <!ELEMENT uri (CDATA) >
@@ -33,7 +38,29 @@
              must implement the IOManager interface -->
         <class name="org.apache.jackrabbit.server.io.DefaultIOManager" />
     </iomanager>
+
     <!--
+    Defines the list of IOHandlers implementations that are responsible for import/export.
+    -->
+    <iohandlers>
+        <!--<iohandler>
+            <class name="org.apache.jackrabbit.server.io.VersionHandler" />
+        </iohandler> -->
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.ZipHandler" />
+        </iohandler>
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.XmlHandler" />
+        </iohandler>
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.DirListingExportHandler" />
+        </iohandler>
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.DefaultHandler" />
+        </iohandler>
+    </iohandlers>
+
+    <!--
     Defines nodetypes, that should always be displayed as 'collection'.
     -->
     <!--
