Index: src/main/cpp/domconfigurator.cpp
===================================================================
--- src/main/cpp/domconfigurator.cpp	(revision 1061597)
+++ src/main/cpp/domconfigurator.cpp	(working copy)
@@ -742,7 +742,12 @@
             } else {
                 AppenderMap appenders;
                 CharsetDecoderPtr utf8Decoder(CharsetDecoder::getUTF8Decoder());
-                parse(p, utf8Decoder, doc->root, doc, appenders);
+				int found_root = 0;
+				//LogLog::error(LOG4CXX_STR("Calling parse ") + filename.getPath() + LOG4CXX_STR("..."));
+                parse(p, utf8Decoder, doc->root, doc, appenders, found_root);
+				if (found_root < 1){
+					LogLog::error(LOG4CXX_STR("Could not find root <configuration> element."));
+				}
             }
         }
 }
@@ -863,25 +868,26 @@
                             log4cxx::helpers::CharsetDecoderPtr& utf8Decoder,
                             apr_xml_elem* element,
                             apr_xml_doc* doc,
-                            AppenderMap& appenders)
+                            AppenderMap& appenders,
+							int &found_root)
 {
     std::string rootElementName(element->name);
 
-    if (rootElementName != CONFIGURATION_TAG)
-        {
-                if(rootElementName == OLD_CONFIGURATION_TAG)
-                {
-                        //LogLog::warn(LOG4CXX_STR("The <")+String(OLD_CONFIGURATION_TAG)+
-                        // LOG4CXX_STR("> element has been deprecated."));
-                        //LogLog::warn(LOG4CXX_STR("Use the <")+String(CONFIGURATION_TAG)+
-                        // LOG4CXX_STR("> element instead."));
-                }
-                else
-                {
-                        LogLog::error(LOG4CXX_STR("DOM element is - not a <configuration> element."));
-                        return;
-                }
-    }
+    if (rootElementName != CONFIGURATION_TAG && rootElementName != OLD_CONFIGURATION_TAG)
+    {
+		// keep parsing till we find a root tag
+		if (!found_root && element->first_child){
+			apr_xml_elem *ce = element->first_child;
+			while (ce){
+				parse(p, utf8Decoder, ce, doc, appenders, found_root);
+				if (found_root)
+					break;
+				ce = ce->next;
+			}
+		}
+	}else
+		found_root = 1;
+	
 
     LogString debugAttrib = subst(getAttribute(utf8Decoder, element, INTERNAL_DEBUG_ATTR));
 
Index: src/main/include/log4cxx/xml/domconfigurator.h
===================================================================
--- src/main/include/log4cxx/xml/domconfigurator.h	(revision 1061597)
+++ src/main/include/log4cxx/xml/domconfigurator.h	(working copy)
@@ -206,7 +206,8 @@
                             log4cxx::helpers::CharsetDecoderPtr& utf8Decoder,
                             apr_xml_elem* element, 
                             apr_xml_doc* doc,
-                            AppenderMap& appenders);
+                            AppenderMap& appenders,
+                            int &found_root);
 
                 public:
                         DOMConfigurator();
