diff --git a/Rakefile b/Rakefile
index 4018b9f..800e543 100644
--- a/Rakefile
+++ b/Rakefile
@@ -88,7 +88,7 @@
       "scheduler-simple", "bpel-schemas", "bpel-store", "utils", "agents", "clustering"),
       AXIOM, AXIS2_ALL, COMMONS.lang, COMMONS.collections, COMMONS.httpclient, COMMONS.lang,
       DERBY, GERONIMO.kernel, GERONIMO.transaction, JAVAX.activation, JAVAX.servlet, JAVAX.stream,
-      JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J
+      JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J2
 
     test.exclude 'org.apache.ode.axis2.management.*'
     test.with project("tools"), AXIOM, JAVAX.javamail, COMMONS.codec, COMMONS.httpclient, XERCES, WOODSTOX, JACKSON
@@ -105,8 +105,8 @@
       AXIS2_ALL, ANNONGEN, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.fileupload, COMMONS.io, COMMONS.httpclient, COMMONS.beanutils,
       COMMONS.lang, COMMONS.pool, DERBY, DERBY_TOOLS, JACOB, JAXEN, JAVAX.activation, JAVAX.ejb, JAVAX.javamail,
       JAVAX.connector, JAVAX.jms, JAVAX.persistence, JAVAX.transaction, JAVAX.stream,  JIBX,
-      GERONIMO.connector, GERONIMO.kernel, GERONIMO.transaction, LOG4J, OPENJPA, SAXON, TRANQL,
-      WOODSTOX, WSDL4J, WS_COMMONS, XALAN, XERCES, XMLBEANS, SPRING, AXIS2_MODULES.libs, SLF4J, LOG4J, HAZELCAST
+      GERONIMO.connector, GERONIMO.kernel, GERONIMO.transaction, LOG4J2, OPENJPA, SAXON, TRANQL,
+      WOODSTOX, WSDL4J, WS_COMMONS, XALAN, XERCES, XMLBEANS, SPRING, AXIS2_MODULES.libs, SLF4J, HAZELCAST
 
     package(:war).with(:libs=>libs).path("WEB-INF").tap do |web_inf|
       web_inf.merge project("dao-jpa-ojpa-derby").package(:zip)
@@ -132,7 +132,7 @@
       end
     end
 
-    test.using :testng, :forkmode=>'perTest', :properties=>{ "org.apache.commons.logging.LogFactory" => "org.apache.commons.logging.impl.LogFactoryImpl", "log4j.configuration"=>"test-log4j.properties", "test.ports" => ENV['TEST_PORTS'], "org.apache.ode.scheduler.deleteJobsOnStart" => "true", "org.apache.ode.autoRetireProcess"=>"true" } , :java_args=>['-Xmx2048m', '-XX:MaxPermSize=256m'] #'-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6001',
+    test.using :testng, :forkmode=>'perTest', :properties=>{ "log4j.configurationFile"=>"test-log4j2.xml", "test.ports" => ENV['TEST_PORTS'], "org.apache.ode.scheduler.deleteJobsOnStart" => "true", "org.apache.ode.autoRetireProcess"=>"true" } , :java_args=>['-Xmx2048m', '-XX:MaxPermSize=256m'] #'-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6001',
     test.with [projects("tools", 'bpel-obj'), libs, AXIS2_MODULES.mods, AXIOM, JAVAX.servlet, Buildr::Jetty::REQUIRES, HIBERNATE, DOM4J, H2::REQUIRES, SPRING_TEST, JACKSON].uniq
     webapp_dir = "#{test.compile.target}/webapp"
     test.setup task(:prepare_webapp) do |task|
@@ -168,7 +168,7 @@
 
   desc "ODE APIs"
   define "bpel-api" do
-    compile.with projects("utils", "bpel-nobj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J
+    compile.with projects("utils", "bpel-nobj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J2
     package :jar
   end
 
@@ -181,9 +181,9 @@
   desc "ODE BPEL Compiler"
   define "bpel-compiler" do
     compile.with projects("bpel-api", "bpel-nobj", "bpel-schemas", "utils"),
-      JAVAX.stream, JAXEN, SAXON, WSDL4J, XALAN, XERCES, COMMONS.collections, SLF4J, LOG4J, JACKSON, OBJECT_DIFF
+      JAVAX.stream, JAXEN, SAXON, WSDL4J, XALAN, XERCES, COMMONS.collections, SLF4J, LOG4J2, JACKSON, OBJECT_DIFF
     test.resources { filter(project("bpel-scripts").path_to("src/main/resources")).into(test.resources.target).run }
-    test.with LOG4J, projects("bpel-obj")
+    test.with LOG4J2, projects("bpel-obj")
     package :jar
   end
 
@@ -203,14 +203,14 @@
   define "bpel-epr" do
     compile.with projects("utils", "bpel-dao", "bpel-api"),
       AXIOM, COMMONS.lang, COMMONS.beanutils, DERBY, JAVAX.connector, JAVAX.stream, JAVAX.transaction, 
-      GERONIMO.transaction, GERONIMO.connector, TRANQL, XMLBEANS, SLF4J, LOG4J, H2::REQUIRES
+      GERONIMO.transaction, GERONIMO.connector, TRANQL, XMLBEANS, SLF4J, LOG4J2, H2::REQUIRES
     test.with XERCES
     package :jar
   end
 
   desc "ODE Clustering"
    define "clustering" do
-     compile.with projects("bpel-api","bpel-store"),HAZELCAST, COMMONS.logging
+     compile.with projects("bpel-api","bpel-store"),HAZELCAST, SLF4J
      package :jar
    end
 
@@ -222,7 +222,7 @@
 
   desc "New ODE BPEL Object Model"
   define "bpel-nobj" do
-    compile.with projects("utils", "bpel-obj"), JACKSON, LOG4J, SAXON, WSDL4J, COMMONS.collections, COMMONS.logging, OBJECT_DIFF
+    compile.with projects("utils", "bpel-obj"), JACKSON, LOG4J2, SAXON, WSDL4J, COMMONS.collections, SLF4J, OBJECT_DIFF
     package :jar
 	test.with XERCES
   end
@@ -242,7 +242,7 @@
 
     compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-epr", "bpel-nobj", "bpel-schemas",
       "bpel-store", "utils", "agents","clustering"),
-      COMMONS.collections, COMMONS.httpclient, JACOB, JAVAX.persistence, JAVAX.stream, JAXEN, SAXON, WSDL4J, XMLBEANS, SPRING, SLF4J, LOG4J,
+      COMMONS.collections, COMMONS.httpclient, JACOB, JAVAX.persistence, JAVAX.stream, JAXEN, SAXON, WSDL4J, XMLBEANS, SPRING, SLF4J, LOG4J2,
 	  JACKSON, JAVAX.connector
 
     test.with projects("scheduler-simple", "dao-jpa", "dao-hibernate", "bpel-epr", "bpel-obj"),
@@ -256,7 +256,7 @@
 
   desc "ODE Simple Scheduler"
   define "scheduler-simple" do
-    compile.with projects("bpel-api", "utils"), COMMONS.collections, JAVAX.transaction, SLF4J, LOG4J
+    compile.with projects("bpel-api", "utils"), COMMONS.collections, JAVAX.transaction, SLF4J, LOG4J2
     test.compile.with H2::REQUIRES, HSQLDB, GERONIMO.kernel, GERONIMO.transaction
     test.with H2::REQUIRES, HSQLDB, JAVAX.transaction, JAVAX.resource, JAVAX.connector, 
           GERONIMO.kernel, GERONIMO.transaction, GERONIMO.connector, TRANQL, BACKPORT, JAVAX.ejb
@@ -281,7 +281,7 @@
   define "bpel-store" do
     compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-nobj", "bpel-schemas", "bpel-epr",
       "dao-hibernate", "dao-jpa", "utils"),
-      JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J, JACKSON, H2::REQUIRES
+      JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J2, JACKSON, H2::REQUIRES
     compile { open_jpa_enhance }
     resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
 
@@ -297,7 +297,7 @@
       "bpel-store", "utils", "bpel-epr", "dao-hibernate", "agents", "scheduler-simple"),
       DERBY, JUnit.dependencies, JAVAX.persistence, OPENJPA, WSDL4J, COMMONS.httpclient, COMMONS.io,
       GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, JAVAX.connector, JAVAX.ejb, JAVAX.transaction, TRANQL, "tranql:tranql-connector-derby-common:jar:1.1",
-      SPRING_TEST, COMMONS.codec, SLF4J, LOG4J
+      SPRING_TEST, COMMONS.codec, SLF4J, LOG4J2
 
     test.using :properties=>{ "org.apache.ode.autoRetireProcess"=>"true" }
     test.with projects("bpel-nobj", "bpel-obj", "bpel-schemas", "bpel-scripts"),
@@ -310,7 +310,7 @@
   desc "ODE Hibernate DAO Implementation"
   define "dao-hibernate" do
     compile.with projects("bpel-api", "bpel-dao", "bpel-ql", "utils"),
-      COMMONS.lang, JAVAX.transaction, HIBERNATE, DOM4J, SLF4J, LOG4J
+      COMMONS.lang, JAVAX.transaction, HIBERNATE, DOM4J, SLF4J, LOG4J2
     resources hibernate_doclet(:package=>"org.apache.ode.daohib.bpel.hobj", :excludedtags=>"@version,@author,@todo")
 
     # doclet does not support not-found="ignore"
@@ -381,7 +381,7 @@
   desc "ODE OpenJPA DAO Implementation"
   define "dao-jpa" do
     compile.with projects("bpel-api", "bpel-dao", "utils"),
-      COMMONS.collections, JAVAX.connector, JAVAX.persistence, JAVAX.transaction, OPENJPA, XERCES, COMMONS.logging, SLF4J, LOG4J
+      COMMONS.collections, JAVAX.connector, JAVAX.persistence, JAVAX.transaction, OPENJPA, XERCES, SLF4J, LOG4J2
     compile { open_jpa_enhance }
     package :jar
   end
@@ -404,9 +404,9 @@
     h2_db = H2.create("ode-jpa-h2", _("target/h2-jpadb")=>_("target/h2.sql"))
 
     test.with projects("bpel-api", "bpel-dao", "bpel-nobj", "bpel-epr", "dao-jpa", "utils"),
-      BACKPORT, COMMONS.collections, COMMONS.lang, COMMONS.logging, GERONIMO.transaction,
+      BACKPORT, COMMONS.collections, COMMONS.lang, GERONIMO.transaction,
       GERONIMO.kernel, GERONIMO.connector, HSQLDB, JAVAX.connector, JAVAX.ejb, JAVAX.persistence,
-      JAVAX.transaction, LOG4J, OPENJPA, XERCES, WSDL4J, H2::REQUIRES
+      JAVAX.transaction, LOG4J2, OPENJPA, XERCES, WSDL4J, H2::REQUIRES, SLF4J
 
     build derby_db
     build h2_db
@@ -420,7 +420,7 @@
   define "jbi" do
     compile.with projects("bpel-api", "bpel-connector", "bpel-dao", "bpel-epr", "bpel-nobj", 
       "bpel-runtime", "scheduler-simple", "bpel-schemas", "bpel-store", "utils", "agents"),
-      AXIOM, COMMONS.logging, COMMONS.pool, JAVAX.transaction, GERONIMO.transaction, JBI, SLF4J, LOG4J, WSDL4J, XERCES
+      AXIOM, COMMONS.pool, JAVAX.transaction, GERONIMO.transaction, JBI, SLF4J, LOG4J2, WSDL4J, XERCES
 
     package(:jar)
     package(:jbi).tap do |jbi|
@@ -448,7 +448,7 @@
       JAVAX.transaction, JAXEN, JBI, OPENJPA, SAXON, SERVICEMIX, SPRING, TRANQL,
       XALAN, XBEAN, XMLBEANS,
       SLF4J,
-      LOG4J,
+      LOG4J2,
       DOM4J,
       HIBERNATE,
 	  JACKSON
@@ -465,8 +465,8 @@
 
   desc "ODE Commmands for Karaf"
   define "jbi-karaf-commands" do
-    compile.with projects("bpel-schemas", "jbi"), JBI, KARAF, XMLBEANS, SLF4J, LOG4J
-    libs = artifacts(projects("bpel-schemas", "jbi"), JBI, KARAF, XMLBEANS, SLF4J, LOG4J)
+    compile.with projects("bpel-schemas", "jbi"), JBI, KARAF, XMLBEANS, SLF4J, LOG4J2
+    libs = artifacts(projects("bpel-schemas", "jbi"), JBI, KARAF, XMLBEANS, SLF4J, LOG4J2)
     package(:bundle).tap do |bnd|
       bnd.classpath = [_("target/classes"), libs].flatten
       BUNDLE_VERSIONS.each {|key, value| bnd[key] = value }
@@ -563,7 +563,7 @@
                                   "bpel-schemas", "bpel-store", "dao-hibernate", "dao-jpa", "utils", "agents"))
     libs = artifacts(ANT, AXIOM, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.dbcp, COMMONS.lang, COMMONS.pool,
                      COMMONS.primitives, COMMONS.io, DERBY, GERONIMO.connector, GERONIMO.transaction, JACOB, JAVAX.connector, 
-                     JAVAX.ejb, JAVAX.jms, JAVAX.persistence, JAVAX.stream, JAVAX.transaction, JAXEN, LOG4J, OPENJPA, 
+                     JAVAX.ejb, JAVAX.jms, JAVAX.persistence, JAVAX.stream, JAVAX.transaction, JAXEN, LOG4J2, OPENJPA, 
                      SAXON, TRANQL, XALAN, XERCES, XMLBEANS, WSDL4J, KARAF)
     compile.with projects("bpel-schemas", "jbi", "bpel-api"), JBI, libs, KARAF, SPRING, SPRING_OSGI
 
@@ -606,19 +606,19 @@
 
   desc "ODE JCA Server"
   define "jca-server" do
-    compile.with projects("jca-ra", "utils"), SLF4J, LOG4J
+    compile.with projects("jca-ra", "utils"), SLF4J, LOG4J2
     package :jar
   end
 
   desc "ODE Tools"
   define "tools" do
-    compile.with projects("bpel-compiler", "utils", "bpel-nobj"), ANT, COMMONS.httpclient, SLF4J, LOG4J
+    compile.with projects("bpel-compiler", "utils", "bpel-nobj"), ANT, COMMONS.httpclient, SLF4J, LOG4J2
     package :jar
   end
 
   desc "ODE Utils"
   define "utils" do
-    compile.with AXIOM, AXIS2_ALL, COMMONS.lang, COMMONS.collections, COMMONS.pool, COMMONS.httpclient, COMMONS.codec, XERCES, JAVAX.stream, WSDL4J, SAXON, SLF4J, LOG4J
+    compile.with AXIOM, AXIS2_ALL, COMMONS.lang, COMMONS.collections, COMMONS.pool, COMMONS.httpclient, COMMONS.codec, XERCES, JAVAX.stream, WSDL4J, SAXON, SLF4J, LOG4J2
     # env variable required by HierarchicalPropertiesTest
     test.using :environment=>{ 'TEST_DUMMY_ENV_VAR'=>42}
     test.exclude "*TestResources"
@@ -669,7 +669,7 @@
 
         # Libraries
         zip.path("lib").include artifacts(COMMONS.codec, COMMONS.httpclient,
-          COMMONS.pool, COMMONS.collections, JAXEN, SAXON, WSDL4J, XALAN, XERCES, SLF4J, LOG4J)
+          COMMONS.pool, COMMONS.collections, JAXEN, SAXON, WSDL4J, XALAN, XERCES, SLF4J, LOG4J2)
         project("ode").projects("utils", "tools", "bpel-compiler", "bpel-api", "bpel-nobj", "bpel-schemas").
           map(&:packages).flatten.each do |pkg|
             zip.include(pkg.to_s, :as=>"#{pkg.id}.#{pkg.type}", :path=>"lib") unless ['sources', 'javadoc'].include?(pkg.classifier)
diff --git a/axis2-war/src/main/webapp/WEB-INF/classes/log4j2.xml b/axis2-war/src/main/webapp/WEB-INF/classes/log4j2.xml
new file mode 100644
index 0000000..0ebc603
--- /dev/null
+++ b/axis2-war/src/main/webapp/WEB-INF/classes/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="ode.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <!--<AppenderRef ref="FILE"/> -->
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.hibernate" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="error">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
diff --git a/axis2-war/src/main/webapp/WEB-INF/web.xml b/axis2-war/src/main/webapp/WEB-INF/web.xml
index 5912dcd..62d1fd2 100644
--- a/axis2-war/src/main/webapp/WEB-INF/web.xml
+++ b/axis2-war/src/main/webapp/WEB-INF/web.xml
@@ -19,10 +19,32 @@
   ~ under the License.
   -->
 
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+          version="2.5">
+     <display-name>Apache-Axis2</display-name>
 
-<web-app>
-    <display-name>Apache-Axis2</display-name>
+    <listener>
+        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
+    </listener>
+
+    <filter>
+        <filter-name>log4jServletFilter</filter-name>
+        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>log4jServletFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+        <dispatcher>REQUEST</dispatcher>
+        <dispatcher>FORWARD</dispatcher>
+        <dispatcher>INCLUDE</dispatcher>
+        <dispatcher>ERROR</dispatcher>
+        <dispatcher>ASYNC</dispatcher><!-- Servlet 3.0 w/ disabled auto-initialization only; not supported in 2.5 -->
+    </filter-mapping>
+
     <servlet>
         <servlet-name>AxisServlet</servlet-name>
         <display-name>Apache-Axis Servlet</display-name>
diff --git a/axis2-war/src/test/java/org/apache/ode/axis2/Axis2TestBase.java b/axis2-war/src/test/java/org/apache/ode/axis2/Axis2TestBase.java
index a718462..e57b8ef 100644
--- a/axis2-war/src/test/java/org/apache/ode/axis2/Axis2TestBase.java
+++ b/axis2-war/src/test/java/org/apache/ode/axis2/Axis2TestBase.java
@@ -29,8 +29,8 @@
 import org.apache.axis2.description.WSDL11ToAxisServiceBuilder;
 import org.apache.axis2.engine.AxisServer;
 import org.apache.axis2.engine.MessageReceiver;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ode.axis2.hooks.ODEAxisService;
 import org.apache.ode.axis2.util.Axis2UriResolver;
@@ -71,7 +71,7 @@
     private static final int DEFAULT_TEST_PORT_1 = 7070;
     private static final String DEFAULT_TEST_PORTS = DEFAULT_TEST_PORT_0+","+DEFAULT_TEST_PORT_1;
 
-    private static final Log log = LogFactory.getLog(Axis2TestBase.class);
+    private static final Logger log = LoggerFactory.getLogger(Axis2TestBase.class);
 
     protected ODEAxis2Server server;
 
diff --git a/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java b/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java
index ff89390..e3e2629 100644
--- a/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java
+++ b/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java
@@ -23,8 +23,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axis2.AxisFault;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.xml.namespace.QName;
 
@@ -33,7 +33,7 @@
  */
 public class DummyService {
 
-    private static final Log log = LogFactory.getLog(DummyService.class);
+    private static final Logger log = LoggerFactory.getLogger(DummyService.class);
 
     public String hello(String in) {
         log.debug("#### IN HELLO ####");
diff --git a/axis2-war/src/test/java/org/apache/ode/axis2/SoapHeader2Test.java b/axis2-war/src/test/java/org/apache/ode/axis2/SoapHeader2Test.java
index 42e8853..ff89168 100644
--- a/axis2-war/src/test/java/org/apache/ode/axis2/SoapHeader2Test.java
+++ b/axis2-war/src/test/java/org/apache/ode/axis2/SoapHeader2Test.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.axis2;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.Axis2TestBase;
 import org.apache.ode.axis2.JettyWrapper;
 import org.apache.ode.axis2.httpbinding.HttpBindingTest;
@@ -58,7 +58,7 @@
  */
 public class SoapHeader2Test extends Axis2TestBase {
 
-    private static final Log log = LogFactory.getLog(SoapHeader2Test.class);
+    private static final Logger log = LoggerFactory.getLogger(SoapHeader2Test.class);
 
     protected JettyWrapper jettyWrapper;
 
@@ -119,4 +119,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java b/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java
index 8ecb64c..10b1c92 100644
--- a/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java
+++ b/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.axis2.httpbinding;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.Axis2TestBase;
 import org.apache.ode.axis2.JettyWrapper;
 import static org.testng.AssertJUnit.assertTrue;
@@ -45,7 +45,7 @@
  */
 public class HttpBindingTest extends Axis2TestBase {
 
-    private static final Log log = LogFactory.getLog(HttpBindingTest.class);
+    private static final Logger log = LoggerFactory.getLogger(HttpBindingTest.class);
 
     protected JettyWrapper jettyWrapper;
 
diff --git a/axis2-war/src/test/java/org/apache/ode/axis2/instancecleanup/SystemCronCleanupTest.java b/axis2-war/src/test/java/org/apache/ode/axis2/instancecleanup/SystemCronCleanupTest.java
index b567b9f..f67f34e 100644
--- a/axis2-war/src/test/java/org/apache/ode/axis2/instancecleanup/SystemCronCleanupTest.java
+++ b/axis2-war/src/test/java/org/apache/ode/axis2/instancecleanup/SystemCronCleanupTest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.ode.axis2.instancecleanup;
 
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.engine.cron.SystemSchedulesConfig;
@@ -64,7 +64,7 @@
             sendRequestFile("http://localhost:8888/processes/FirstProcess/FirstProcess/FirstProcess/Client", bundleName, "testRequest.soap");
             // every second, clean up cron job kicks in
             Thread.sleep(2000);
-            LogFactory.getLog(SystemCronCleanupTest.class).debug("============ASSERT INSTANCE CLEANUP===============");
+            LoggerFactory.getLogger(SystemCronCleanupTest.class).debug("============ASSERT INSTANCE CLEANUP===============");
             process = assertInstanceCleanup(instances, activityRecoveries, correlationSets, faults, exchanges, routes, messsages, partnerLinks, scopes, variables, events, largeData);
         } finally {
             server.undeployProcess(bundleName);
diff --git a/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java b/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java
index 37bb43a..c23f927 100644
--- a/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java
+++ b/axis2-war/src/test/java/org/apache/ode/axis2/management/DeploymentTest.java
@@ -33,8 +33,8 @@
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.xml.namespace.QName;
 import java.io.ByteArrayOutputStream;
@@ -43,7 +43,7 @@
 import java.util.Iterator;
 
 public class DeploymentTest extends Axis2TestBase {
-    private static final Log __log = LogFactory.getLog(DeploymentTest.class);
+    private static final Logger __log = LoggerFactory.getLogger(DeploymentTest.class);
 
     private OMFactory _factory;
     private ServiceClientUtil _client;
diff --git a/axis2-war/src/test/java/org/apache/ode/dao/jpa/ProcessInstanceProfileDAOImpl.java b/axis2-war/src/test/java/org/apache/ode/dao/jpa/ProcessInstanceProfileDAOImpl.java
index dd4b6d2..7a10cf4 100644
--- a/axis2-war/src/test/java/org/apache/ode/dao/jpa/ProcessInstanceProfileDAOImpl.java
+++ b/axis2-war/src/test/java/org/apache/ode/dao/jpa/ProcessInstanceProfileDAOImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.dao.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
 import org.apache.ode.bpel.dao.CorrelationSetDAO;
 import org.apache.ode.bpel.dao.FaultDAO;
@@ -43,7 +43,7 @@
  */
 public class ProcessInstanceProfileDAOImpl extends ProcessProfileDAOImpl implements ProcessInstanceProfileDAO {
     @SuppressWarnings("unused")
-    private static final Log __log = LogFactory.getLog(ProcessInstanceProfileDAOImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessInstanceProfileDAOImpl.class);
 
     private ProcessInstanceDAOImpl instance;
 
@@ -106,4 +106,4 @@
 
         return query.getResultList();
     }
-}
\ No newline at end of file
+}
diff --git a/axis2-war/src/test/java/org/apache/ode/dao/jpa/ProcessProfileDAOImpl.java b/axis2-war/src/test/java/org/apache/ode/dao/jpa/ProcessProfileDAOImpl.java
index a9fbbb1..98d8846 100644
--- a/axis2-war/src/test/java/org/apache/ode/dao/jpa/ProcessProfileDAOImpl.java
+++ b/axis2-war/src/test/java/org/apache/ode/dao/jpa/ProcessProfileDAOImpl.java
@@ -21,8 +21,8 @@
 
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
 import org.apache.ode.bpel.dao.CorrelationSetDAO;
 import org.apache.ode.bpel.dao.CorrelatorDAO;
@@ -44,7 +44,7 @@
  */
 public class ProcessProfileDAOImpl extends OpenJPADAO implements ProcessProfileDAO {
     @SuppressWarnings("unused")
-    private static final Log __log = LogFactory.getLog(ProcessProfileDAOImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessProfileDAOImpl.class);
 
     protected EntityManager em;
     protected ProcessDAOImpl process;
@@ -119,4 +119,4 @@
 
         return query.getResultList();
     }
-}
\ No newline at end of file
+}
diff --git a/axis2-war/src/test/java/org/apache/ode/daohib/bpel/ProcessInstanceProfileDaoImpl.java b/axis2-war/src/test/java/org/apache/ode/daohib/bpel/ProcessInstanceProfileDaoImpl.java
index 9fda7b0..de900d0 100644
--- a/axis2-war/src/test/java/org/apache/ode/daohib/bpel/ProcessInstanceProfileDaoImpl.java
+++ b/axis2-war/src/test/java/org/apache/ode/daohib/bpel/ProcessInstanceProfileDaoImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.daohib.bpel;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
 import org.apache.ode.bpel.dao.CorrelationSetDAO;
 import org.apache.ode.bpel.dao.FaultDAO;
@@ -54,7 +54,7 @@
  */
 public class ProcessInstanceProfileDaoImpl extends ProcessProfileDaoImpl implements ProcessInstanceProfileDAO {
     @SuppressWarnings("unused")
-    private static final Log __log = LogFactory.getLog(ProcessInstanceProfileDaoImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessInstanceProfileDaoImpl.class);
 
     private ProcessInstanceDaoImpl instance;
 
@@ -132,4 +132,4 @@
 
         return results;
     }
-}
\ No newline at end of file
+}
diff --git a/axis2-war/src/test/java/org/apache/ode/daohib/bpel/ProcessProfileDaoImpl.java b/axis2-war/src/test/java/org/apache/ode/daohib/bpel/ProcessProfileDaoImpl.java
index a660c45..3f6be94 100644
--- a/axis2-war/src/test/java/org/apache/ode/daohib/bpel/ProcessProfileDaoImpl.java
+++ b/axis2-war/src/test/java/org/apache/ode/daohib/bpel/ProcessProfileDaoImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.daohib.bpel;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
 import org.apache.ode.bpel.dao.CorrelationSetDAO;
 import org.apache.ode.bpel.dao.CorrelatorDAO;
@@ -58,7 +58,7 @@
  */
 public class ProcessProfileDaoImpl extends HibernateDao implements ProcessProfileDAO {
     @SuppressWarnings("unused")
-    private static final Log __log = LogFactory.getLog(ProcessProfileDaoImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessProfileDaoImpl.class);
 
     protected ProcessDaoImpl process;
 
@@ -153,4 +153,4 @@
 
         return results;
     }
-}
\ No newline at end of file
+}
diff --git a/axis2-war/src/test/resources/test-log4j2.xml b/axis2-war/src/test/resources/test-log4j2.xml
new file mode 100644
index 0000000..ed2b83d
--- /dev/null
+++ b/axis2-war/src/test/resources/test-log4j2.xml
@@ -0,0 +1,33 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+           <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/axis2/src/main/java/org/apache/ode/axis2/AuthenticationHelper.java b/axis2/src/main/java/org/apache/ode/axis2/AuthenticationHelper.java
index b1bf1a7..d29c58e 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/AuthenticationHelper.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/AuthenticationHelper.java
@@ -22,8 +22,8 @@
 import org.apache.axis2.client.Options;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.http.HttpTransportProperties;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
 import org.apache.ode.utils.DOMUtils;
 import org.w3c.dom.Element;
@@ -35,7 +35,7 @@
  */
 public class AuthenticationHelper {
 
-    private static final Log __log = LogFactory.getLog(AuthenticationHelper.class);
+    private static final Logger __log = LoggerFactory.getLogger(AuthenticationHelper.class);
 
     private static final String AUTHENTICATE_ELEMENT = "authenticate";
 
diff --git a/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java b/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java
index 0941904..13b5b44 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java
@@ -36,8 +36,8 @@
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.AxisConfigurator;
 import org.apache.commons.collections.map.MultiKeyMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.agents.memory.SizingAgent;
 import org.apache.ode.axis2.hooks.ODEAxisService;
 import org.apache.ode.axis2.hooks.ODEMessageReceiver;
@@ -58,7 +58,7 @@
  *
  */
 public class BindingContextImpl implements BindingContext {
-    protected final Log __log = LogFactory.getLog(getClass());
+    protected final Logger __log = LoggerFactory.getLogger(getClass());
 
     private ODEServer _server;
     private MultiKeyMap _services = new MultiKeyMap();
diff --git a/axis2/src/main/java/org/apache/ode/axis2/EndpointReferenceContextImpl.java b/axis2/src/main/java/org/apache/ode/axis2/EndpointReferenceContextImpl.java
index 5eb3f04..2f74e33 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/EndpointReferenceContextImpl.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/EndpointReferenceContextImpl.java
@@ -21,8 +21,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.epr.EndpointFactory;
 import org.apache.ode.bpel.epr.MutableEndpoint;
 import org.apache.ode.bpel.iapi.EndpointReference;
@@ -35,7 +35,7 @@
 
 public class EndpointReferenceContextImpl implements EndpointReferenceContext {
 
-  private static final Log __log = LogFactory.getLog(EndpointReferenceContextImpl.class);
+  private static final Logger __log = LoggerFactory.getLogger(EndpointReferenceContextImpl.class);
 
   public EndpointReferenceContextImpl(ODEServer server) {
   }
diff --git a/axis2/src/main/java/org/apache/ode/axis2/MessageExchangeContextImpl.java b/axis2/src/main/java/org/apache/ode/axis2/MessageExchangeContextImpl.java
index b64faff..ca80c28 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/MessageExchangeContextImpl.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/MessageExchangeContextImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.axis2;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.BpelEngineException;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.MessageExchangeContext;
@@ -34,7 +34,7 @@
  */
 public class MessageExchangeContextImpl implements MessageExchangeContext {
 
-    private static final Log __log = LogFactory.getLog(MessageExchangeContextImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(MessageExchangeContextImpl.class);
 
     private ODEServer _server;
 
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEAxis2Server.java b/axis2/src/main/java/org/apache/ode/axis2/ODEAxis2Server.java
index ebc86f3..5458cbb 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEAxis2Server.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEAxis2Server.java
@@ -45,15 +45,15 @@
 import org.apache.axis2.description.WSDL11ToAxisServiceBuilder;
 import org.apache.axis2.engine.AxisServer;
 import org.apache.axis2.engine.MessageReceiver;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.hooks.ODEAxisService;
 import org.apache.ode.axis2.util.Axis2UriResolver;
 import org.apache.ode.axis2.util.Axis2WSDLLocator;
 import org.apache.axis2.transport.http.SimpleHTTPServer;
 
 public class ODEAxis2Server extends AxisServer {
-    private static final Log log = LogFactory.getLog(ODEAxis2Server.class);
+    private static final Logger log = LoggerFactory.getLogger(ODEAxis2Server.class);
 
         ODEServer _ode;
         String odeRootDir;
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 0a13c4a..e002695 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -24,8 +24,8 @@
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
 import org.apache.commons.httpclient.util.IdleConnectionTimeoutThread;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.deploy.DeploymentPoller;
 import org.apache.ode.axis2.service.DeploymentWebService;
 import org.apache.ode.axis2.service.ManagementService;
@@ -74,8 +74,8 @@
  */
 public class ODEServer {
 
-    protected final Log __log = LogFactory.getLog(getClass());
-    protected final Log __logTx = LogFactory.getLog("org.apache.ode.tx");
+    protected final Logger __log = LoggerFactory.getLogger(getClass());
+    protected final Logger __logTx = LoggerFactory.getLogger("org.apache.ode.tx");
 
     private static final Messages __msgs = Messages.getMessages(Messages.class);
 
@@ -444,7 +444,7 @@
             if (__logTx.isDebugEnabled() && System.getProperty("ode.debug.tx") != null)
                 _txMgr = new DebugTxMgr(_txMgr);
         } catch (Exception e) {
-            __log.fatal("Couldn't initialize a transaction manager with factory: " + txFactoryName, e);
+            __log.error("Couldn't initialize a transaction manager with factory: " + txFactoryName, e);
             throw new ServletException("Couldn't initialize a transaction manager with factory: " + txFactoryName, e);
         }
     }
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEService.java b/axis2/src/main/java/org/apache/ode/axis2/ODEService.java
index f7e9b9a..92b5d60 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEService.java
@@ -43,8 +43,8 @@
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.TwoChannelAxisOperation;
 import org.apache.axis2.transport.jms.JMSConstants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.util.SoapMessageConverter;
 import org.apache.ode.bpel.engine.BpelServerImpl;
 import org.apache.ode.bpel.epr.EndpointFactory;
@@ -69,7 +69,7 @@
  */
 public class ODEService {
 
-    private static final Log __log = LogFactory.getLog(ODEService.class);
+    private static final Logger __log = LoggerFactory.getLogger(ODEService.class);
 
     public static final String CALLBACK_SESSION_ENDPOINT = "callbackSessionEndpoint";
     public static final String TARGET_SESSION_ENDPOINT = "targetSessionEndpoint";
diff --git a/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java b/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
index 6a785ed..4468bdc 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
@@ -32,8 +32,8 @@
 import org.apache.axis2.transport.jms.JMSConstants;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
 import org.apache.neethi.Policy;
 import org.apache.neethi.PolicyEngine;
@@ -81,7 +81,7 @@
  */
 public class SoapExternalService implements ExternalService {
 
-    private static final Log __log = LogFactory.getLog(ExternalService.class);
+    private static final Logger __log = LoggerFactory.getLogger(ExternalService.class);
 
     private static final org.apache.ode.utils.wsdl.Messages msgs = Messages.getMessages(Messages.class);
 
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 169ca4f..0ae7ea0 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -38,8 +38,8 @@
 
 package org.apache.ode.axis2.deploy;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.ODEServer;
 import org.apache.ode.bpel.clapi.ClusterLock;
 import org.apache.ode.bpel.engine.cron.CronScheduler;
@@ -59,7 +59,7 @@
  */
 public class DeploymentPoller {
 
-    private static Log __log = LogFactory.getLog(DeploymentPoller.class);
+    private static Logger __log = LoggerFactory.getLogger(DeploymentPoller.class);
 
     /** The polling interval. */
     private static final long POLL_TIME = 3000;
@@ -294,7 +294,7 @@
             try {
                 join();
             } catch (InterruptedException ie) {
-                __log.fatal("Thread unexpectedly interrupted.", ie);
+                __log.error("Thread unexpectedly interrupted.", ie);
             }
         }
 
@@ -311,7 +311,7 @@
                     }
                 }
             } catch (Throwable t) {
-                __log.fatal("Encountered an unexpected error.  Exiting poller...", t);
+                __log.error("Encountered an unexpected error.  Exiting poller...", t);
             }
         }
     }
diff --git a/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisOperationDispatcher.java b/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisOperationDispatcher.java
index c6872a4..03a6808 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisOperationDispatcher.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisOperationDispatcher.java
@@ -30,8 +30,8 @@
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.i18n.Messages;
 import org.apache.commons.collections.map.MultiKeyMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.xml.namespace.QName;
 
@@ -44,7 +44,7 @@
 
     /** Field NAME */
     public static final String NAME = "ODEAxisOperationDispatcher";
-    private static final Log log = LogFactory.getLog(ODEAxisOperationDispatcher.class);
+    private static final Logger log = LoggerFactory.getLogger(ODEAxisOperationDispatcher.class);
     QName operationName = null;
 
     public AxisOperation findOperation(AxisService service, MessageContext messageContext)
@@ -134,4 +134,4 @@
         _elmtToOperation.put(axisServiceName, elmtName, operationName);
     }
 
-}
\ No newline at end of file
+}
diff --git a/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java b/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java
index 01d6dd4..5d83c81 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java
@@ -46,8 +46,8 @@
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.MessageReceiver;
 import org.apache.axis2.transport.jms.JMSConstants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.OdeFault;
 import org.apache.ode.axis2.util.Axis2UriResolver;
 import org.apache.ode.axis2.util.Axis2WSDLLocator;
@@ -67,7 +67,7 @@
  */
 public class ODEAxisService {
 
-    private static final Log LOG = LogFactory.getLog(ODEAxisService.class);
+    private static final Logger LOG = LoggerFactory.getLogger(ODEAxisService.class);
 
     public static AxisService createService(AxisConfiguration axisConfig, ProcessConf pconf, QName wsdlServiceName, String portName) throws AxisFault {
         Definition wsdlDefinition = pconf.getDefinitionForService(wsdlServiceName);
diff --git a/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisServiceDispatcher.java b/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisServiceDispatcher.java
index 0d59b64..00c55a7 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisServiceDispatcher.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisServiceDispatcher.java
@@ -31,8 +31,8 @@
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.i18n.Messages;
 import org.apache.commons.collections.map.MultiKeyMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.rampart.RampartMessageData;
 import org.apache.neethi.Policy;
 
@@ -46,7 +46,7 @@
 
     /** Field NAME */
     public static final String NAME = "ODEAxisServiceDispatcher";
-    private static final Log log = LogFactory.getLog(ODEAxisServiceDispatcher.class);
+    private static final Logger log = LoggerFactory.getLogger(ODEAxisServiceDispatcher.class);
     QName operationName = null;
 
     public AxisOperation findOperation(AxisService service, MessageContext messageContext)
diff --git a/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEMessageReceiver.java b/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEMessageReceiver.java
index 9f245c3..a594469 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEMessageReceiver.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEMessageReceiver.java
@@ -26,8 +26,8 @@
 import org.apache.axis2.receivers.AbstractMessageReceiver;
 import org.apache.axis2.util.MessageContextBuilder;
 import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.ODEService;
 
 /**
@@ -35,7 +35,7 @@
  */
 public class ODEMessageReceiver extends AbstractMessageReceiver {
 
-    private static final Log __log = LogFactory.getLog(ODEMessageReceiver.class);
+    private static final Logger __log = LoggerFactory.getLogger(ODEMessageReceiver.class);
 
     private ODEService _service;
 
diff --git a/axis2/src/main/java/org/apache/ode/axis2/hooks/SessionInHandler.java b/axis2/src/main/java/org/apache/ode/axis2/hooks/SessionInHandler.java
index bd1e74e..8f3a6cb 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/hooks/SessionInHandler.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/hooks/SessionInHandler.java
@@ -24,8 +24,8 @@
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.handlers.AbstractHandler;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.ODEService;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.Namespaces;
@@ -41,7 +41,7 @@
 public class SessionInHandler extends AbstractHandler {
     private static final long serialVersionUID = -806564877582696569L;
 
-    private static final Log __log = LogFactory.getLog(SessionInHandler.class);
+    private static final Logger __log = LoggerFactory.getLogger(SessionInHandler.class);
 
     public InvocationResponse invoke(MessageContext messageContext) throws AxisFault {
         SOAPHeader header = messageContext.getEnvelope().getHeader();
diff --git a/axis2/src/main/java/org/apache/ode/axis2/hooks/SessionOutHandler.java b/axis2/src/main/java/org/apache/ode/axis2/hooks/SessionOutHandler.java
index 6b8f41e..f3496d0 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/hooks/SessionOutHandler.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/hooks/SessionOutHandler.java
@@ -27,8 +27,8 @@
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.handlers.AbstractHandler;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.ODEService;
 import org.apache.ode.bpel.epr.EndpointFactory;
 import org.apache.ode.bpel.epr.MutableEndpoint;
@@ -43,7 +43,7 @@
 public class SessionOutHandler extends AbstractHandler {
 
     private static final long serialVersionUID = 1L;
-    private static final Log __log = LogFactory.getLog(SessionOutHandler.class);
+    private static final Logger __log = LoggerFactory.getLogger(SessionOutHandler.class);
 
 
     public InvocationResponse invoke(MessageContext messageContext) throws AxisFault {
diff --git a/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java b/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java
index b58714c..7dcc527 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java
@@ -20,8 +20,8 @@
 package org.apache.ode.axis2.httpbinding;
 
 import org.apache.commons.httpclient.methods.PostMethod;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.logging.Log;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ode.utils.wsdl.WsdlUtils;
 
diff --git a/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java b/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
index 6a28dc1..fcec4f5 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
@@ -24,8 +24,8 @@
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
 import org.apache.commons.httpclient.URIException;
 import org.apache.commons.httpclient.params.HttpParams;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.ExternalService;
 import org.apache.ode.axis2.ODEService;
 import org.apache.ode.utils.Properties;
@@ -66,7 +66,7 @@
  */
 public class HttpExternalService implements ExternalService {
 
-    private static final Log log = LogFactory.getLog(ExternalService.class);
+    private static final Logger log = LoggerFactory.getLogger(ExternalService.class);
     private static final Messages msgs = Messages.getMessages(Messages.class);
 
     private MultiThreadedHttpConnectionManager connections;
@@ -395,4 +395,4 @@
             odeMex.replyWithFailure(MessageExchange.FailureType.OTHER, errmsg, HttpHelper.prepareDetailsElement(method));
         }
     }
-}
\ No newline at end of file
+}
diff --git a/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java b/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
index a7a7d11..20101f7 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
@@ -33,8 +33,8 @@
 import org.apache.commons.httpclient.methods.StringRequestEntity;
 import org.apache.commons.httpclient.params.HttpParams;
 import org.apache.commons.httpclient.params.HostParams;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ode.utils.Properties;
 import org.apache.ode.utils.DOMUtils;
@@ -50,7 +50,7 @@
 
 public class HttpHelper {
 
-    private static final Log log = LogFactory.getLog(HttpHelper.class);
+    private static final Logger log = LoggerFactory.getLogger(HttpHelper.class);
 
 
     public static void configure(HttpClient client, URI targetURI, Element authPart, HttpParams params) throws URIException {
@@ -269,7 +269,7 @@
             sb.append("HTTP Request Details: \n").append(m.getName()).append(" ").append(m.getURI());
         } catch (URIException e) {
             // not that important
-            if (log.isDebugEnabled()) log.debug(e);
+            if (log.isDebugEnabled()) log.debug("",e);
         }
         sb.append("\nRequest Headers:");
         Header[] headers = m.getRequestHeaders();
@@ -302,7 +302,7 @@
             sb.append("HTTP Response Details: \n").append(m.getName()).append(" ").append(m.getURI());
         } catch (URIException e) {
             // not that important
-            if (log.isDebugEnabled()) log.debug(e);
+            if (log.isDebugEnabled()) log.debug("",e);
         }
         sb.append("\nStatus-Line: ").append(m.getStatusLine());
         Header[] headers = m.getResponseHeaders();
@@ -316,7 +316,7 @@
                 sb.append("\nResponse Entity:\n").append(m.getResponseBodyAsString());
             }
         } catch (IOException e) {
-            log.error(e);
+            log.error("",e);
         }
         Header[] footers = m.getResponseFooters();
         if (footers.length != 0) sb.append("\nResponse Footers: ");
diff --git a/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodConverter.java b/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodConverter.java
index 2397666..35ac339 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodConverter.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodConverter.java
@@ -31,8 +31,8 @@
 import org.apache.commons.httpclient.params.HostParams;
 import org.apache.commons.httpclient.params.HttpParams;
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.Properties;
 import org.apache.ode.axis2.util.URLEncodedTransformer;
 import org.apache.ode.axis2.util.UrlReplacementTransformer;
@@ -74,7 +74,7 @@
 
 public class HttpMethodConverter {
 
-    private static final Log log = LogFactory.getLog(HttpMethodConverter.class);
+    private static final Logger log = LoggerFactory.getLogger(HttpMethodConverter.class);
 
     protected static final Messages msgs = Messages.getMessages(Messages.class);
     protected Definition definition;
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 01e003b..1fbd1f2 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -34,8 +34,8 @@
 import org.apache.axis2.receivers.AbstractMessageReceiver;
 import org.apache.axis2.util.Utils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.ODEServer;
 import org.apache.ode.axis2.OdeFault;
 import org.apache.ode.axis2.deploy.DeploymentPoller;
@@ -64,7 +64,7 @@
  */
 public class DeploymentWebService {
 
-    private static final Log __log = LogFactory.getLog(DeploymentWebService.class);
+    private static final Logger __log = LoggerFactory.getLogger(DeploymentWebService.class);
 
     private final OMNamespace _pmapi;
     private final OMNamespace _deployapi;
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/ManagementService.java b/axis2/src/main/java/org/apache/ode/axis2/service/ManagementService.java
index 3b4833f..8a88993 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/ManagementService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/ManagementService.java
@@ -44,8 +44,8 @@
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.receivers.AbstractMessageReceiver;
 import org.apache.axis2.util.MessageContextBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.hooks.ODEAxisService;
 import org.apache.ode.bpel.engine.ProcessAndInstanceManagementImpl;
 import org.apache.ode.bpel.iapi.BpelServer;
@@ -60,7 +60,7 @@
  */
 public class ManagementService {
 
-    private static final Log __log = LogFactory.getLog(ManagementService.class);
+    private static final Logger __log = LoggerFactory.getLogger(ManagementService.class);
 
     public static final QName PM_SERVICE_NAME = new QName("http://www.apache.org/ode/pmapi", "ProcessManagementService");
     public static final String PM_PORT_NAME = "ProcessManagementPort";
diff --git a/axis2/src/main/java/org/apache/ode/axis2/util/Axis2UriResolver.java b/axis2/src/main/java/org/apache/ode/axis2/util/Axis2UriResolver.java
index 3ba02db..23241ed 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/util/Axis2UriResolver.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/util/Axis2UriResolver.java
@@ -21,13 +21,13 @@
 import java.io.InputStream;
 import java.net.URI;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.hooks.ODEAxisService;
 import org.xml.sax.InputSource;
 
 public class Axis2UriResolver implements org.apache.ws.commons.schema.resolver.URIResolver {
-    private static final Log LOG = LogFactory.getLog(ODEAxisService.class);
+    private static final Logger LOG = LoggerFactory.getLogger(ODEAxisService.class);
 
     public InputSource resolveEntity(String targetNamespace, String schemaLocation, String baseUri) {
         if (LOG.isDebugEnabled()) {
diff --git a/axis2/src/main/java/org/apache/ode/axis2/util/Axis2WSDLLocator.java b/axis2/src/main/java/org/apache/ode/axis2/util/Axis2WSDLLocator.java
index 00ace7e..733552a 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/util/Axis2WSDLLocator.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/util/Axis2WSDLLocator.java
@@ -27,12 +27,12 @@
 
 import javax.wsdl.xml.WSDLLocator;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.InputSource;
 
 public class Axis2WSDLLocator implements WSDLLocator {
-    private static final Log LOG = LogFactory.getLog(Axis2WSDLLocator.class);
+    private static final Logger LOG = LoggerFactory.getLogger(Axis2WSDLLocator.class);
     private URI _baseUri;
     private String _latest;
 
diff --git a/axis2/src/main/java/org/apache/ode/axis2/util/AxisUtils.java b/axis2/src/main/java/org/apache/ode/axis2/util/AxisUtils.java
index d6a85de..8e6b149 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/util/AxisUtils.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/util/AxisUtils.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.axis2.util;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.axis2.deployment.ServiceBuilder;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.description.AxisService;
@@ -46,7 +46,7 @@
  */
 public class AxisUtils {
 
-    private static final Log log = LogFactory.getLog(AxisUtils.class);
+    private static final Logger log = LoggerFactory.getLogger(AxisUtils.class);
 
     public static void configureService(AxisService axisService, URL service_file) throws IOException, XMLStreamException, AxisFault {
         configureService(new ConfigurationContext(axisService.getAxisConfiguration()), axisService, service_file);
diff --git a/axis2/src/main/java/org/apache/ode/axis2/util/ClusterUrlTransformer.java b/axis2/src/main/java/org/apache/ode/axis2/util/ClusterUrlTransformer.java
index 31f5f44..beaba72 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/util/ClusterUrlTransformer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/util/ClusterUrlTransformer.java
@@ -21,11 +21,11 @@
 
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ClusterUrlTransformer {
-    private static final Log __log = LogFactory.getLog(ClusterUrlTransformer.class);
+    private static final Logger __log = LoggerFactory.getLogger(ClusterUrlTransformer.class);
 
     private final List<String> targets;
     private final String base;
diff --git a/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java b/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
index b13980d..38cd9a5 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
@@ -58,8 +58,8 @@
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.namespace.Constants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.axis2.OdeFault;
 import org.apache.ode.il.OMUtils;
 import org.apache.ode.utils.DOMUtils;
@@ -78,7 +78,7 @@
 
     private static final Messages __msgs = Messages.getMessages(Messages.class);
 
-    private static final Log __log = LogFactory.getLog(SoapMessageConverter.class);
+    private static final Logger __log = LoggerFactory.getLogger(SoapMessageConverter.class);
 
     SOAPFactory _soapFactory;
 
@@ -156,7 +156,7 @@
         BindingInput bi = bop.getBindingInput();
         if (bi == null)
             //throw new OdeFault(__msgs.msgBindingInputNotFound(_serviceName, _portName, op.getName()));
-            __log.warn(__msgs.msgBindingInputNotFound(_serviceName, _portName, op.getName()));
+            __log.warn("",__msgs.msgBindingInputNotFound(_serviceName, _portName, op.getName()));
 
         SOAPEnvelope soapEnv = msgCtx.getEnvelope();
         if (soapEnv == null) {
diff --git a/axis2/src/main/java/org/apache/ode/axis2/util/URLEncodedTransformer.java b/axis2/src/main/java/org/apache/ode/axis2/util/URLEncodedTransformer.java
index 985e324..087a446 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/util/URLEncodedTransformer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/util/URLEncodedTransformer.java
@@ -21,8 +21,8 @@
 
 import org.apache.commons.httpclient.NameValuePair;
 import org.apache.commons.httpclient.util.EncodingUtil;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.axis2.httpbinding.Messages;
 import org.w3c.dom.Element;
@@ -39,7 +39,7 @@
 public class URLEncodedTransformer {
 
 
-    private static final Log log = LogFactory.getLog(URLEncodedTransformer.class);
+    private static final Logger log = LoggerFactory.getLogger(URLEncodedTransformer.class);
 
     /**
      * @param values - a map<String, Element>, the key is a part name (without curly braces), the value the replacement value for the part name. If the value is not a simple type, it will be skipped.
diff --git a/axis2/src/main/java/org/apache/ode/axis2/util/UrlReplacementTransformer.java b/axis2/src/main/java/org/apache/ode/axis2/util/UrlReplacementTransformer.java
index c45ac2f..3408a3f 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/util/UrlReplacementTransformer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/util/UrlReplacementTransformer.java
@@ -21,8 +21,8 @@
 
 import org.apache.commons.httpclient.util.URIUtil;
 import org.apache.commons.httpclient.URIException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.w3c.dom.Element;
 
@@ -45,7 +45,7 @@
  */
 public class UrlReplacementTransformer {
 
-    private static final Log log = LogFactory.getLog(UrlReplacementTransformer.class);
+    private static final Logger log = LoggerFactory.getLogger(UrlReplacementTransformer.class);
 
     private static final org.apache.ode.axis2.httpbinding.Messages httpMsgs = org.apache.ode.axis2.httpbinding.Messages.getMessages(org.apache.ode.axis2.httpbinding.Messages.class);
 
diff --git a/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java b/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java
index 9a777f8..5efb944 100644
--- a/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java
+++ b/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java
@@ -32,8 +32,8 @@
 
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.axis2.httpbinding.HttpBindingValidator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
 /**
@@ -41,7 +41,7 @@
  */
 public class HttpBindingValidatorTest extends TestCase {
 
-    private static final Log log = LogFactory.getLog(HttpBindingValidatorTest.class);
+    private static final Logger log = LoggerFactory.getLogger(HttpBindingValidatorTest.class);
 
     private String[] resources = new String[]{"/http-binding-validator.wsdl", "/http-binding-validator-ext.wsdl"};
     private Definition[] definitions;
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java b/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java
index 04161f3..d74e78a 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.common;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.pmapi.InvalidRequestException;
 import org.apache.ode.utils.ISO8601DateParser;
 import org.apache.ode.utils.RelativeDateParser;
@@ -40,7 +40,7 @@
  * language.
  */
 public class InstanceFilter extends Filter<InstanceFilter.Criteria> implements Serializable {
-    protected static Log LOG = LogFactory.getLog(InstanceFilter.class);
+    protected static Logger LOG = LoggerFactory.getLogger(InstanceFilter.class);
 
     private static final long serialVersionUID = 9999;
 
@@ -382,4 +382,4 @@
         }
         return list;
     }
-}
\ No newline at end of file
+}
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
index 983b368..a2b5f25 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.compiler;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.bom.Activity;
 import org.apache.ode.bpel.compiler.bom.AssignActivity;
@@ -50,7 +50,7 @@
  * @author Maciej Szefler ( m s z e f l e r @ g m a i l . c o m )
  */
 class AssignGenerator extends DefaultActivityGenerator {
-    private static final Log __log = LogFactory.getLog(AssignGenerator.class);
+    private static final Logger __log = LoggerFactory.getLogger(AssignGenerator.class);
 
     private static final AssignGeneratorMessages __cmsgs =
         MessageBundle.getMessages(AssignGeneratorMessages.class);
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java
index e959d9b..ff1bd34 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java
@@ -30,8 +30,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.api.CompilationMessage;
 import org.apache.ode.bpel.compiler.api.CompileListener;
@@ -56,7 +56,7 @@
  * </p>
 s */
 public class BpelC {
-    private static final Log __log = LogFactory.getLog(BpelC.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelC.class);
     private static final CommonCompilationMessages __cmsgs =
             MessageBundle.getMessages(CommonCompilationMessages.class);
 
@@ -500,7 +500,7 @@
 
 
     /**
-     * Log a compilation message, both to the log, and to the listener (if any).
+     * Logger a compilation message, both to the log, and to the listener (if any).
      * @param cmsg
      */
     private void logCompilationMessage(CompilationMessage cmsg) {
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
index f24bf2f..00d8ccd 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
@@ -44,8 +44,8 @@
 import javax.xml.namespace.QName;
 import javax.xml.transform.Source;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.api.CompilationMessage;
 import org.apache.ode.bpel.compiler.api.CompileListener;
@@ -129,7 +129,7 @@
  */
 public abstract class BpelCompiler implements CompilerContext {
     /** Class-severity logger. */
-    protected static final Log __log = LogFactory.getLog(BpelCompiler.class);
+    protected static final Logger __log = LoggerFactory.getLogger(BpelCompiler.class);
 
     /** Standardized compiler messages. */
     private static final CommonCompilationMessages __cmsgs = MessageBundle.getMessages(CommonCompilationMessages.class);
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/DefaultResourceFinder.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/DefaultResourceFinder.java
index 861591f..7ffcb91 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/DefaultResourceFinder.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/DefaultResourceFinder.java
@@ -25,8 +25,8 @@
 import java.net.MalformedURLException;
 import java.net.URI;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Basic implementation of the {@link ResourceFinder} interface. Resolves
@@ -36,7 +36,7 @@
  *
  */
 public class DefaultResourceFinder implements ResourceFinder {
-    private static final Log __log = LogFactory.getLog(DefaultResourceFinder.class);
+    private static final Logger __log = LoggerFactory.getLogger(DefaultResourceFinder.class);
 
     private File _relativeDir;
     private File _absoluteDir;
@@ -113,7 +113,7 @@
         // return the absolute URI.
         URI relative = _relativeDir.toURI().relativize(uri);
         if (relative.isAbsolute() && !(relative.getScheme().equals("urn"))) {
-           __log.fatal("openResource: invalid scheme (should be urn:)  " + uri);
+           __log.error("openResource: invalid scheme (should be urn:)  " + uri);
            return null;
         }
 
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ExpressionValidatorFactory.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ExpressionValidatorFactory.java
index 3e27ce3..00fc28f 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ExpressionValidatorFactory.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ExpressionValidatorFactory.java
@@ -20,8 +20,8 @@
 
 import java.util.Properties;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.api.CompilerContext;
 import org.apache.ode.bpel.compiler.api.ExpressionValidator;
@@ -30,7 +30,7 @@
 import org.apache.ode.bpel.obj.OVarType;
 
 public class ExpressionValidatorFactory {
-    private static final Log __log = LogFactory.getLog(ExpressionValidatorFactory.class);
+    private static final Logger __log = LoggerFactory.getLogger(ExpressionValidatorFactory.class);
     private ExpressionValidator _validator = new EmptyValidator();
 
     public ExpressionValidatorFactory(Properties config) {
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ForEachGenerator.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ForEachGenerator.java
index d0a4f8a..4f558f0 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ForEachGenerator.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ForEachGenerator.java
@@ -22,8 +22,8 @@
 import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.bom.Activity;
 import org.apache.ode.bpel.compiler.bom.ForEachActivity;
@@ -40,7 +40,7 @@
  */
 public class ForEachGenerator extends DefaultActivityGenerator {
 
-    private static final Log __log = LogFactory.getLog(AssignGenerator.class);
+    private static final Logger __log = LoggerFactory.getLogger(AssignGenerator.class);
     private static final ForEachGeneratorMessages __cmsgs = MessageBundle.getMessages(ForEachGeneratorMessages.class);
 
     public OActivity newInstance(Activity src) {
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/LocalEntityResolver.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/LocalEntityResolver.java
index ca1e6e3..a8c4a4f 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/LocalEntityResolver.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/LocalEntityResolver.java
@@ -23,8 +23,8 @@
 import java.net.URL;
 import java.util.HashMap;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -33,7 +33,7 @@
  * Resolver implementation that restricts us to a known set of resources.
  */
 class LocalEntityResolver implements EntityResolver {
-  private static final Log __log = LogFactory.getLog(LocalEntityResolver.class);
+  private static final Logger __log = LoggerFactory.getLogger(LocalEntityResolver.class);
 
   private final HashMap<String, URL> _mappings = new HashMap<String,URL>();
 
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WSDLLocatorImpl.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WSDLLocatorImpl.java
index 766b9e3..366669b 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WSDLLocatorImpl.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WSDLLocatorImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.compiler;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.InputSource;
 
 import javax.wsdl.xml.WSDLLocator;
@@ -30,7 +30,7 @@
 
 public class WSDLLocatorImpl implements WSDLLocator {
 
-    private static final Log __log = LogFactory.getLog(WSDLLocatorImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(WSDLLocatorImpl.class);
 
     private ResourceFinder _resourceFinder;
     private URI _base;
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WSDLRegistry.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WSDLRegistry.java
index e49e0ca..9fd8a2e 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WSDLRegistry.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WSDLRegistry.java
@@ -40,8 +40,8 @@
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamSource;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.api.CompilerContext;
 import org.apache.ode.bpel.compiler.bom.PartnerLinkType;
@@ -64,7 +64,7 @@
  * A parsed collection of WSDL definitions, including BPEL-specific extensions.
  */
 class WSDLRegistry {
-    private static final Log __log = LogFactory.getLog(WSDLRegistry.class);
+    private static final Logger __log = LoggerFactory.getLogger(WSDLRegistry.class);
 
     private static final CommonCompilationMessages __cmsgs =
             MessageBundle.getMessages(CommonCompilationMessages.class);
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WsdlFinderXMLEntityResolver.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WsdlFinderXMLEntityResolver.java
index b02de5f..e27d44b 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WsdlFinderXMLEntityResolver.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/WsdlFinderXMLEntityResolver.java
@@ -26,8 +26,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.xerces.xni.XMLResourceIdentifier;
 import org.apache.xerces.xni.XNIException;
 import org.apache.xerces.xni.parser.XMLEntityResolver;
@@ -43,8 +43,7 @@
  */
 public class WsdlFinderXMLEntityResolver implements XMLEntityResolver {
 
-    private static final Log __log = LogFactory
-            .getLog(WsdlFinderXMLEntityResolver.class);
+    private static final Logger __log = LoggerFactory.getLogger(WsdlFinderXMLEntityResolver.class);
 
     /**
      * Flag indicating whether the resolver should fail with an exception if the
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java
index 02cde22..7ab2acb 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.compiler.bom;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.BpelC;
 import org.apache.ode.bpel.compiler.bom.IfActivity.Case;
 import org.apache.ode.utils.DOMUtils;
@@ -43,7 +43,7 @@
 
 public class BpelObjectFactory {
 
-    private static final Log __log = LogFactory.getLog(BpelObjectFactory.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelObjectFactory.class);
     private static BpelObjectFactory __instance = new BpelObjectFactory();
 
     public static final String WSDL = "http://schemas.xmlsoap.org/wsdl/";
@@ -290,7 +290,7 @@
     }
 
     public static class BOMSAXErrorHandler implements ErrorHandler {
-        private static final Log __log = LogFactory.getLog(BOMSAXErrorHandler.class);
+        private static final Logger __log = LoggerFactory.getLogger(BOMSAXErrorHandler.class);
         
     	private boolean ok = true;
     	private boolean strict = false;
@@ -316,7 +316,7 @@
 		public void fatalError(SAXParseException exception) throws SAXException {
 			ok = false;
 			if (strict) {
-			    __log.fatal(formatException(exception));    
+			    __log.error(formatException(exception));    
 			} else {
 			    __log.warn(formatException(exception));
 			}
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/LocalEntityResolver.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/LocalEntityResolver.java
index 149dbb4..f14a807 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/LocalEntityResolver.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/LocalEntityResolver.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.bpel.compiler.bom;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -33,7 +33,7 @@
  * Resolver implementation that restricts us to a known set of resources.
  */
 class LocalEntityResolver implements EntityResolver {
-  private static final Log __log = LogFactory.getLog(LocalEntityResolver.class);
+  private static final Logger __log = LoggerFactory.getLogger(LocalEntityResolver.class);
 
   private final HashMap<String, URL> _mappings = new HashMap<String,URL>();
 
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XslCompilationErrorListener.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XslCompilationErrorListener.java
index 47cc81d..15113ac 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XslCompilationErrorListener.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XslCompilationErrorListener.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.bpel.elang.xpath10.compiler;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.api.CompilationMessage;
 import org.apache.ode.bpel.compiler.api.CompilerContext;
@@ -37,7 +37,7 @@
  */
 public class XslCompilationErrorListener implements ErrorListener {
 
-  private static final Log __log = LogFactory.getLog(XslCompilationErrorListener.class);
+  private static final Logger __log = LoggerFactory.getLogger(XslCompilationErrorListener.class);
   private CompilerContext _cc;
 
   public XslCompilationErrorListener(CompilerContext cc) {
@@ -46,23 +46,23 @@
 
   public void warning(TransformerException exception) throws TransformerException {
     if (__log.isWarnEnabled()) {
-      __log.warn(exception);
+      __log.warn("",exception);
     }
     recover(CompilationMessage.WARN, exception);
   }
 
   public void error(TransformerException exception) throws TransformerException {
     if (__log.isErrorEnabled()) {
-      __log.error(exception);
+      __log.error("",exception);
     }
     recover(CompilationMessage.ERROR, exception);
     throw exception;
   }
 
   public void fatalError(TransformerException exception) throws TransformerException {
-    if (__log.isFatalEnabled()) {
-      __log.fatal(exception);
-    }
+    
+    __log.error("",exception);
+    
     recover(CompilationMessage.ERROR, exception);
     throw exception;
   }
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java
index ac0cf58..8ccc2d9 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java
@@ -40,8 +40,8 @@
 import net.sf.saxon.xpath.XPathEvaluator;
 import net.sf.saxon.xpath.XPathFactoryImpl;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.api.CompilerContext;
 import org.apache.ode.bpel.compiler.api.ExpressionCompiler;
@@ -62,7 +62,7 @@
  */
 public class XPath20ExpressionCompilerImpl implements ExpressionCompiler {
 
-    protected static final Log __log = LogFactory.getLog(XPath20ExpressionCompilerBPEL20.class);
+    protected static final Logger __log = LoggerFactory.getLogger(XPath20ExpressionCompilerBPEL20.class);
 
     protected String _bpelNS;
     protected QName _qnLinkStatus;
@@ -175,7 +175,7 @@
                 }
             }
         } catch (XPathExpressionException e) {
-            __log.debug(e);
+            __log.debug("",e);
             __log.info("Couldn't validate properly expression " + xpathStr);
         } catch (WrappedResolverException wre) {
             if (wre._compilationMsg != null)
diff --git a/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xquery10/compiler/XQuery10ExpressionCompilerImpl.java b/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xquery10/compiler/XQuery10ExpressionCompilerImpl.java
index aeaf585..995a8c3 100644
--- a/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xquery10/compiler/XQuery10ExpressionCompilerImpl.java
+++ b/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xquery10/compiler/XQuery10ExpressionCompilerImpl.java
@@ -45,8 +45,8 @@
 import net.sf.saxon.xqj.SaxonXQConnection;
 import net.sf.saxon.xqj.SaxonXQDataSource;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.api.CompilerContext;
 import org.apache.ode.bpel.compiler.api.ExpressionCompiler;
@@ -81,7 +81,7 @@
  */
 public class XQuery10ExpressionCompilerImpl implements ExpressionCompiler {
 
-    protected static final Log __log = LogFactory.getLog(XQuery10ExpressionCompilerImpl.class);
+    protected static final Logger __log = LoggerFactory.getLogger(XQuery10ExpressionCompilerImpl.class);
 
     protected String _bpelNS;
     protected QName _qnLinkStatus;
@@ -269,7 +269,7 @@
                 }
             }
         } catch (XQException xqe) {
-            __log.debug(xqe);
+            __log.debug("",xqe);
             __log.info("Couldn't validate properly expression " + xqueryStr);
             throw new CompilationException(__msgs.errXQuery10Syntax(xqueryStr, "Couldn't validate XQuery expression"));
         } catch (WrappedResolverException wre) {
diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/AbstractCompileTestCase.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/AbstractCompileTestCase.java
index 72a7585..4bc8c0e 100644
--- a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/AbstractCompileTestCase.java
+++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/AbstractCompileTestCase.java
@@ -22,8 +22,8 @@
 import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.BpelC;
 import org.apache.ode.bpel.compiler.api.CompilationMessage;
 import org.apache.ode.bpel.compiler.api.CompileListener;
@@ -33,7 +33,7 @@
 
 public abstract class AbstractCompileTestCase implements CompileListener {
 
-    protected final Log __log = LogFactory.getLog(getClass());
+    protected final Logger __log = LoggerFactory.getLogger(getClass());
     protected BpelC _compiler;
     protected ArrayList<CompilationMessage> _errors = new ArrayList<CompilationMessage>();
 
diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
index 970a351..1dcfd31 100644
--- a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
+++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
@@ -6,8 +6,8 @@
 import java.net.URI;
 import java.net.URL;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.migrate.DeepEqualityHelper;
 import org.apache.ode.bpel.obj.migrate.DomElementComparator;
@@ -19,7 +19,7 @@
 import org.junit.Test;
 
 public class MigrationTest extends GoodCompileTest{
-    private static final Log __log = LogFactory.getLog(MigrationTest.class);
+    private static final Logger __log = LoggerFactory.getLogger(MigrationTest.class);
 
     /**
      * compare compiled OProcess with migrated ones.
diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/XslTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/XslTest.java
index 963a0e5..efbf6c9 100644
--- a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/XslTest.java
+++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/XslTest.java
@@ -22,8 +22,8 @@
 import java.net.URI;
 import java.net.URL;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.BpelCompiler20;
 import org.apache.ode.bpel.compiler.DefaultResourceFinder;
 import org.apache.ode.bpel.compiler.ResourceFinder;
@@ -42,7 +42,7 @@
 
 public class XslTest {
 
-    private final Log __log = LogFactory.getLog(getClass());
+    private final Logger __log = LoggerFactory.getLogger(getClass());
     private BpelCompiler20 _compiler;
     private ResourceFinder _resfinder;
 
diff --git a/bpel-compiler/src/test/resources/log4j2.xml b/bpel-compiler/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..9f6bc53
--- /dev/null
+++ b/bpel-compiler/src/test/resources/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+       <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
diff --git a/bpel-epr/src/main/java/org/apache/ode/bpel/common/evt/DebugBpelEventListener.java b/bpel-epr/src/main/java/org/apache/ode/bpel/common/evt/DebugBpelEventListener.java
index 93f2cff..1417624 100644
--- a/bpel-epr/src/main/java/org/apache/ode/bpel/common/evt/DebugBpelEventListener.java
+++ b/bpel-epr/src/main/java/org/apache/ode/bpel/common/evt/DebugBpelEventListener.java
@@ -21,8 +21,8 @@
 import java.util.Properties;
 
 import org.apache.commons.lang.BooleanUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.evt.BpelEvent;
 import org.apache.ode.bpel.iapi.BpelEventListener;
 
@@ -40,7 +40,7 @@
  * @author Tammo van Lessen (University of Stuttgart)
  */
 public class DebugBpelEventListener implements BpelEventListener {
-    private static final Log __log = LogFactory.getLog(BpelEventListener.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelEventListener.class);
 
     private static final String SYSOUT_KEY = "debugeventlistener.dumpToStdOut";
     private boolean _dumpToStdOut = false;
diff --git a/bpel-epr/src/main/java/org/apache/ode/bpel/epr/EndpointFactory.java b/bpel-epr/src/main/java/org/apache/ode/bpel/epr/EndpointFactory.java
index 1409d9e..7d9768e 100644
--- a/bpel-epr/src/main/java/org/apache/ode/bpel/epr/EndpointFactory.java
+++ b/bpel-epr/src/main/java/org/apache/ode/bpel/epr/EndpointFactory.java
@@ -24,8 +24,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.Namespaces;
 import org.w3c.dom.Element;
@@ -36,7 +36,7 @@
  */
 public class EndpointFactory {
 
-    private static final Log __log = LogFactory.getLog(EndpointFactory.class);
+    private static final Logger __log = LoggerFactory.getLogger(EndpointFactory.class);
 
     private static QName WSDL20_ELMT_QNAME = new QName(Namespaces.WSDL_20, "service");
 
diff --git a/bpel-epr/src/main/java/org/apache/ode/bpel/epr/WSAEndpoint.java b/bpel-epr/src/main/java/org/apache/ode/bpel/epr/WSAEndpoint.java
index 9a50bdf..47ee2fa 100644
--- a/bpel-epr/src/main/java/org/apache/ode/bpel/epr/WSAEndpoint.java
+++ b/bpel-epr/src/main/java/org/apache/ode/bpel/epr/WSAEndpoint.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.bpel.epr;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.Namespaces;
 import org.w3c.dom.Document;
@@ -37,7 +37,7 @@
  */
 public class WSAEndpoint implements MutableEndpoint {
 
-    private static final Log __log = LogFactory.getLog(WSAEndpoint.class);
+    private static final Logger __log = LoggerFactory.getLogger(WSAEndpoint.class);
 
     private Element _eprElmt;
 
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/DynamicService.java b/bpel-epr/src/main/java/org/apache/ode/il/DynamicService.java
index fee961c..feb6ff0 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/DynamicService.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/DynamicService.java
@@ -36,8 +36,8 @@
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.impl.dom.NamespaceImpl;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.pmapi.ProcessInfoCustomizer;
 import org.apache.xmlbeans.XmlObject;
 import org.w3c.dom.Node;
@@ -47,7 +47,7 @@
  * invocation based on top-level element name (e.g. method name) and sub-elements (e.g. parameters).
  */
 public class DynamicService<T> {
-    private final Log __log = LogFactory.getLog(getClass());
+    private final Logger __log = LoggerFactory.getLogger(getClass());
 
     static final OMFactory OM = OMAbstractFactory.getOMFactory();
 
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/EmbeddedGeronimoFactory.java b/bpel-epr/src/main/java/org/apache/ode/il/EmbeddedGeronimoFactory.java
index b1d4739..304897b 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/EmbeddedGeronimoFactory.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/EmbeddedGeronimoFactory.java
@@ -19,14 +19,14 @@
 
 package org.apache.ode.il;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 
 import javax.transaction.TransactionManager;
 
 public class EmbeddedGeronimoFactory {
-    private static final Log LOG = LogFactory.getLog(EmbeddedGeronimoFactory.class);
+    private static final Logger LOG = LoggerFactory.getLogger(EmbeddedGeronimoFactory.class);
 
     /* Public no-arg contructor is required */
     public EmbeddedGeronimoFactory() {
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/MockScheduler.java b/bpel-epr/src/main/java/org/apache/ode/il/MockScheduler.java
index ec90ebc..18ae1ec 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/MockScheduler.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/MockScheduler.java
@@ -36,8 +36,8 @@
 import javax.transaction.SystemException;
 import javax.transaction.TransactionManager;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.Scheduler;
 
@@ -45,7 +45,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class MockScheduler implements Scheduler {
-    private static final Log __log = LogFactory.getLog(MockScheduler.class);
+    private static final Logger __log = LoggerFactory.getLogger(MockScheduler.class);
 
     private JobProcessor _processor;
     private ExecutorService _executorSvc = Executors.newCachedThreadPool();
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java b/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java
index 0ad4580..6df7cbf 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java
@@ -35,8 +35,8 @@
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMText;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.NSContext;
 import org.w3c.dom.Attr;
@@ -54,7 +54,7 @@
  */
 public class OMUtils {
 
-    private static Log __log = LogFactory.getLog(OMUtils.class);
+    private static Logger __log = LoggerFactory.getLogger(OMUtils.class);
 
     public static OMElement getFirstChildWithName(OMElement parent, String name) {
         if (parent == null)
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
index cc519bd..c03edf6 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.il.config;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.SystemUtils;
 
 import java.io.File;
@@ -38,7 +38,7 @@
 public class OdeConfigProperties {
     private static final long serialVersionUID = 1L;
 
-    private static final Log __log = LogFactory.getLog(OdeConfigProperties.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeConfigProperties.class);
 
     public static final String PROP_DB_MODE = "db.mode";
 
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/dbutil/Database.java b/bpel-epr/src/main/java/org/apache/ode/il/dbutil/Database.java
index 9d8c04d..de6cd03 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/dbutil/Database.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/dbutil/Database.java
@@ -23,8 +23,8 @@
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactoryJDBC;
 import org.apache.ode.il.config.OdeConfigProperties;
 import org.apache.ode.utils.LoggingInterceptor;
@@ -34,9 +34,9 @@
  *
  */
 public abstract class Database {
-    protected static final Log __log = LogFactory.getLog(Database.class);
+    protected static final Logger __log = LoggerFactory.getLogger(Database.class);
 
-    protected static final Log __logSql = LogFactory.getLog("org.apache.ode.sql");
+    protected static final Logger __logSql = LoggerFactory.getLogger("org.apache.ode.sql");
 
     protected static final Messages __msgs = Messages.getMessages(Messages.class);
 
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/dbutil/DatabaseConnectionManager.java b/bpel-epr/src/main/java/org/apache/ode/il/dbutil/DatabaseConnectionManager.java
index 2ef9732..c965cc2 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/dbutil/DatabaseConnectionManager.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/dbutil/DatabaseConnectionManager.java
@@ -22,8 +22,8 @@
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.geronimo.connector.outbound.GenericConnectionManager;
 import org.apache.geronimo.connector.outbound.connectionmanagerconfig.LocalTransactions;
 import org.apache.geronimo.connector.outbound.connectionmanagerconfig.PoolingSupport;
@@ -38,7 +38,7 @@
 public class DatabaseConnectionManager {
 
     private static final long serialVersionUID = 1L;
-    private static final Log __log = LogFactory.getLog(DatabaseConnectionManager.class);
+    private static final Logger __log = LoggerFactory.getLogger(DatabaseConnectionManager.class);
     private static final Messages __msgs = Messages.getMessages(Messages.class);
     private static final int CONNECTION_MAX_WAIT_MILLIS = 30000;
     private static final int CONNECTION_MAX_IDLE_MINUTES = 5;
@@ -114,4 +114,4 @@
     public DataSource getDataSource() {
         return _dataSource;
     }
-}
\ No newline at end of file
+}
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/dbutil/DerbyEmbeddedDB.java b/bpel-epr/src/main/java/org/apache/ode/il/dbutil/DerbyEmbeddedDB.java
index c98f93b..efb27b7 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/dbutil/DerbyEmbeddedDB.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/dbutil/DerbyEmbeddedDB.java
@@ -47,7 +47,7 @@
             try {
                 DriverManager.getConnection(_dbUrl).close();
             } catch (SQLException se) {
-                __log.error(se);
+                __log.error("",se);
             }
             EmbeddedDataSource dds = new EmbeddedDataSource();
             dds.setDatabaseName("memory:" + _dbName);
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/dbutil/InternalDB.java b/bpel-epr/src/main/java/org/apache/ode/il/dbutil/InternalDB.java
index 465d13b..adcc60c 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/dbutil/InternalDB.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/dbutil/InternalDB.java
@@ -68,7 +68,7 @@
     protected void shutdownDB() {}
     
     protected void initDataSource() throws DatabaseConfigException {
-        __log.info(__msgs.msgOdeUsingInternalDb(_odeConfig.getDbIntenralJdbcUrl(), _odeConfig.getDbInternalJdbcDriverClass()));
+        __log.info("",__msgs.msgOdeUsingInternalDb(_odeConfig.getDbIntenralJdbcUrl(), _odeConfig.getDbInternalJdbcDriverClass()));
         initInternalDb(_odeConfig.getDbIntenralJdbcUrl(), _odeConfig.getDbInternalJdbcDriverClass(),
                 _odeConfig.getDbInternalUserName(), _odeConfig.getDbInternalPassword());
     }
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java
index 5ddab47..a3430c5 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java
@@ -13,8 +13,8 @@
 import java.util.Set;
 import java.util.Stack;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * compare two object for equality. default strategy:
@@ -28,7 +28,7 @@
  */
 public class DeepEqualityHelper{
 
-	private static final Log __log = LogFactory.getLog(ObjectTraverser.class);
+	private static final Logger __log = LoggerFactory.getLogger(ObjectTraverser.class);
     public boolean logFalseThrough = false;
     private Stack<String> st = new Stack<String>();
     
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DomElementComparator.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DomElementComparator.java
index 92b496c..ec4b0ca 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DomElementComparator.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DomElementComparator.java
@@ -9,8 +9,8 @@
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.ls.DOMImplementationLS;
@@ -21,7 +21,7 @@
  * @see DeepEqualityHelper
  */
 public class DomElementComparator implements EqualityComparator{
-    private static final Log __log = LogFactory.getLog(DomElementComparator.class);
+    private static final Logger __log = LoggerFactory.getLogger(DomElementComparator.class);
 	private DeepEqualityHelper deepEquality;
 	@Override
 	public Boolean objectsEqual(Object obj1, Object obj2) {
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java
index 17a14d9..6f2bd5f 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java
@@ -6,8 +6,8 @@
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.obj.DebugInfo;
 import org.apache.ode.bpel.obj.ExtensibleImpl;
 import org.apache.ode.bpel.obj.OProcess;
@@ -17,7 +17,7 @@
  * @see DeepEqualityHelper
  */
 public class ExtensibeImplEqualityComp implements EqualityComparator{
-    private static final Log __log = LogFactory.getLog(ExtensibeImplEqualityComp.class);
+    private static final Logger __log = LoggerFactory.getLogger(ExtensibeImplEqualityComp.class);
 	private DeepEqualityHelper deepEquality;
 	public ExtensibeImplEqualityComp() {
 	}
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
index 30865dd..56a991d 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
@@ -6,15 +6,15 @@
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Traverse an Object with help of an {@link ObjectVisitor}, taking into consideration of cyclic references.
  * 
  */
 public class ObjectTraverser{
-    private static final Log __log = LogFactory.getLog(ObjectTraverser.class);
+    private static final Logger __log = LoggerFactory.getLogger(ObjectTraverser.class);
 
     private HandleTable htab = new HandleTable(1000, 0.8f);
 	private ObjectVisitor visitor;
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
index 31f5280..4fedd01 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
@@ -12,8 +12,8 @@
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.obj.ExtensibleImpl;
 
 /**
@@ -22,7 +22,7 @@
  * @see ObjectTraverser
  */
 public class OmOld2new extends AbstractObjectVisitor{
-    private static final Log __log = LogFactory.getLog(OmOld2new.class);
+    private static final Logger __log = LoggerFactory.getLogger(OmOld2new.class);
     
 	private static Map<String, String> beanPkgMap = new HashMap<String, String>();
 	static{
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/UpgradeChecker.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/UpgradeChecker.java
index 41809d8..66d4354 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/UpgradeChecker.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/UpgradeChecker.java
@@ -3,8 +3,8 @@
 import java.lang.reflect.Field;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.obj.ExtensibleImpl;
 
 /**
@@ -14,7 +14,7 @@
  * @see ObjectTraverser
  */
 public class UpgradeChecker extends AbstractObjectVisitor{
-    private static final Log __log = LogFactory.getLog(UpgradeChecker.class);
+    private static final Logger __log = LoggerFactory.getLogger(UpgradeChecker.class);
 
     private boolean newest = true;
 	@Override
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
index 300ca12..6860741 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
@@ -17,8 +17,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.o.Serializer;
 import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.OProcessWrapper;
@@ -34,7 +34,7 @@
  * @see OmSerdeFactory
  */
 public class DeSerializer {
-	private static final Log __log = LogFactory.getLog(DeSerializer.class);
+	private static final Logger __log = LoggerFactory.getLogger(DeSerializer.class);
 
 	private OProcessWrapper wrapper = new OProcessWrapper();
 	private InputStream is;
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
index d8918d7..8953ac9 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
@@ -12,8 +12,8 @@
 import javax.wsdl.OperationType;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.serde.jacksonhack.TypeBeanSerializerFactory;
 import org.apache.ode.utils.NSContext;
@@ -47,8 +47,7 @@
  * @see JsonOmSerializer
  */
 public class JsonOmDeserializer implements OmDeserializer {
-	protected static final Log __log = LogFactory
-			.getLog(JsonOmDeserializer.class);
+	protected static final Logger __log = LoggerFactory.getLogger(JsonOmDeserializer.class);
 
 	private OProcess process;
 	private InputStream is;
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java
index 9f0c762..1ec6778 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java
@@ -11,8 +11,8 @@
 import javax.wsdl.OperationType;
 import javax.wsdl.Part;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.serde.jacksonhack.TypeBeanSerializerFactory;
 import org.apache.ode.utils.NSContext;
@@ -38,8 +38,7 @@
  * @see JsonOmDeserializer
  */
 public class JsonOmSerializer implements OmSerializer {
-	protected static final Log __log = LogFactory
-			.getLog(JsonOmSerializer.class);
+	protected static final Logger __log = LoggerFactory.getLogger(JsonOmSerializer.class);
 
 	private OutputStream os;
 	private OProcess process;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/XslRuntimeUriResolver.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/XslRuntimeUriResolver.java
index 38395f6..21f5fbe 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/XslRuntimeUriResolver.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/XslRuntimeUriResolver.java
@@ -30,8 +30,8 @@
 import javax.xml.transform.URIResolver;
 import javax.xml.transform.stream.StreamSource;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.elang.xpath10.obj.OXPath10Expression;
 import org.apache.ode.bpel.obj.OXslSheet;
 import org.apache.ode.utils.StreamUtils;
@@ -44,7 +44,7 @@
  */
 public class XslRuntimeUriResolver implements URIResolver {
 
-    private static final Log __log = LogFactory.getLog(XslRuntimeUriResolver.class);
+    private static final Logger __log = LoggerFactory.getLogger(XslRuntimeUriResolver.class);
 
     private OXPath10Expression _expr;
     private final URI _baseResourceURI;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
index 0abee3c..94abe32 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
@@ -29,8 +29,8 @@
 
 import net.sf.saxon.dom.NodeWrapper;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.elang.XslRuntimeUriResolver;
 import org.apache.ode.bpel.elang.xpath10.obj.OXPath10Expression;
@@ -63,7 +63,7 @@
  * {@link EvaluationContext}.
  */
 class JaxenContexts implements FunctionContext, VariableContext {
-    private static final Log __log = LogFactory.getLog(JaxenContexts.class);
+    private static final Logger __log = LoggerFactory.getLogger(JaxenContexts.class);
 
     /** Static, thread-safe singleton implementing default XPath functions */
     private static final FunctionContext __defaultXPathFunctions = XPathFunctionContext.getInstance();
@@ -247,9 +247,8 @@
 
             OXPath10Expression.OSigGetVariableData sig = _oxpath.resolveGetVariableDataSig(varname,partname,xpathStr);
             if (sig == null) {
-                String msg = "InternalError: Attempt to use an unknown getVariableData signature: " + args;
-                if (__log.isFatalEnabled())
-                    __log.fatal(msg);
+                String msg = "InternalError: Attempt to use an unknown getVariableData signature: " + args;                
+                __log.error(msg);
                 throw new FunctionCallException(msg);
             }
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenNamespaceContextAdapter.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenNamespaceContextAdapter.java
index b29a7a2..9601882 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenNamespaceContextAdapter.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenNamespaceContextAdapter.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.elang.xpath10.runtime;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.jaxen.NamespaceContext;
 
 /**
@@ -28,7 +28,7 @@
  * @pattern Adapter
  */
 class JaxenNamespaceContextAdapter implements NamespaceContext {
-  private static final Log __log = LogFactory.getLog(JaxenNamespaceContextAdapter.class);
+  private static final Logger __log = LoggerFactory.getLogger(JaxenNamespaceContextAdapter.class);
 
   private javax.xml.namespace.NamespaceContext _namespaceContext;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java
index f2a5476..f60840f 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.elang.xpath10.runtime;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.elang.xpath10.obj.OXPath10Expression;
 import org.apache.ode.bpel.explang.ConfigurationException;
@@ -54,7 +54,7 @@
  */
 public class XPath10ExpressionRuntime implements ExpressionLanguageRuntime {
     /** Class-level logger. */
-    private static final Log __log = LogFactory.getLog(XPath10ExpressionRuntime.class);
+    private static final Logger __log = LoggerFactory.getLogger(XPath10ExpressionRuntime.class);
 
     /** Compiled expression cache. */
     private final Map<String, XPath> _compiledExpressions = new HashMap<String, XPath>();
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
index 5dd082d..14430eb 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
@@ -45,8 +45,8 @@
 import net.sf.saxon.value.YearMonthDurationValue;
 
 import org.apache.commons.httpclient.URIException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.elang.XslRuntimeUriResolver;
 import org.apache.ode.bpel.elang.xpath10.obj.OXPath10Expression;
@@ -74,7 +74,7 @@
  */
 public class JaxpFunctionResolver implements XPathFunctionResolver {
 
-    private static final Log __log = LogFactory.getLog(JaxpFunctionResolver.class);
+    private static final Logger __log = LoggerFactory.getLogger(JaxpFunctionResolver.class);
 
     private EvaluationContext _ectx;
     private OXPath20ExpressionBPEL20 _oxpath;
@@ -175,8 +175,7 @@
             OXPath10Expression.OSigGetVariableData sig = _oxpath.resolveGetVariableDataSig(varname, partname, xpathStr);
             if (sig == null) {
                 String msg = "InternalError: Attempt to use an unknown getVariableData signature: " + args;
-                if (__log.isFatalEnabled())
-                    __log.fatal(msg);
+                __log.error(msg);
                 throw new XPathFunctionException(msg);
             }
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java
index 2f6a405..bdb9af6 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java
@@ -31,8 +31,8 @@
 import net.sf.saxon.value.StringValue;
 import net.sf.saxon.value.Value;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.elang.xpath10.obj.OXPath10ExpressionBPEL20;
 import org.apache.ode.bpel.elang.xpath20.compiler.WrappedResolverException;
@@ -50,7 +50,7 @@
  */
 public class JaxpVariableResolver implements XPathVariableResolver {
 
-    private static final Log __log = LogFactory.getLog(JaxpVariableResolver.class);
+    private static final Logger __log = LoggerFactory.getLogger(JaxpVariableResolver.class);
 
     private EvaluationContext _ectx;
     private OXPath10ExpressionBPEL20 _oxpath;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
index 74ac7e0..73d2acd 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
@@ -38,8 +38,8 @@
 import net.sf.saxon.value.DurationValue;
 import net.sf.saxon.xpath.XPathFactoryImpl;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.elang.xpath10.obj.OXPath10Expression;
 import org.apache.ode.bpel.elang.xpath20.compiler.WrappedResolverException;
@@ -72,7 +72,7 @@
     static final short NUMBER_TYPE = 5;
 
     /** Class-level logger. */
-    private static final Log __log = LogFactory.getLog(XPath20ExpressionRuntime.class);
+    private static final Logger __log = LoggerFactory.getLogger(XPath20ExpressionRuntime.class);
     
     private final XPathFactory _xpf = new XPathFactoryImpl();
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java
index 5678b51..36bf2ea 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java
@@ -56,8 +56,8 @@
 import net.sf.saxon.xqj.SaxonXQDataSource;
 import net.sf.saxon.xqj.SaxonXQItem;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.elang.xpath20.compiler.Constants;
 import org.apache.ode.bpel.elang.xpath20.compiler.WrappedResolverException;
@@ -94,7 +94,7 @@
     static final short NUMBER_TYPE = 5;
 
     /** Class-level logger. */
-    private static final Log __log = LogFactory.getLog(XQuery10ExpressionRuntime.class);
+    private static final Logger __log = LoggerFactory.getLogger(XQuery10ExpressionRuntime.class);
 
     /**
      * Creates a new XQuery10ExpressionRuntime object.
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelDatabase.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelDatabase.java
index 8f4706a..d933730 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelDatabase.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelDatabase.java
@@ -26,14 +26,14 @@
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.iapi.Scheduler;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Encapsulates transactional access to the BPEL database.
  */
 public class BpelDatabase {
-  static Log __log = LogFactory.getLog(BpelDatabase.class);
+  static Logger __log = LoggerFactory.getLogger(BpelDatabase.class);
 
   protected BpelDAOConnectionFactory _sscf;
   protected Scheduler _scheduler;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index b0473bc..da4f86c 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.bpel.engine;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.clapi.ClusterLock;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
@@ -76,7 +76,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class BpelEngineImpl implements BpelEngine {
-    private static final Log __log = LogFactory.getLog(BpelEngineImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelEngineImpl.class);
 
     /** RNG, for delays */
     private Random _random = new Random(System.currentTimeMillis());
@@ -265,7 +265,7 @@
             break;
         default:
             String errmsg = "BpelEngineImpl: internal error, invalid MexDAO direction: " + mexId;
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new BpelEngineException(errmsg);
         }
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
index e8d0580..5858d93 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
@@ -32,8 +32,8 @@
 import javax.wsdl.Fault;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.agents.memory.SizingAgent;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.common.ProcessState;
@@ -89,7 +89,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class BpelProcess {
-    static final Log __log = LogFactory.getLog(BpelProcess.class);
+    static final Logger __log = LoggerFactory.getLogger(BpelProcess.class);
 
     private static final Messages __msgs = MessageBundle.getMessages(Messages.class);
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcessDatabase.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcessDatabase.java
index f6b4b2e..f2c4cab 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcessDatabase.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcessDatabase.java
@@ -24,14 +24,14 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Encapusulates access to a BPEL process database.
  */
 class BpelProcessDatabase extends BpelDatabase {
-  static Log __log = LogFactory.getLog(BpelProcessDatabase.class);
+  static Logger __log = LoggerFactory.getLogger(BpelProcessDatabase.class);
 
   private QName _processId;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
index 7ceac7c..97544bd 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
@@ -31,8 +31,8 @@
 import javax.wsdl.Operation;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.common.FaultException;
@@ -108,7 +108,7 @@
 
 public class BpelRuntimeContextImpl implements BpelRuntimeContext {
 
-    private static final Log __log = LogFactory.getLog(BpelRuntimeContextImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelRuntimeContextImpl.class);
 
     /** Data-access object for process instance. */
     protected ProcessInstanceDAO _dao;
@@ -1214,14 +1214,14 @@
         if (dao == null) {
             // this should not happen....
             String msg = "Engine requested non-existent message exchange: " + mexId;
-            __log.fatal(msg);
+            __log.error(msg);
             throw new BpelEngineException(msg);
         }
 
         if (dao.getDirection() != MessageExchangeDAO.DIR_PARTNER_INVOKES_MYROLE) {
             // this should not happen....
             String msg = "Engine requested my-role request for a partner-role mex: " + mexId;
-            __log.fatal(msg);
+            __log.error(msg);
             throw new BpelEngineException(msg);
         }
 
@@ -1235,7 +1235,7 @@
                 if (request == null) {
                     // this also should not happen
                     String msg = "Engine requested request for message exchange that did not have one: " + mexId;
-                    __log.fatal(msg);
+                    __log.error(msg);
                     throw new BpelEngineException(msg);
                 }
                 return mergeHeaders(request);
@@ -1243,7 +1243,7 @@
                 // We should not be in any other state when requesting this.
                 String msg = "Engine requested response while the message exchange " + mexId + " was in the state "
                         + status;
-                __log.fatal(msg);
+                __log.error(msg);
                 throw new BpelEngineException(msg);
         }
     }
@@ -1289,13 +1289,13 @@
         if (dao == null) {
             // this should not happen....
             String msg = "Engine requested non-existent message exchange: " + mexId;
-            __log.fatal(msg);
+            __log.error(msg);
             throw new BpelEngineException(msg);
         }
         if (dao.getDirection() != MessageExchangeDAO.DIR_BPEL_INVOKES_PARTNERROLE) {
             // this should not happen....
             String msg = "Engine requested partner response for a my-role mex: " + mexId;
-            __log.fatal(msg);
+            __log.error(msg);
             throw new BpelEngineException(msg);
         }
 
@@ -1308,7 +1308,7 @@
                 if (response == null) {
                     // this also should not happen
                     String msg = "Engine requested response for message exchange that did not have one: " + mexId;
-                    __log.fatal(msg);
+                    __log.error(msg);
                     throw new BpelEngineException(msg);
                 }
                 break;
@@ -1319,7 +1319,7 @@
                 // We should not be in any other state when requesting this.
                 String msg = "Engine requested response while the message exchange " + mexId + " was in the state "
                         + status;
-                __log.fatal(msg);
+                __log.error(msg);
                 throw new BpelEngineException(msg);
         }
         return response;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
index 2334262..3966fc1 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
@@ -33,8 +33,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
@@ -83,7 +83,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class BpelServerImpl implements BpelServer, Scheduler.JobProcessor {
-    private static final Log __log = LogFactory.getLog(BpelServerImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelServerImpl.class);
 
     private static final Messages __msgs = MessageBundle.getMessages(Messages.class);
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/CustomProcessProperties.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/CustomProcessProperties.java
index c8f17ec..9c7c21a 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/CustomProcessProperties.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/CustomProcessProperties.java
@@ -23,15 +23,15 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 public class CustomProcessProperties {
-    private static final Log __log = LogFactory.getLog(CustomProcessProperties.class);
+    private static final Logger __log = LoggerFactory.getLogger(CustomProcessProperties.class);
 
     public Node getProperty(QName propertyName) {
         String name = propertyName.getLocalPart();
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DebuggerSupport.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DebuggerSupport.java
index 34031ca..ec64736 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DebuggerSupport.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DebuggerSupport.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.engine;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.DebuggerContext;
 import org.apache.ode.bpel.iapi.Scheduler.JobDetails;
 import org.apache.ode.bpel.iapi.Scheduler.JobType;
@@ -62,7 +62,7 @@
  */
 public class DebuggerSupport implements DebuggerContext {
 
-    private static final Log __log = LogFactory.getLog(DebuggerSupport.class);
+    private static final Logger __log = LoggerFactory.getLogger(DebuggerSupport.class);
     private static final Messages __msgs = MessageBundle.getMessages(Messages.class);
 
     static final Breakpoint[] EMPTY_BP = new Breakpoint[0];
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java
index 4954b5c..c59581d 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager.java
@@ -27,8 +27,8 @@
 
 import javax.wsdl.OperationType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.runtime.PartnerLinkInstance;
 import org.apache.ode.bpel.runtime.Selector;
 import org.apache.ode.utils.ObjectPrinter;
@@ -44,7 +44,7 @@
 public class IMAManager implements Serializable {
     private static final long serialVersionUID = -5556374398943757951L;
 
-    private static final Log __log = LogFactory.getLog(IMAManager.class);
+    private static final Logger __log = LoggerFactory.getLogger(IMAManager.class);
 
     // holds rid for registered IMAs
     public final Map<RequestIdTuple, Entry> _byRid = new HashMap<RequestIdTuple, Entry>();
@@ -89,7 +89,7 @@
 
         if (_byChannel.containsKey(pickResponseChannel)) {
             String errmsg = "INTERNAL ERROR: Duplicate ENTRY for RESPONSE CHANNEL " + pickResponseChannel;
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new IllegalArgumentException(errmsg);
         }
 
@@ -98,7 +98,7 @@
             final RequestIdTuple rid = new RequestIdTuple(selectors[i].plinkInstance, selectors[i].opName);
             if (_byRid.containsKey(rid)) {
                 String errmsg = "INTERNAL ERROR: Duplicate ENTRY for RID " + rid;
-                __log.fatal(errmsg);
+                __log.error(errmsg);
                 throw new IllegalStateException(errmsg);
             }
             _byRid.put(rid, entry);
@@ -148,7 +148,7 @@
             while (_byRid.values().remove(entry));
         } else if (!isTimer){
             String errmsg = "INTERNAL ERROR: No ENTRY for RESPONSE CHANNEL " + pickResponseChannel;
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new IllegalArgumentException(errmsg);
         }
     }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager2.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager2.java
index a629e8f..44d86f4 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager2.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/IMAManager2.java
@@ -28,8 +28,8 @@
 
 import javax.wsdl.OperationType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.runtime.PartnerLinkInstance;
 import org.apache.ode.bpel.runtime.Selector;
@@ -44,7 +44,7 @@
 public class IMAManager2 implements Serializable {
     private static final long serialVersionUID = -5556374398943757951L;
 
-    private static final Log __log = LogFactory.getLog(IMAManager2.class);
+    private static final Logger __log = LoggerFactory.getLogger(IMAManager2.class);
 
     // holds rid for registered IMAs
     public final Map<RequestIdTuple, Entry> _byRid = new HashMap<RequestIdTuple, Entry>();
@@ -89,7 +89,7 @@
 
         if (_byChannel.containsKey(pickResponseChannel)) {
             String errmsg = "INTERNAL ERROR: Duplicate ENTRY for RESPONSE CHANNEL " + pickResponseChannel;
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new IllegalArgumentException(errmsg);
         }
 
@@ -98,7 +98,7 @@
             final RequestIdTuple rid = new RequestIdTuple(selectors[i].plinkInstance, selectors[i].opName, selectors[i].correlationKeySet);
             if (_byRid.containsKey(rid)) {
                 String errmsg = "INTERNAL ERROR: Duplicate ENTRY for RID " + rid;
-                __log.fatal(errmsg);
+                __log.error(errmsg);
                 throw new IllegalStateException(errmsg);
             }
             _byRid.put(rid, entry);
@@ -148,7 +148,7 @@
             while (_byRid.values().remove(entry));
         } else if (!isTimer){
             String errmsg = "INTERNAL ERROR: No ENTRY for RESPONSE CHANNEL " + pickResponseChannel;
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new IllegalArgumentException(errmsg);
         }
     }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
index 1571eac..3075a81 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.engine;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.clapi.ClusterLock;
 
 import java.util.HashMap;
@@ -38,7 +38,7 @@
  * @author Maciej Szefler - m s z e f l e r @ g m a i l . c o m
  */
 public class InstanceLockManager implements ClusterLock<Long> {
-    private static final Log __log = LogFactory.getLog(InstanceLockManager.class);
+    private static final Logger __log = LoggerFactory.getLogger(InstanceLockManager.class);
 
     private final Lock _mutex = new java.util.concurrent.locks.ReentrantLock();
     private final Map<Long, InstanceInfo> _locks = new HashMap<Long,InstanceInfo>();
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java
index 010b3ac..820f4f1 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.bpel.engine;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.MessageDAO;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.iapi.BpelEngineException;
@@ -37,7 +37,7 @@
 
 abstract class MessageExchangeImpl implements MessageExchange {
 
-    private static final Log __log = LogFactory.getLog(MessageExchangeImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(MessageExchangeImpl.class);
     protected static final Messages __msgs = MessageBundle.getMessages(Messages.class);
 
     /** Process-Instance identifier.*/
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java
index 232791f..a9320a3 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java
@@ -31,8 +31,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.engine.replayer.Replayer;
 import org.apache.ode.bpel.iapi.Message;
@@ -53,7 +53,7 @@
 
 public class MyRoleMessageExchangeImpl extends MessageExchangeImpl implements MyRoleMessageExchange {
 
-    private static final Log __log = LogFactory.getLog(MyRoleMessageExchangeImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(MyRoleMessageExchangeImpl.class);
 
     protected BpelProcess _process;
 
@@ -113,7 +113,7 @@
     public Future invoke(Message request) {
         if (request == null) {
             String errmsg = "Must pass non-null message to invoke()!";
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new NullPointerException(errmsg);
         }
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/NStateLatch.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/NStateLatch.java
index f7c7ac7..3a8293f 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/NStateLatch.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/NStateLatch.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.bpel.engine;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
@@ -38,7 +38,7 @@
  * @author Maciej Szefler ( m s z e f l e r @ g m a i l . c o m )
  */
 public class NStateLatch {
-    static final Log __log = LogFactory.getLog(NStateLatch.class);
+    static final Logger __log = LoggerFactory.getLogger(NStateLatch.class);
 
     /** Current state. */
     private int _state = -1;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/OutstandingRequestManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/OutstandingRequestManager.java
index 7746d2b..e6c0ce4 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/OutstandingRequestManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/OutstandingRequestManager.java
@@ -29,8 +29,8 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <p>
@@ -48,7 +48,7 @@
 public class OutstandingRequestManager implements Serializable {
   private static final long serialVersionUID = -5556374398943757951L;
 
-  private static final Log __log = LogFactory.getLog(OutstandingRequestManager.class);
+  private static final Logger __log = LoggerFactory.getLogger(OutstandingRequestManager.class);
 
   public final Map<RequestIdTuple, Entry> _byRid = new HashMap<RequestIdTuple, Entry>();
   public final Map<String, Entry> _byChannel = new HashMap<String, Entry>();
@@ -88,7 +88,7 @@
 
     if (_byChannel.containsKey(pickResponseChannel)) {
       String errmsg = "INTERNAL ERROR: Duplicate ENTRY for RESPONSE CHANNEL " + pickResponseChannel;
-      __log.fatal(errmsg);
+      __log.error(errmsg);
       throw new IllegalArgumentException(errmsg);
     }
 
@@ -101,7 +101,7 @@
       final RequestIdTuple rid = new RequestIdTuple(selectors[i].plinkInstance,selectors[i].opName, selectors[i].messageExchangeId);
       if (_byRid.containsKey(rid)) {
         String errmsg = "INTERNAL ERROR: Duplicate ENTRY for RID " + rid;
-        __log.fatal(errmsg);
+        __log.error(errmsg);
         throw new IllegalStateException(errmsg);
       }
       _byRid.put(rid,  entry);
@@ -143,7 +143,7 @@
     Entry entry = _byChannel.get(pickResponseChannel);
     if (entry == null) {
       String errmsg = "INTERNAL ERROR: No ENTRY for RESPONSE CHANNEL " + pickResponseChannel;
-      __log.fatal(errmsg);
+      __log.error(errmsg);
       throw new IllegalArgumentException(errmsg);
     }
 
@@ -151,7 +151,7 @@
 //    Hence, the sanity check shown below is no longer valid
 //    if (entry.mexRef != null) {
 //      String errmsg = "INTERNAL ERROR: Duplicate ASSOCIATION for CHANEL " + pickResponseChannel;
-//      __log.fatal(errmsg);
+//      __log.error(errmsg);
 //      throw new IllegalStateException(errmsg);
 //    }
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java
index ab05ce4..9146932 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java
@@ -28,8 +28,8 @@
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.common.FaultException;
@@ -65,7 +65,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class PartnerLinkMyRoleImpl extends PartnerLinkRoleImpl {
-    private static final Log __log = LogFactory.getLog(BpelProcess.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelProcess.class);
     private static final Messages __msgs = MessageBundle.getMessages(Messages.class);
 
     /** The local endpoint for this "myrole". */
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkPartnerRoleImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkPartnerRoleImpl.java
index 0508457..76be5a1 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkPartnerRoleImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkPartnerRoleImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.engine;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.Endpoint;
 import org.apache.ode.bpel.iapi.PartnerRoleChannel;
 import org.apache.ode.bpel.obj.OPartnerLink;
@@ -28,7 +28,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 class PartnerLinkPartnerRoleImpl extends PartnerLinkRoleImpl {
-    static final Log __log = LogFactory.getLog(BpelProcess.class);
+    static final Logger __log = LoggerFactory.getLogger(BpelProcess.class);
 
     Endpoint _initialPartner;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java
index 6e7ed43..77a7795 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerRoleMessageExchangeImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.bpel.engine;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.engine.replayer.Replayer;
 import org.apache.ode.bpel.iapi.BpelEngineException;
@@ -38,7 +38,7 @@
 import javax.xml.namespace.QName;
 
 public class PartnerRoleMessageExchangeImpl extends MessageExchangeImpl implements PartnerRoleMessageExchange {
-    private static final Log LOG = LogFactory.getLog(PartnerRoleMessageExchangeImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PartnerRoleMessageExchangeImpl.class);
 
     private PartnerRoleChannel _channel;
     private EndpointReference _myRoleEPR;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
index dad6a64..e1a7bd9 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
@@ -41,8 +41,8 @@
 import javax.xml.namespace.QName;
 
 import org.apache.commons.collections.comparators.ComparatorChain;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.BpelEventFilter;
 import org.apache.ode.bpel.common.Filter;
 import org.apache.ode.bpel.common.InstanceFilter;
@@ -158,7 +158,7 @@
 
     protected static final Messages __msgs = MessageBundle.getMessages(Messages.class);
 
-    protected static Log __log = LogFactory.getLog(BpelManagementFacadeImpl.class);
+    protected static Logger __log = LoggerFactory.getLogger(BpelManagementFacadeImpl.class);
 
     protected static final ProcessStatusConverter __psc = new ProcessStatusConverter();
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessCleanUpRunnable.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessCleanUpRunnable.java
index 6790ec8..96c79d4 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessCleanUpRunnable.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessCleanUpRunnable.java
@@ -24,8 +24,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.DeferredProcessInstanceCleanable;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.engine.BpelServerImpl.ContextsAware;
@@ -35,7 +35,7 @@
 public class ProcessCleanUpRunnable implements MapSerializableRunnable, ContextsAware {
     private static final long serialVersionUID = 1L;
 
-    private static final Log __log = LogFactory.getLog(ProcessCleanUpRunnable.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessCleanUpRunnable.class);
 
     public final static int PROCESS_CLEANUP_TRANSACTION_SIZE = Integer.getInteger("org.apache.ode.processInstanceDeletion.transactionSize", 10);
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/CronScheduler.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/CronScheduler.java
index e8142b1..691591a 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/CronScheduler.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/CronScheduler.java
@@ -31,8 +31,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.engine.Contexts;
 import org.apache.ode.bpel.engine.BpelServerImpl.ContextsAware;
 import org.apache.ode.bpel.iapi.ClusterAware;
@@ -43,7 +43,7 @@
 import org.apache.ode.utils.CronExpression;
 
 public class CronScheduler {
-    static final Log __log = LogFactory.getLog(CronScheduler.class);
+    static final Logger __log = LoggerFactory.getLogger(CronScheduler.class);
 
     // minimum interval of the cron job(1 second)
     private final long MIN_INTERVAL = 0;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/RuntimeDataCleanupRunnable.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/RuntimeDataCleanupRunnable.java
index 098f8b4..6320b36 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/RuntimeDataCleanupRunnable.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/RuntimeDataCleanupRunnable.java
@@ -25,8 +25,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.InstanceFilter;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.FilteredInstanceDeletable;
@@ -38,7 +38,7 @@
 import org.apache.ode.bpel.iapi.Scheduler.MapSerializableRunnable;
 
 public class RuntimeDataCleanupRunnable implements MapSerializableRunnable, ContextsAware {
-    private final Log __log = LogFactory.getLog(RuntimeDataCleanupRunnable.class);
+    private final Logger __log = LoggerFactory.getLogger(RuntimeDataCleanupRunnable.class);
 
     private static final long serialVersionUID = 1L;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/SystemSchedulesConfig.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/SystemSchedulesConfig.java
index 3721cd6..dfaa932 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/SystemSchedulesConfig.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/cron/SystemSchedulesConfig.java
@@ -25,8 +25,8 @@
 import java.util.HashMap;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.schedules.SchedulesDocument;
 import org.apache.ode.bpel.schedules.TSchedule;
 import org.apache.ode.bpel.dd.TCleanup;
@@ -40,7 +40,7 @@
 
 
 public class SystemSchedulesConfig {
-    private final static Log __log = LogFactory.getLog(SystemSchedulesConfig.class);
+    private final static Logger __log = LoggerFactory.getLogger(SystemSchedulesConfig.class);
 
     public final static String SCHEDULE_CONFIG_FILE_PROP_KEY = "org.apache.ode.scheduleConfigFile";
     private File schedulesFile;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/extvar/ExternalVariableManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/extvar/ExternalVariableManager.java
index 25cb69c..8c576ac 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/extvar/ExternalVariableManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/extvar/ExternalVariableManager.java
@@ -23,8 +23,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.engine.BpelProcess;
 import org.apache.ode.bpel.iapi.BpelEngineException;
 import org.apache.ode.bpel.obj.OBase;
@@ -47,7 +47,7 @@
  */
 public class ExternalVariableManager {
 
-    private static final Log __log = LogFactory.getLog(ExternalVariableManager.class);
+    private static final Logger __log = LoggerFactory.getLogger(ExternalVariableManager.class);
 
     /** Mapping of engine names to engine. */
     private Map<QName, ExternalVariableModule> _engines;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeyMigration.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeyMigration.java
index d3ca07f..3887e31 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeyMigration.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeyMigration.java
@@ -27,8 +27,8 @@
 import org.apache.ode.bpel.obj.*;
 import org.apache.ode.bpel.runtime.Selector;
 import org.apache.ode.jacob.vpu.ExecutionQueueImpl;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.xml.namespace.QName;
 import javax.wsdl.Operation;
@@ -43,7 +43,7 @@
  * set id to one using its name. So something like 1~abc~de will become foo~abc~de.
  */
 public class CorrelationKeyMigration implements Migration {
-    private static final Log __log = LogFactory.getLog(CorrelationKeyMigration.class);
+    private static final Logger __log = LoggerFactory.getLogger(CorrelationKeyMigration.class);
 
     public boolean migrate(Set<BpelProcess> registeredProcesses, BpelDAOConnection connection) {
         // Map only used to avoid duplicates, set would force to re-implement equals
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeySetDataMigration.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeySetDataMigration.java
index 33200e3..96cd72e 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeySetDataMigration.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeySetDataMigration.java
@@ -27,8 +27,8 @@
 import org.apache.ode.bpel.obj.OPartnerLink;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.CorrelationKeySet;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.wsdl.Operation;
 import java.util.Set;
@@ -38,7 +38,7 @@
  * Changes the scheme of the correlation key value in the routes to use @2[...]
  */
 public class CorrelationKeySetDataMigration implements Migration {
-    private static final Log __log = LogFactory.getLog(CorrelationKeyMigration.class);
+    private static final Logger __log = LoggerFactory.getLogger(CorrelationKeyMigration.class);
 
     public boolean migrate(Set<BpelProcess> registeredProcesses, BpelDAOConnection connection) {
         for (BpelProcess process : registeredProcesses) {
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeySetMigration.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeySetMigration.java
index 7374261..3e08590 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeySetMigration.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelationKeySetMigration.java
@@ -30,8 +30,8 @@
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.jacob.vpu.ExecutionQueueImpl;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.xml.namespace.QName;
 import java.util.Set;
@@ -45,7 +45,7 @@
  * Migrates the database from using single correlations to multiple correlations support.
  */
 public class CorrelationKeySetMigration implements Migration {
-    private static final Log __log = LogFactory.getLog(CorrelationKeySetMigration.class);
+    private static final Logger __log = LoggerFactory.getLogger(CorrelationKeySetMigration.class);
 
     public boolean migrate(Set<BpelProcess> registeredProcesses, BpelDAOConnection connection) {
         boolean v1First = true;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelatorsMigration.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelatorsMigration.java
index 6a97632..6443aff 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelatorsMigration.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/CorrelatorsMigration.java
@@ -24,8 +24,8 @@
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.CorrelatorDAO;
 import org.apache.ode.bpel.obj.OPartnerLink;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.wsdl.Operation;
 import java.util.Set;
@@ -36,7 +36,7 @@
  * partnerLinkId+"."+operationName to partnerLinkName+"."+operationName
  */
 public class CorrelatorsMigration implements Migration {
-    private static final Log __log = LogFactory.getLog(CorrelatorsMigration.class);
+    private static final Logger __log = LoggerFactory.getLogger(CorrelatorsMigration.class);
 
     public boolean migrate(Set<BpelProcess> registeredProcesses, BpelDAOConnection connection) {
         for (BpelProcess process : registeredProcesses) {
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/IMAManagerMigration.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/IMAManagerMigration.java
index c6f8f4e..5843184 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/IMAManagerMigration.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/IMAManagerMigration.java
@@ -24,8 +24,8 @@
 import java.util.Collection;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
@@ -39,7 +39,7 @@
  *
  */
 public class IMAManagerMigration implements Migration {
-    private static Log __log = LogFactory.getLog(IMAManagerMigration.class);
+    private static Logger __log = LoggerFactory.getLogger(IMAManagerMigration.class);
 
     public boolean migrate(Set<BpelProcess> registeredProcesses, BpelDAOConnection connection) {
         boolean migrationResult = true;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/MigrationHandler.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/MigrationHandler.java
index 19071ba..07afa8d 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/MigrationHandler.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/MigrationHandler.java
@@ -31,8 +31,8 @@
 import java.util.Set;
 import java.util.concurrent.Callable;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.engine.BpelProcess;
 import org.apache.ode.bpel.engine.Contexts;
 
@@ -40,7 +40,7 @@
  * Checks database schema versions and migrates when necessary.
  */
 public class MigrationHandler {
-    private static final Log __log = LogFactory.getLog(MigrationHandler.class);
+    private static final Logger __log = LoggerFactory.getLogger(MigrationHandler.class);
 
     public static final int CURRENT_SCHEMA_VERSION = 7;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/OutstandingRequestsMigration.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/OutstandingRequestsMigration.java
index 232add8..8883033 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/OutstandingRequestsMigration.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/migration/OutstandingRequestsMigration.java
@@ -25,8 +25,8 @@
 import java.util.Collection;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
@@ -40,7 +40,7 @@
  *
  */
 public class OutstandingRequestsMigration implements Migration {
-    private static Log __log = LogFactory.getLog(OutstandingRequestsMigration.class);
+    private static Logger __log = LoggerFactory.getLogger(OutstandingRequestsMigration.class);
 
     public boolean migrate(Set<BpelProcess> registeredProcesses, BpelDAOConnection connection) {
         boolean migrationResult = true;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/Replayer.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/Replayer.java
index 8ed99d4..424a1fd 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/Replayer.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/Replayer.java
@@ -28,8 +28,8 @@
 import java.util.List;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
@@ -66,7 +66,7 @@
  *
  */
 public class Replayer {
-    private static final Log __log = LogFactory.getLog(Replayer.class);
+    private static final Logger __log = LoggerFactory.getLogger(Replayer.class);
     public static ThreadLocal<Replayer> replayer = new ThreadLocal<Replayer>();
     public ReplayerScheduler scheduler = new ReplayerScheduler();
     public BpelEngineImpl engine = null;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerBpelRuntimeContextImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerBpelRuntimeContextImpl.java
index 206695d..ef7487d 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerBpelRuntimeContextImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerBpelRuntimeContextImpl.java
@@ -24,8 +24,8 @@
 import javax.wsdl.Operation;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.dao.MessageDAO;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
@@ -70,7 +70,7 @@
  *
  */
 public class ReplayerBpelRuntimeContextImpl extends BpelRuntimeContextImpl {
-    private static final Log __log = LogFactory.getLog(ReplayerBpelRuntimeContextImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ReplayerBpelRuntimeContextImpl.class);
 
     private ReplayerContext replayerContext;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerContext.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerContext.java
index 98c7aac..3447fa0 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerContext.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerContext.java
@@ -35,8 +35,8 @@
 import net.sf.saxon.xqj.SaxonXQConnection;
 import net.sf.saxon.xqj.SaxonXQDataSource;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.engine.BpelEngineImpl;
@@ -67,7 +67,7 @@
  *
  */
 public class ReplayerContext {
-    private static final Log __log = LogFactory.getLog(ReplayerContext.class);
+    private static final Logger __log = LoggerFactory.getLogger(ReplayerContext.class);
 
     public ReplayerScheduler scheduler;
 
@@ -182,7 +182,6 @@
                 return answer;
             } catch (Exception e) {
                 __log.error("", e);
-                __log.error(e.getCause());
                 throw new IllegalStateException(e.getMessage());
             }
         }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerScheduler.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerScheduler.java
index 5340b41..b965bf9 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerScheduler.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/replayer/ReplayerScheduler.java
@@ -24,8 +24,8 @@
 import java.util.concurrent.Callable;
 import java.util.concurrent.Future;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.Scheduler;
@@ -37,7 +37,7 @@
  *
  */
 public class ReplayerScheduler implements Scheduler {
-    private static final Log __log = LogFactory.getLog(ReplayerScheduler.class);
+    private static final Logger __log = LoggerFactory.getLogger(ReplayerScheduler.class);
 
     public Replayer replayer;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java
index 8f14f87..cb9e769 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java
@@ -30,8 +30,8 @@
 import javax.sql.DataSource;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.ISO8601DateParser;
@@ -48,7 +48,7 @@
  * @author Maciej Szefler <mszefler at gmail dot com>
  */
 class DbExternalVariable {
-    private static final Log __log = LogFactory.getLog(DbExternalVariable.class);
+    private static final Logger __log = LoggerFactory.getLogger(DbExternalVariable.class);
 
     private static final String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance";
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
index bced44f..d77899f 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
@@ -35,8 +35,8 @@
 import javax.swing.text.StyleContext.SmallAttributeSet;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.extvar.jdbc.DbExternalVariable.Column;
 import org.apache.ode.bpel.extvar.jdbc.DbExternalVariable.RowKey;
 import org.apache.ode.bpel.extvar.jdbc.DbExternalVariable.RowVal;
@@ -49,7 +49,7 @@
 
 public class JdbcExternalVariableModule implements ExternalVariableModule {
 
-    private static final Log __log = LogFactory.getLog(JdbcExternalVariableModule.class);
+    private static final Logger __log = LoggerFactory.getLogger(JdbcExternalVariableModule.class);
 
     public static final String JDBC_NS = "http://ode.apache.org/externalVariables/jdbc";
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/RowSubset.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/RowSubset.java
index 81dba75..ca94764 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/RowSubset.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/RowSubset.java
@@ -26,12 +26,12 @@
 import java.util.HashMap;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.extvar.jdbc.DbExternalVariable.Column;;
 
 class RowSubset extends ArrayList<Object> {
-    private static final Log LOG = LogFactory.getLog(RowSubset.class);
+    private static final Logger LOG = LoggerFactory.getLogger(RowSubset.class);
 
     private static final long serialVersionUID = 1L;
 
@@ -109,4 +109,4 @@
         buf.append(")");
         return buf.toString();
     }
-}
\ No newline at end of file
+}
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
index eeea97e..60e2328 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.memdao;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.BpelEventFilter;
 import org.apache.ode.bpel.common.Filter;
 import org.apache.ode.bpel.common.InstanceFilter;
@@ -56,7 +56,7 @@
  * A very simple, in-memory implementation of the {@link BpelDAOConnection} interface.
  */
 class BpelDAOConnectionImpl implements BpelDAOConnection {
-    private static final Log __log = LogFactory.getLog(BpelDAOConnectionImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelDAOConnectionImpl.class);
 
     private Scheduler _scheduler;
     private Map<QName, ProcessDaoImpl> _store;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
index 42d38d3..c090b53 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.memdao;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.dao.*;
@@ -33,7 +33,7 @@
  * A very simple, in-memory implementation of the {@link CorrelatorDAO} interface.
  */
 class CorrelatorDaoImpl extends DaoBaseImpl implements CorrelatorDAO {
-    private static final Log __log = LogFactory.getLog(CorrelatorDaoImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(CorrelatorDaoImpl.class);
 
     private String _correlatorId;
     private List<MsgQueueEntry> _messages;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/DaoBaseImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/DaoBaseImpl.java
index 01cf77e..60040a8 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/DaoBaseImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/DaoBaseImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.memdao;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Date;
 
@@ -28,7 +28,7 @@
  */
 class DaoBaseImpl {
     @SuppressWarnings("unused")
-    private static final Log __logger = LogFactory.getLog(DaoBaseImpl.class);
+    private static final Logger __logger = LoggerFactory.getLogger(DaoBaseImpl.class);
 
     Date _createTime = new Date();
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java
index 4132b40..df63400 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java
@@ -29,8 +29,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.ProcessState;
 import org.apache.ode.bpel.dao.CorrelationSetDAO;
@@ -43,7 +43,7 @@
  * A very simple, in-memory implementation of the {@link ProcessDAO} interface.
  */
 class ProcessDaoImpl extends DaoBaseImpl implements ProcessDAO {
-    private static final Log __log = LogFactory.getLog(ProcessDaoImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessDaoImpl.class);
 
     private QName _processId;
     private QName _type;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java
index 0982bef..3783bfa 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITY.java
@@ -22,8 +22,8 @@
 import java.util.Collection;
 import java.util.Iterator;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.evt.ActivityEvent;
 import org.apache.ode.bpel.evt.EventContext;
@@ -44,7 +44,7 @@
  * Base template for activities.
  */
 abstract class ACTIVITY extends BpelJacobRunnable implements IndexedObject {
-    private static final Log __log = LogFactory.getLog(ACTIVITY.class);
+    private static final Logger __log = LoggerFactory.getLogger(ACTIVITY.class);
     protected ActivityInfo _self;
 
     /**
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITYGUARD.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITYGUARD.java
index dd2ee74..f1487f7 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITYGUARD.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ACTIVITYGUARD.java
@@ -25,8 +25,8 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.evt.ActivityEnabledEvent;
 import org.apache.ode.bpel.evt.ActivityExecEndEvent;
@@ -57,7 +57,7 @@
 class ACTIVITYGUARD extends ACTIVITY {
     private static final long serialVersionUID = 1L;
 
-    private static final Log __log = LogFactory.getLog(ACTIVITYGUARD.class);
+    private static final Logger __log = LoggerFactory.getLogger(ACTIVITYGUARD.class);
 
     private static final ActivityTemplateFactory __activityTemplateFactory = new ActivityTemplateFactory();
     private OActivity _oactivity;
@@ -221,7 +221,7 @@
                                 linfo.pub.linkStatus(val);
                             } catch (FaultException e) {
                                 linfo.pub.linkStatus(false);
-                                __log.error(e);
+                                __log.error("",e);
                                 if (fault == null)
                                     fault = createFault(e.getQName(),olink.getTransitionCondition());
                             }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
index 9ed3e4c..0f442b9 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.runtime;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.evt.PartnerLinkModificationEvent;
 import org.apache.ode.bpel.evt.ScopeEvent;
@@ -68,7 +68,7 @@
 class ASSIGN extends ACTIVITY {
     private static final long serialVersionUID = 1L;
 
-    private static final Log __log = LogFactory.getLog(ASSIGN.class);
+    private static final Logger __log = LoggerFactory.getLogger(ASSIGN.class);
 
     private static final ASSIGNMessages __msgs = MessageBundle
             .getMessages(ASSIGNMessages.class);
@@ -118,7 +118,7 @@
         }
     }
 
-    protected Log log() {
+    protected Logger log() {
         return __log;
     }
 
@@ -387,8 +387,7 @@
                 ((VariableModificationEvent)se).setNewValue(lvalue);
             } else {
                 // This really should have been caught by the compiler.
-                __log
-                        .fatal("Message/Non-Message Assignment, should be caught by compiler:"
+                __log.error("Message/Non-Message Assignment, should be caught by compiler:"
                                 + ocopy);
                 throw new FaultException(
                         ocopy.getOwner().getConstants().getQnSelectionFailure(),
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelJacobRunnable.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelJacobRunnable.java
index bf58d75..d87b9b2 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelJacobRunnable.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelJacobRunnable.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.runtime;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.obj.OBase;
@@ -41,7 +41,7 @@
  * @author Maciej Szefler
  */
 public abstract class BpelJacobRunnable extends JacobRunnable {
-    private static final Log __log = LogFactory.getLog(BpelJacobRunnable.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelJacobRunnable.class);
 
     protected BpelRuntimeContext getBpelRuntimeContext() {
         BpelRuntimeContext nativeApi = (BpelRuntimeContext) JacobVPU.activeJacobThread().getExtension(BpelRuntimeContext.class);
@@ -49,7 +49,7 @@
         return nativeApi;
     }
 
-    protected Log log() {
+    protected Logger log() {
         return __log;
     }
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java
index 3c5ba32..4a5b161 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_ALARM.java
@@ -22,8 +22,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.explang.EvaluationContext;
 import org.apache.ode.bpel.explang.EvaluationException;
@@ -50,7 +50,7 @@
  */
 class EH_ALARM extends BpelJacobRunnable {
 
-    private static final Log __log = LogFactory.getLog(EH_ALARM.class);
+    private static final Logger __log = LoggerFactory.getLogger(EH_ALARM.class);
 
     private static final long serialVersionUID = 1L;
 
@@ -87,7 +87,7 @@
             } catch (EvaluationException e) {
                 throw new InvalidProcessException(e);
             } catch (FaultException e) {
-                __log.error(e);
+                __log.error("",e);
                 _psc.completed(createFault(e.getQName(),_oalarm.getForExpr()), _comps);
                 return;
             }
@@ -97,7 +97,7 @@
             } catch (EvaluationException e) {
                 throw new InvalidProcessException(e);
             } catch (FaultException e) {
-                __log.error(e);
+                __log.error("",e);
                 _psc.completed(createFault(e.getQName(),_oalarm.getUntilExpr()), _comps);
                 return;
             }
@@ -107,7 +107,7 @@
             } catch (EvaluationException e) {
                 throw new InvalidProcessException(e);
             } catch (FaultException e) {
-                __log.error(e);
+                __log.error("",e);
                 _psc.completed(createFault(e.getQName(),_oalarm.getRepeatExpr()), _comps);
                 return;
             }
@@ -233,7 +233,7 @@
                         } catch (EvaluationException e) {
                             throw new InvalidProcessException(e);
                         } catch (FaultException e) {
-                            __log.error(e);
+                            __log.error("",e);
                             _psc.completed(createFault(e.getQName(),_oalarm.getForExpr()), _comps);
                             return;
                         }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java
index 093ab6f..430d942 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EH_EVENT.java
@@ -21,8 +21,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.common.FaultException;
@@ -49,7 +49,7 @@
 
     private static final long serialVersionUID = 1L;
 
-    private static final Log __log = LogFactory.getLog(EH_EVENT.class);
+    private static final Logger __log = LoggerFactory.getLogger(EH_EVENT.class);
 
     private EventHandlerControl _ehc;
     private Termination _tc;
@@ -136,7 +136,7 @@
                 getBpelRuntimeContext().select(pickResponseChannel, null, false, new Selector[] { selector} );
                 instance(new WAITING(pickResponseChannel));
             } catch(FaultException e){
-                __log.error(e);
+                __log.error("",e);
                 if (_fault == null) {
                     _fault = createFault(e.getQName(), _oevent);
                 }
@@ -243,7 +243,7 @@
                                             se.setLineNo(_oevent.getDebugInfo().getStartLine());
                                         getBpelRuntimeContext().sendEvent(se);
                                     } catch (Exception ex) {
-                                        __log.fatal(ex);
+                                        __log.error("",ex);
                                         throw new InvalidProcessException(ex);
                                     }
                                 }
@@ -281,7 +281,7 @@
                                         _oevent.getOperation().getName(), _oevent.getMessageExchangeId(), mexId);
 
                             } catch (FaultException e) {
-                                __log.error(e);
+                                __log.error("",e);
                                 if (_fault == null) {
                                     _fault = createFault(e.getQName(), _oevent);
                                     terminateActive();
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EMPTY.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EMPTY.java
index def3c25..84de5cb 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EMPTY.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/EMPTY.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.runtime;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -27,7 +27,7 @@
  */
 class EMPTY extends ACTIVITY {
     private static final long serialVersionUID = 1L;
-    private static final Log __log = LogFactory.getLog(EMPTY.class);
+    private static final Logger __log = LoggerFactory.getLogger(EMPTY.class);
 
   public EMPTY(ActivityInfo self, ScopeFrame frame, LinkFrame linkFrame) {
     super(self, frame, linkFrame);
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
index 51f570b..3ffa761 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
@@ -24,8 +24,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.evt.ScopeEvent;
 import org.apache.ode.bpel.evt.VariableReadEvent;
@@ -47,8 +47,7 @@
  * variables, link statuses, and the like.
  */
 public class ExprEvaluationContextImpl implements EvaluationContext {
-    private static final Log __log = LogFactory
-            .getLog(ExprEvaluationContextImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ExprEvaluationContextImpl.class);
 
     private BpelRuntimeContext _native;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/FOREACH.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/FOREACH.java
index 1d1ab61..0fe0232 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/FOREACH.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/FOREACH.java
@@ -23,8 +23,8 @@
 import java.util.Iterator;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.evar.ExternalVariableModuleException;
 import org.apache.ode.bpel.evt.VariableModificationEvent;
@@ -49,7 +49,7 @@
 public class FOREACH extends ACTIVITY {
 
     private static final long serialVersionUID = 1L;
-    private static final Log __log = LogFactory.getLog(FOREACH.class);
+    private static final Logger __log = LoggerFactory.getLogger(FOREACH.class);
 
     private OForEach _oforEach;
     private Set<ChildInfo> _children = new HashSet<ChildInfo>();
@@ -74,7 +74,7 @@
             }
             _currentCounter = _startCounter;
         } catch (FaultException fe) {
-            __log.error(fe);
+            __log.error("",fe);
             _self.parent.completed(createFault(fe.getQName(), _self.o), _compHandlers);
             return;
         }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java
index c7398e3..78f3230 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java
@@ -23,8 +23,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.evar.ExternalVariableModuleException;
 import org.apache.ode.bpel.evt.VariableModificationEvent;
@@ -46,7 +46,7 @@
  */
 public class INVOKE extends ACTIVITY {
     private static final long serialVersionUID = 992248281026821783L;
-    private static final Log __log = LogFactory.getLog(INVOKE.class);
+    private static final Logger __log = LoggerFactory.getLogger(INVOKE.class);
 
     private OInvoke _oinvoke;
     // Records number of invocations on the activity.
@@ -69,12 +69,12 @@
         try {
             outboundMsg = setupOutbound(_oinvoke, _oinvoke.getInitCorrelationsInput(), _oinvoke.getJoinCorrelationsInput());
         } catch (FaultException e) {
-            __log.error(e);
+            __log.error("",e);
             FaultData fault = createFault(e.getQName(), _oinvoke);
             _self.parent.completed(fault, CompensationHandler.emptySet());
             return;
         } catch (ExternalVariableModuleException e) {
-            __log.error(e);
+            __log.error("",e);
             _self.parent.failure(e.toString(), null);
             return;
         }
@@ -202,7 +202,7 @@
                 })));
             }
         } catch (FaultException fault) {
-            __log.error(fault);
+            __log.error("",fault);
             FaultData faultData = createFault(fault.getQName(), _oinvoke, fault.getMessage());
             _self.parent.completed(faultData, CompensationHandler.emptySet());
         }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ORDEREDCOMPENSATOR.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ORDEREDCOMPENSATOR.java
index 79cb1dc..1e1fd70 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ORDEREDCOMPENSATOR.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ORDEREDCOMPENSATOR.java
@@ -20,8 +20,8 @@
 
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.jacob.ReceiveProcess;
 import org.apache.ode.jacob.Synch;
 
@@ -32,7 +32,7 @@
 class ORDEREDCOMPENSATOR extends BpelJacobRunnable  {
     private static final long serialVersionUID = -3181661355085428370L;
 
-    private static final Log __log = LogFactory.getLog(ORDEREDCOMPENSATOR.class);
+    private static final Logger __log = LoggerFactory.getLogger(ORDEREDCOMPENSATOR.class);
 
     private List<CompensationHandler> _compensations;
     private Synch _ret;
@@ -59,7 +59,7 @@
         }
     }
 
-    protected Log log() {
+    protected Logger log() {
         return __log;
     }
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java
index 90a777a..9525b15 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java
@@ -26,8 +26,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.common.FaultException;
@@ -59,7 +59,7 @@
 class PICK extends ACTIVITY {
     private static final long serialVersionUID = 1L;
 
-    private static final Log __log = LogFactory.getLog(PICK.class);
+    private static final Logger __log = LoggerFactory.getLogger(PICK.class);
 
     private OPickReceive _opick;
 
@@ -113,7 +113,7 @@
             }
             getBpelRuntimeContext().select(pickResponseChannel, timeout, _opick.isCreateInstanceFlag(), selectors);
         } catch (FaultException e) {
-            __log.error(e);
+            __log.error("",e);
             FaultData fault = createFault(e.getQName(), _opick, e.getMessage());
             dpe(_opick.getOutgoingLinks());
             _self.parent.completed(fault, CompensationHandler.emptySet());
@@ -212,7 +212,7 @@
         // to the correct format; but you know what they say, don't trust anyone.
         if (!(onMessage.getVariable().getType() instanceof OMessageVarType)) {
             String errmsg = "Non-message variable for receive: should have been picked up by static analysis.";
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new InvalidProcessException(errmsg);
         }
 
@@ -225,12 +225,12 @@
             Part part = vartype.getParts().get(pName);
             if (part == null) {
                 String errmsg = "Inconsistent WSDL, part " + pName + " not found in message type " + vartype.getMessageType();
-                __log.fatal(errmsg);
+                __log.error(errmsg);
                 throw new InvalidProcessException(errmsg);
             }
             if (msgPart == null) {
                 String errmsg = "Message missing part: " + pName;
-                __log.fatal(errmsg);
+                __log.error(errmsg);
                 throw new InvalidContextException(errmsg);
             }
 
@@ -239,7 +239,7 @@
                 Element e  = DOMUtils.getFirstChildElement(msgPart);
                 if (e == null) {
                     String errmsg = "Message (element) part " + pName + " did not contain child element.";
-                    __log.fatal(errmsg);
+                    __log.error(errmsg);
                     throw new InvalidContextException(errmsg);
                 }
 
@@ -247,7 +247,7 @@
                 if(!qn.equals(ptype.getElementType())) {
                     String errmsg = "Message (element) part " + pName + " did not contain correct child element: expected "
                             + ptype.getElementType() + " but got " + qn;
-                    __log.fatal(errmsg);
+                    __log.error(errmsg);
                     throw new InvalidContextException(errmsg);
                 }
             }
@@ -342,7 +342,7 @@
                                 onMessage.getOperation().getName(), onMessage.getMessageExchangeId(), mexId);
 
                     } catch (FaultException e) {
-                        __log.error(e);
+                        __log.error("",e);
                         fault = createFault(e.getQName(), onMessage);
                         _self.parent.completed(fault, CompensationHandler.emptySet());
                         dpe(onMessage.getActivity());
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java
index c40b07b..a665dc8 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java
@@ -23,8 +23,8 @@
 import java.util.Date;
 import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.engine.BpelRuntimeContextImpl;
 import org.apache.ode.bpel.explang.EvaluationContext;
@@ -45,7 +45,7 @@
  * Expression language evaluation context used for evaluating property aliases.
  */
 public class PropertyAliasEvaluationContext implements EvaluationContext {
-    private static final Log __log = LogFactory.getLog(PropertyAliasEvaluationContext.class);
+    private static final Logger __log = LoggerFactory.getLogger(PropertyAliasEvaluationContext.class);
     
     private Node _root;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/REPEATUNTIL.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/REPEATUNTIL.java
index 38b9366..7e820da 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/REPEATUNTIL.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/REPEATUNTIL.java
@@ -21,8 +21,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.explang.EvaluationException;
 import org.apache.ode.bpel.obj.ORepeatUntil;
@@ -40,7 +40,7 @@
 public class REPEATUNTIL extends ACTIVITY {
     private static final long serialVersionUID = 1L;
 
-    private static final Log __log = LogFactory.getLog(WHILE.class);
+    private static final Logger __log = LoggerFactory.getLogger(WHILE.class);
 
     private Set<CompensationHandler> _compHandlers = new HashSet<CompensationHandler>();
 
@@ -63,7 +63,7 @@
         return "<T:Act:RepeatUntil:" + _self.o + ">";
     }
 
-    protected Log log() {
+    protected Logger log() {
         return __log;
     }
 
@@ -124,7 +124,7 @@
                         try {
                             condResult = checkCondition();
                         } catch (FaultException fe) {
-                            __log.error(fe);
+                            __log.error("",fe);
                             _self.parent.completed(createFault(fe.getQName(), _self.o),_compHandlers);
                             return;
                         }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/REPLY.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/REPLY.java
index abe0fc1..d23c4f8 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/REPLY.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/REPLY.java
@@ -25,14 +25,14 @@
 
 import java.util.Iterator;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 class REPLY extends ACTIVITY {
     private static final long serialVersionUID = 3040651951885161304L;
-    private static final Log __log = LogFactory.getLog(REPLY.class);
+    private static final Logger __log = LoggerFactory.getLogger(REPLY.class);
 
     REPLY(ActivityInfo self, ScopeFrame scopeFrame, LinkFrame linkFrame) {
         super(self, scopeFrame, linkFrame);
@@ -70,7 +70,7 @@
                             oreply.getMessageExchangeId(), (Element)msg,
                             (oreply.getFault() != null) ? oreply.getFault() : null);
         } catch (FaultException e) {
-            __log.error(e);
+            __log.error("",e);
             fault = createFault(e.getQName(), oreply);
         }
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/RETHROW.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/RETHROW.java
index f94c39a..075dbe2 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/RETHROW.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/RETHROW.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.runtime;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.runtime.channels.FaultData;
 
 
@@ -28,7 +28,7 @@
  */
 class RETHROW extends ACTIVITY {
   private static final long serialVersionUID = -6433171659586530126L;
-  private static final Log __log = LogFactory.getLog(RETHROW.class);
+  private static final Logger __log = LoggerFactory.getLogger(RETHROW.class);
 
   RETHROW(ActivityInfo self, ScopeFrame scopeFrame, LinkFrame linkFrame) {
     super(self, scopeFrame, linkFrame);
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SCOPE.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SCOPE.java
index 4a0a7b0..3e751ff 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SCOPE.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SCOPE.java
@@ -28,8 +28,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.evt.ScopeCompletionEvent;
 import org.apache.ode.bpel.evt.ScopeFaultEvent;
 import org.apache.ode.bpel.evt.ScopeStartEvent;
@@ -62,7 +62,7 @@
 class SCOPE extends ACTIVITY {
     private static final long serialVersionUID = 6111903798996023525L;
 
-    private static final Log __log = LogFactory.getLog(SCOPE.class);
+    private static final Logger __log = LoggerFactory.getLogger(SCOPE.class);
 
     private OScope _oscope;
     private ActivityInfo _child;
@@ -362,7 +362,7 @@
                                     se.setLineNo(_oscope.getDebugInfo().getStartLine());
                                 sendEvent(se);
                             } catch (Exception ex) {
-                                __log.fatal(ex);
+                                __log.error("",ex);
                                 throw new InvalidProcessException(ex);
                             }
                         }
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SCOPEACT.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SCOPEACT.java
index f203e83..4f5c86c 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SCOPEACT.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SCOPEACT.java
@@ -27,8 +27,8 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.obj.OLink;
 import org.apache.ode.bpel.obj.OScope;
 import org.apache.ode.bpel.obj.OScope.Variable;
@@ -47,7 +47,7 @@
  * A scope activity. The scope activity creates a new scope frame and proceeeds using the {@link SCOPE} template.
  */
 public class SCOPEACT extends ACTIVITY {
-    private static final Log __log = LogFactory.getLog(SCOPEACT.class);
+    private static final Logger __log = LoggerFactory.getLogger(SCOPEACT.class);
     
     private static final long serialVersionUID = -4593029783757994939L;
 
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SWITCH.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SWITCH.java
index 1f291c2..b3b93be 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SWITCH.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/SWITCH.java
@@ -26,8 +26,8 @@
 
 import java.util.Iterator;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -35,7 +35,7 @@
  */
 class SWITCH extends ACTIVITY {
     private static final long serialVersionUID = 1L;
-    private static final Log __log = LogFactory.getLog(SWITCH.class);
+    private static final Logger __log = LoggerFactory.getLogger(SWITCH.class);
 
   public SWITCH(ActivityInfo self, ScopeFrame scopeFrame, LinkFrame linkFrame) {
     super(self, scopeFrame, linkFrame);
@@ -87,4 +87,4 @@
       instance(createChild(child,_scopeFrame,_linkFrame));
     }
   }
-}
\ No newline at end of file
+}
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
index 0af1f6d..b7efa6d 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.bpel.runtime;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.evt.ScopeEvent;
 import org.apache.ode.bpel.iapi.BpelEngineException;
@@ -49,7 +49,7 @@
  */
 class ScopeFrame implements Serializable {
     private static final long serialVersionUID = 1L;
-    private static final Log __log = LogFactory.getLog(ScopeFrame.class);
+    private static final Logger __log = LoggerFactory.getLogger(ScopeFrame.class);
 
     /** The compiled scope representation. */
     final OScope oscope;
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/THROW.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/THROW.java
index 3917837..1d1ac78 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/THROW.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/THROW.java
@@ -21,8 +21,8 @@
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.obj.OThrow;
 import org.apache.ode.bpel.runtime.channels.FaultData;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -33,7 +33,7 @@
  */
 class THROW extends ACTIVITY {
     private static final long serialVersionUID = 1L;
-    private static final Log __log = LogFactory.getLog(ACTIVITY.class);
+    private static final Logger __log = LoggerFactory.getLogger(ACTIVITY.class);
 
     private OThrow _othrow;
 
@@ -51,7 +51,7 @@
                 fault = createFault(_othrow.getFaultName(), (Element)faultVariable,_othrow.getFaultVariable().getType(),_othrow);
             } catch (FaultException e) {
                 // deal with this as a fault (just not the one we hoped for)
-                __log.error(e);
+                __log.error("",e);
                 fault = createFault(e.getQName(), _othrow);
             }
         }else{
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/WAIT.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/WAIT.java
index 7c40939..411a307 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/WAIT.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/WAIT.java
@@ -21,8 +21,8 @@
 import java.util.Calendar;
 import java.util.Date;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.explang.EvaluationContext;
 import org.apache.ode.bpel.explang.EvaluationException;
@@ -40,7 +40,7 @@
  */
 class WAIT extends ACTIVITY {
     private static final long serialVersionUID = 1L;
-    private static final Log __log = LogFactory.getLog(WAIT.class);
+    private static final Logger __log = LoggerFactory.getLogger(WAIT.class);
 
     WAIT(ActivityInfo self, ScopeFrame scopeFrame, LinkFrame linkFrame) {
         super(self, scopeFrame, linkFrame);
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/WHILE.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/WHILE.java
index c6afa74..4f97fde 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/WHILE.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/WHILE.java
@@ -21,8 +21,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.explang.EvaluationException;
 import org.apache.ode.bpel.obj.OScope;
@@ -43,7 +43,7 @@
 class WHILE extends ACTIVITY {
     private static final long serialVersionUID = 1L;
 
-    private static final Log __log = LogFactory.getLog(WHILE.class);
+    private static final Logger __log = LoggerFactory.getLogger(WHILE.class);
 
     private Set<CompensationHandler> _compHandlers = new HashSet<CompensationHandler>();
 
@@ -58,7 +58,7 @@
         try {
             condResult = checkCondition();
         } catch (FaultException fe) {
-            __log.error(fe);
+            __log.error("",fe);
             _self.parent.completed(createFault(fe.getQName(), _self.o),_compHandlers);
             return;
         }
@@ -81,7 +81,7 @@
         return "<T:Act:While:" + _self.o + ">";
     }
 
-    protected Log log() {
+    protected Logger log() {
         return __log;
     }
 
diff --git a/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java b/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java
index 60129e5..f86510a 100644
--- a/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java
+++ b/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java
@@ -25,20 +25,20 @@
 import net.sf.saxon.Configuration;
 import net.sf.saxon.xpath.XPathFactoryImpl;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 
 import junit.framework.TestCase;
 
 public class XsdTypesTest extends TestCase {
-    private static Log __log = LogFactory.getLog(XsdTypesTest.class);
+    private static Logger __log = LoggerFactory.getLogger(XsdTypesTest.class);
 
     public void testDateTime() throws Exception {
         XPathFactoryImpl xpf = new XPathFactoryImpl();
         JaxpVariableResolver jvr = new JaxpVariableResolver(null, null, xpf.getConfiguration());
         Object o = jvr.getSimpleContent(DOMUtils.stringToDOM("<temporary-simple-type-wrapper>2010-01-25T15:38:54.82Z</temporary-simple-type-wrapper>"), QName.valueOf("{http://www.w3.org/2001/XMLSchema}dateTime"));
-        __log.debug(o);
+        __log.debug("",o);
         assertTrue(o.toString().contains("2010-01-25T15:38:54.82Z"));
     }
 
@@ -46,7 +46,7 @@
         XPathFactoryImpl xpf = new XPathFactoryImpl();
         JaxpVariableResolver jvr = new JaxpVariableResolver(null, null, xpf.getConfiguration());
         Object o = jvr.getSimpleContent(DOMUtils.stringToDOM("<temporary-simple-type-wrapper></temporary-simple-type-wrapper>"), QName.valueOf("{http://www.w3.org/2001/XMLSchema}dateTime"));
-        __log.debug(o);
+        __log.debug("",o);
         assertTrue(o.toString().equals(""));
     }
 }
diff --git a/bpel-runtime/src/test/resources/log4j2.xml b/bpel-runtime/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..9f6bc53
--- /dev/null
+++ b/bpel-runtime/src/test/resources/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+       <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index d701e23..207c9df 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.store;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.clapi.ClusterProcessStore;
 import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
@@ -38,7 +38,7 @@
 import java.util.regex.Pattern;
 
 public class ClusterProcessStoreImpl extends ProcessStoreImpl implements ClusterProcessStore {
-    private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ClusterProcessStoreImpl.class);
 
     private ClusterManager _clusterManager;
     private  ProcessStoreDeployedEvent deployedEvent;
diff --git a/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java b/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java
index 3c5e577..b8a6d16 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java
@@ -37,8 +37,8 @@
 import javax.wsdl.xml.WSDLReader;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.BpelC;
 import org.apache.ode.bpel.compiler.BpelCompiler;
 import org.apache.ode.bpel.compiler.DefaultResourceFinder;
@@ -71,7 +71,7 @@
 class DeploymentUnitDir {
 
 
-    private static Log __log = LogFactory.getLog(DeploymentUnitDir.class);
+    private static Logger __log = LoggerFactory.getLogger(DeploymentUnitDir.class);
 
     private String _name;
     private File _duDirectory;
diff --git a/bpel-store/src/main/java/org/apache/ode/store/DocumentRegistry.java b/bpel-store/src/main/java/org/apache/ode/store/DocumentRegistry.java
index 7467d6f..49066ef 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/DocumentRegistry.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/DocumentRegistry.java
@@ -22,8 +22,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.compiler.wsdl.Definition4BPEL;
 
@@ -31,7 +31,7 @@
  * A parsed collection of WSDL definitions, including BPEL-specific extensions.
  */
 public class DocumentRegistry {
-    private static final Log __log = LogFactory.getLog(DocumentRegistry.class);
+    private static final Logger __log = LoggerFactory.getLogger(DocumentRegistry.class);
 
     private final ArrayList<Definition4BPEL> _definitions = new ArrayList<Definition4BPEL>();
 
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessCleanupConfImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessCleanupConfImpl.java
index c73ced0..12eb267 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessCleanupConfImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessCleanupConfImpl.java
@@ -24,15 +24,15 @@
 import java.util.List;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dd.TCleanup;
 import org.apache.ode.bpel.dd.TDeployment;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.ProcessConf.CLEANUP_CATEGORY;
 
 public class ProcessCleanupConfImpl {
-    protected static Log __log = LogFactory.getLog(ProcessCleanupConfImpl.class);
+    protected static Logger __log = LoggerFactory.getLogger(ProcessCleanupConfImpl.class);
 
     private final Set<CLEANUP_CATEGORY> successCategories = EnumSet.noneOf(CLEANUP_CATEGORY.class);
     private final Set<CLEANUP_CATEGORY> failureCategories = EnumSet.noneOf(CLEANUP_CATEGORY.class);
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java
index a0770e9..7209b0c 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java
@@ -40,8 +40,8 @@
 import javax.wsdl.Definition;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.activityRecovery.FailureHandlingDocument.FailureHandling;
 import org.apache.ode.bpel.dd.TCleanup;
 import org.apache.ode.bpel.dd.TDeployment;
@@ -78,7 +78,7 @@
  * @author mriou <mriou at apache dot org>
  */
 public class ProcessConfImpl implements ProcessConf {
-    private static final Log __log = LogFactory.getLog(ProcessConfImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessConfImpl.class);
 
     private final Date _deployDate;
     private File _configDir;
@@ -491,7 +491,7 @@
                 if(it.hasNext()) msg.append(", ");
             }
             msg.append("}");
-            __log.debug(msg);
+            __log.debug(msg.toString());
         }
         return prop;
     }
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index 05252a1..00a7c14 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.store;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.compiler.api.CompilationException;
 import org.apache.ode.bpel.dd.DeployDocument;
 import org.apache.ode.bpel.dd.TDeployment;
@@ -65,7 +65,7 @@
  */
 public class ProcessStoreImpl implements ProcessStore {
 
-    private static final Log __log = LogFactory.getLog(ProcessStoreImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessStoreImpl.class);
 
     private static final Messages __msgs = MessageBundle.getMessages(Messages.class);
 
diff --git a/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java b/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java
index a7c7099..22c91a6 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.store.hib;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.store.ConfStoreConnection;
 import org.apache.ode.store.DeploymentUnitDAO;
 import org.apache.ode.store.ProcessConfDAO;
@@ -40,7 +40,7 @@
  */
 public class ConfStoreConnectionHib implements ConfStoreConnection {
 
-    private static final Log __log = LogFactory.getLog(ConfStoreConnectionHib.class);
+    private static final Logger __log = LoggerFactory.getLogger(ConfStoreConnectionHib.class);
     private Session _session;
 
     static final ThreadLocal<Session> _current = new ThreadLocal<Session>();
diff --git a/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java b/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java
index db4e9d0..fec2d30 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java
@@ -29,8 +29,8 @@
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.BpelEngineException;
 import org.apache.ode.daohib.HibernateTransactionManagerLookup;
 import org.apache.ode.daohib.SessionManager;
@@ -47,7 +47,7 @@
 import org.hibernate.dialect.Dialect;
 
 public class DbConfStoreConnectionFactory implements ConfStoreConnectionFactory {
-    private static final Log __log = LogFactory.getLog(DbConfStoreConnectionFactory.class);
+    private static final Logger __log = LoggerFactory.getLogger(DbConfStoreConnectionFactory.class);
 
     private static final Messages __msgs = MessageBundle.getMessages(Messages.class);
 
@@ -112,7 +112,7 @@
             Object txFact = txFactClass.newInstance();
             _txMgr = (TransactionManager) txFactClass.getMethod("getTransactionManager", (Class[]) null).invoke(txFact);
         } catch (Exception e) {
-            __log.fatal("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
+            __log.error("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
             throw new RuntimeException("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
         }
     }
diff --git a/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java b/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java
index 72a9df9..1fd54ec 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/jpa/ConfStoreConnectionJpa.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.store.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.store.ConfStoreConnection;
 import org.apache.ode.store.DeploymentUnitDAO;
 
@@ -34,7 +34,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class ConfStoreConnectionJpa implements ConfStoreConnection {
-    private static Log LOG = LogFactory.getLog(ConfStoreConnectionJpa.class);
+    private static Logger LOG = LoggerFactory.getLogger(ConfStoreConnectionJpa.class);
 
     private EntityManager _em;
     static final ThreadLocal<EntityManager> _current = new ThreadLocal<EntityManager>();
diff --git a/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java b/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java
index 407e18a..91ef7bf 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/jpa/DbConfStoreConnectionFactory.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.store.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.dao.jpa.JpaTxMgrProvider;
 import org.apache.ode.store.ConfStoreConnection;
 import org.apache.ode.store.ConfStoreConnectionFactory;
@@ -37,7 +37,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class DbConfStoreConnectionFactory implements ConfStoreConnectionFactory {
-    private static final Log __log = LogFactory.getLog(DbConfStoreConnectionFactory.class);
+    private static final Logger __log = LoggerFactory.getLogger(DbConfStoreConnectionFactory.class);
 
     private DataSource _ds;
     private EntityManagerFactory _emf;
@@ -116,8 +116,8 @@
             Object txFact = txFactClass.newInstance();
             _txMgr = (TransactionManager) txFactClass.getMethod("getTransactionManager", (Class[]) null).invoke(txFact);
         } catch (Exception e) {
-            __log.fatal("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
+            __log.error("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
             throw new RuntimeException("Couldn't initialize a transaction manager with factory: " + txFactoryClassName, e);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/bpel-store/src/test/resources/log4j2.xml b/bpel-store/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..9f6bc53
--- /dev/null
+++ b/bpel-store/src/test/resources/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+       <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
diff --git a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
index 00bdf7d..062b95f 100644
--- a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
+++ b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.test;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.evt.DebugBpelEventListener;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.engine.BpelServerImpl;
@@ -61,7 +61,7 @@
 import java.util.regex.Pattern;
 
 public abstract class BPELTestAbstract {
-    private static final Log log = LogFactory.getLog(BPELTestAbstract.class);
+    private static final Logger log = LoggerFactory.getLogger(BPELTestAbstract.class);
     public static final long WAIT_BEFORE_INVOKE_TIMEOUT = 2000;
 
     private static final String SHOW_EVENTS_ON_CONSOLE = "no";
diff --git a/bpel-test/src/test/resources/log4j2.xml b/bpel-test/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..9f6bc53
--- /dev/null
+++ b/bpel-test/src/test/resources/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+       <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 4c5cad5..d969666 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -38,8 +38,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.apache.ode.bpel.clapi.*;
 
@@ -47,7 +47,7 @@
  * This class implements necessary methods to build the cluster using hazelcast
  */
 public class HazelcastClusterImpl implements ClusterManager, ProcessStoreClusterListener {
-    private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(HazelcastClusterImpl.class);
 
     private HazelcastInstance _hazelcastInstance;
     private boolean isMaster = false;
@@ -88,7 +88,7 @@
                     Config config = loadConfig(hzXml);
                     _hazelcastInstance = Hazelcast.newHazelcastInstance(config);
                 } catch (FileNotFoundException fnf) {
-                    __log.error(fnf);
+                    __log.error("",fnf);
                 }
         }
 
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
index b753305..2d22e8a 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -21,13 +21,13 @@
 import com.hazelcast.core.IMap;
 import org.apache.ode.bpel.clapi.ClusterLock;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.concurrent.TimeUnit;
 
 public class HazelcastDeploymentLock implements ClusterLock<String>{
-    private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
+    private static final Logger __log = LoggerFactory.getLogger(HazelcastDeploymentLock.class);
 
     private IMap<String, String> _lock_map;
 
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
index 8ac11f8..06a686f 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -23,11 +23,11 @@
 
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class HazelcastInstanceLock implements ClusterLock<Long> {
-    private static final Log __log = LogFactory.getLog(HazelcastInstanceLock.class);
+    private static final Logger __log = LoggerFactory.getLogger(HazelcastInstanceLock.class);
 
     private IMap<Long, Long> _lock_map;
 
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/NativeHiLoGenerator.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/NativeHiLoGenerator.java
index 1a0cd70..2d9661a 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/NativeHiLoGenerator.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/NativeHiLoGenerator.java
@@ -33,11 +33,11 @@
 import org.hibernate.id.TableHiLoGenerator;
 import org.hibernate.type.Type;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class NativeHiLoGenerator implements IdentifierGenerator, PersistentIdentifierGenerator, Configurable {
-    private static final Log __log = LogFactory.getLog(NativeHiLoGenerator.class);
+    private static final Logger __log = LoggerFactory.getLogger(NativeHiLoGenerator.class);
     private IdentifierGenerator _proxy;
 
     public NativeHiLoGenerator() {
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java
index c883939..346fc34 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/SessionManager.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.daohib;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.daohib.bpel.hobj.*;
 import org.apache.ode.utils.uuid.UUID;
 import org.hibernate.HibernateException;
@@ -44,7 +44,7 @@
  * managing sessions.
  */
 public class SessionManager {
-    private static final Log __log = LogFactory.getLog(SessionManager.class);
+    private static final Logger __log = LoggerFactory.getLogger(SessionManager.class);
 
     public static final String PROP_GUID = "ode.hibernate.guid";
 
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionFactoryImpl.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionFactoryImpl.java
index 2b24c4f..ed8018b 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionFactoryImpl.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionFactoryImpl.java
@@ -27,8 +27,8 @@
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactoryJDBC;
 import org.apache.ode.daohib.DataSourceConnectionProvider;
@@ -44,7 +44,7 @@
  * implementation.
  */
 public class BpelDAOConnectionFactoryImpl implements BpelDAOConnectionFactoryJDBC {
-    private static final Log __log = LogFactory.getLog(BpelDAOConnectionFactoryImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelDAOConnectionFactoryImpl.class);
 
     protected SessionManager _sessionManager;
 
@@ -73,13 +73,13 @@
     public void init(Properties initialProps) {
         if (_ds == null) {
             String errmsg = "setDataSource() not called!";
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new IllegalStateException(errmsg);
         }
 
         if (_tm == null) {
             String errmsg = "setTransactionManager() not called!";
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new IllegalStateException(errmsg);
         }
 
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
index 2342cae..589884a 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
@@ -34,8 +34,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.BpelEventFilter;
 import org.apache.ode.bpel.common.InstanceFilter;
 import org.apache.ode.bpel.common.ProcessState;
@@ -77,7 +77,7 @@
  * Hibernate-based {@link BpelDAOConnection} implementation.
  */
 public class BpelDAOConnectionImpl implements BpelDAOConnection, FilteredInstanceDeletable {
-    private static final Log __log = LogFactory.getLog(BpelDAOConnectionImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelDAOConnectionImpl.class);
 
     public SessionManager _sm;
 
@@ -238,7 +238,7 @@
             hevent.setData(bos.toByteArray());
         } catch (Throwable ex) {
             // this is really unexpected.
-            __log.fatal("InternalError: BpelEvent serialization failed.", ex);
+            __log.error("InternalError: BpelEvent serialization failed.", ex);
         }
         sess.save(hevent);
     }
@@ -275,7 +275,7 @@
 
             });
         } catch (Exception ex) {
-            __log.fatal("Internal error: unable to transform HBpelEvent", ex);
+            __log.error("Internal error: unable to transform HBpelEvent", ex);
             throw new RuntimeException(ex);
         }
         return ret;
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
index b9bfc4d..c4cbd6c 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CorrelatorDaoImpl.java
@@ -20,8 +20,8 @@
 
 import java.util.*;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.dao.*;
@@ -45,7 +45,7 @@
  * Hibernate-based {@link CorrelatorDAO} implementation.
  */
 class CorrelatorDaoImpl extends HibernateDao implements CorrelatorDAO {
-    static Log __log = LogFactory.getLog(CorrelatorDaoImpl.class);
+    static Logger __log = LoggerFactory.getLogger(CorrelatorDaoImpl.class);
 
     /** filter for finding a matching selector. */
     private static final String LOCK_SELECTORS = "update from HCorrelatorSelector as hs set hs.lock = hs.lock+1 where hs.processType = :processType";
@@ -282,4 +282,4 @@
         return routes;
     }
 
-}
\ No newline at end of file
+}
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java
index c3c3d63..2f349b8 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java
@@ -27,8 +27,8 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.BpelEventFilter;
 import org.apache.ode.bpel.common.Filter;
 import org.apache.ode.bpel.common.InstanceFilter;
@@ -46,7 +46,7 @@
  * {@link org.hibernate.Criteria} objects.
  */
 class CriteriaBuilder {
-    static final Log __log = LogFactory.getLog(CriteriaBuilder.class);
+    static final Logger __log = LoggerFactory.getLogger(CriteriaBuilder.class);
 
     /**
      * Build a HQL query from an instance filter.
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java
index 5cb96de..a163fe3 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java
@@ -20,8 +20,8 @@
 
 import org.apache.ode.daohib.SessionManager;
 import org.apache.ode.daohib.bpel.hobj.HObject;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.hibernate.Query;
 import org.hibernate.Session;
 
@@ -39,7 +39,7 @@
 
     // logger used by subclasses to track entered methods that may trigger sql query
     // we don't use the package name to avoid interferences with other logging info.
-    static final Log logDao = LogFactory.getLog("org.apache.ode.bpel.DAO");
+    static final Logger logDao = LoggerFactory.getLogger("org.apache.ode.bpel.DAO");
 
     protected final SessionManager _sm;
     protected final HObject _hobj;
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageExchangeDaoImpl.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageExchangeDaoImpl.java
index ba79c01..50512bf 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageExchangeDaoImpl.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageExchangeDaoImpl.java
@@ -27,8 +27,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.MessageDAO;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.PartnerLinkDAO;
@@ -51,7 +51,7 @@
 public class MessageExchangeDaoImpl extends HibernateDao implements
         MessageExchangeDAO {
     @SuppressWarnings("unused")
-    private static final Log __log = LogFactory.getLog(MessageExchangeDaoImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(MessageExchangeDaoImpl.class);
 
     private HMessageExchange _hself;
 
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java
index 116fa5c..c5fb876 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java
@@ -27,8 +27,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.ProcessState;
 import org.apache.ode.bpel.dao.CorrelatorDAO;
@@ -66,7 +66,7 @@
  * Hibernate-based {@link ProcessDAO} implementation.
  */
 public class ProcessDaoImpl extends HibernateDao implements ProcessDAO, DeferredProcessInstanceCleanable {
-    private static final Log __log = LogFactory.getLog(ProcessDaoImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessDaoImpl.class);
 
     private static final String QRY_CORRELATOR = "where this.correlatorId = ?";
 
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java
index 0a0292d..8d7e691 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java
@@ -28,8 +28,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.ProcessState;
 import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
@@ -75,7 +75,7 @@
  * Hibernate-based {@link ProcessInstanceDAO} implementation.
  */
 public class ProcessInstanceDaoImpl extends HibernateDao implements ProcessInstanceDAO {
-  private static final Log __log = LogFactory.getLog(ProcessInstanceDaoImpl.class);
+  private static final Logger __log = LoggerFactory.getLogger(ProcessInstanceDaoImpl.class);
 
   /** Query for removing selectors. */
   private static final String QRY_DELSELECTORS = "delete from "  +
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/GZipDataType.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/GZipDataType.java
index f06a1e3..c272eaa 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/GZipDataType.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/GZipDataType.java
@@ -32,8 +32,8 @@
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.hibernate.usertype.UserType;
 
@@ -42,7 +42,7 @@
  * to increase performance and save disk space.
  */
 public class GZipDataType implements UserType {
-    private static final Log log = LogFactory.getLog(GZipDataType.class);
+    private static final Logger log = LoggerFactory.getLogger(GZipDataType.class);
 
     public static final int[] SQL_TYPES = new int[] { Types.BLOB };
 
diff --git a/dao-hibernate/src/test/resources/log4j2.xml b/dao-hibernate/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..9f6bc53
--- /dev/null
+++ b/dao-hibernate/src/test/resources/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+       <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java
index 89ace41..793a482 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionFactoryImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.dao.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactoryJDBC;
 import org.apache.openjpa.ee.ManagedRuntime;
@@ -43,7 +43,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class BPELDAOConnectionFactoryImpl implements BpelDAOConnectionFactoryJDBC {
-    static final Log __log = LogFactory.getLog(BPELDAOConnectionFactoryImpl.class);
+    static final Logger __log = LoggerFactory.getLogger(BPELDAOConnectionFactoryImpl.class);
 
     protected EntityManagerFactory _emf;
     private TransactionManager _tm;
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
index 17e7903..ace6bc7 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
@@ -34,8 +34,8 @@
 import javax.persistence.Query;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.BpelEventFilter;
 import org.apache.ode.bpel.common.Filter;
 import org.apache.ode.bpel.common.InstanceFilter;
@@ -57,7 +57,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class BPELDAOConnectionImpl implements BpelDAOConnection {
-    static final Log __log = LogFactory.getLog(BPELDAOConnectionImpl.class);
+    static final Logger __log = LoggerFactory.getLogger(BPELDAOConnectionImpl.class);
 
     protected EntityManager _em;
 
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
index 78c0ab3..84681b7 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.dao.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.dao.*;
 
@@ -34,7 +34,7 @@
 @Table(name = "ODE_CORRELATOR")
 @NamedQueries( { @NamedQuery(name = CorrelatorDAOImpl.DELETE_CORRELATORS_BY_PROCESS, query = "delete from CorrelatorDAOImpl as c where c._process = :process") })
 public class CorrelatorDAOImpl extends OpenJPADAO implements CorrelatorDAO {
-    private static Log __log = LogFactory.getLog(CorrelatorDAOImpl.class);
+    private static Logger __log = LoggerFactory.getLogger(CorrelatorDAOImpl.class);
     public final static String DELETE_CORRELATORS_BY_PROCESS = "DELETE_CORRELATORS_BY_PROCESS";
     private final static String ROUTE_BY_CKEY_HEADER = "select route from MessageRouteDAOImpl as route where route._correlator._process._processType = :ptype and route._correlator._correlatorKey = :corrkey";
 
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
index 1278b1d..d214cf8 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.dao.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.dao.MessageDAO;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.utils.DOMUtils;
@@ -46,7 +46,7 @@
 @Table(name = "ODE_MESSAGE")
 @NamedQueries( { @NamedQuery(name = MessageDAOImpl.DELETE_MESSAGES_BY_PROCESS, query = "delete from MessageDAOImpl as m where m._messageExchange._process = :process") })
 public class MessageDAOImpl implements MessageDAO {
-    private static Log __log = LogFactory.getLog(MessageDAOImpl.class);
+    private static Logger __log = LoggerFactory.getLogger(MessageDAOImpl.class);
     public final static String DELETE_MESSAGES_BY_PROCESS = "DELETE_MESSAGES_BY_PROCESS";
 
     @Id
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
index 193f571..95dbefa 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.dao.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKeySet;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.dao.*;
@@ -56,7 +56,7 @@
     @NamedQuery(name=MessageExchangeDAOImpl.SELECT_MEX_IDS_BY_PROCESS, query="select m._id from MessageExchangeDAOImpl as m where m._process = :process")
 })
 public class MessageExchangeDAOImpl extends OpenJPADAO implements MessageExchangeDAO, CorrelatorMessageDAO {
-    private static final Log __log = LogFactory.getLog(MessageExchangeDAOImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(MessageExchangeDAOImpl.class);
 
     public final static String DELETE_MEXS_BY_PROCESS = "DELETE_MEXS_BY_PROCESS";
     public final static String SELECT_MEX_IDS_BY_PROCESS = "SELECT_MEX_IDS_BY_PROCESS";
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java
index 16580fc..78a12d6 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/OpenJPADAO.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.dao.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.openjpa.persistence.OpenJPAPersistence;
 import org.apache.openjpa.persistence.OpenJPAQuery;
 
@@ -34,7 +34,7 @@
  * @author Matthieu Riou <mriou at apache dot org>
  */
 public class OpenJPADAO {
-    private static final Log __log = LogFactory.getLog(OpenJPADAO.class);
+    private static final Logger __log = LoggerFactory.getLogger(OpenJPADAO.class);
 
     protected BPELDAOConnectionImpl getConn() {
         return BPELDAOConnectionFactoryImpl._connections.get();
@@ -75,4 +75,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
index 605e462..aed6af1 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.dao.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.CorrelationKey;
 import org.apache.ode.bpel.common.ProcessState;
 import org.apache.ode.bpel.dao.CorrelatorDAO;
@@ -47,7 +47,7 @@
     @NamedQuery(name="CorrelatorByKey", query="select c from CorrelatorDAOImpl as c where c._correlatorKey = :ckey and c._process = :process")
 })
 public class ProcessDAOImpl extends OpenJPADAO implements ProcessDAO {
-    private static final Log __log = LogFactory.getLog(ProcessDAOImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessDAOImpl.class);
 
     @Id @Column(name="ID")
     @GeneratedValue(strategy= GenerationType.AUTO)
@@ -226,4 +226,4 @@
         qry.setParameter("state", ProcessState.STATE_ACTIVE);
         return qry.getResultList();
     }
-}
\ No newline at end of file
+}
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
index 7d6bdcb..0ab3d67 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.dao.jpa;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.ProcessState;
 import org.apache.ode.bpel.dao.ActivityRecoveryDAO;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
@@ -75,7 +75,7 @@
             query="select i._process._processId, count(i._instanceId) from ProcessInstanceDAOImpl as i where i._process._processId in (:processIds) and i._state in(:states) group by i._process._processId")
 })
 public class ProcessInstanceDAOImpl extends OpenJPADAO implements ProcessInstanceDAO {
-    private static final Log __log = LogFactory.getLog(ProcessInstanceDAOImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessInstanceDAOImpl.class);
 
     public final static String DELETE_INSTANCES_BY_PROCESS = "DELETE_INSTANCES_BY_PROCESS";
     public final static String SELECT_INSTANCE_IDS_BY_PROCESS = "SELECT_INSTANCE_IDS_BY_PROCESS";
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
index 5b287a7..08d2ed4 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessManagementDAOImpl.java
@@ -29,8 +29,8 @@
 import javax.persistence.Query;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.common.InstanceFilter;
 import org.apache.ode.bpel.common.InstanceFilter.StatusKeys;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
@@ -38,7 +38,7 @@
 import org.apache.ode.bpel.dao.ProcessManagementDAO;
 
 public class ProcessManagementDAOImpl implements ProcessManagementDAO {
-    private static final Log __log = LogFactory.getLog(ProcessManagementDAOImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(ProcessManagementDAOImpl.class);
 
     private EntityManager em;
 
diff --git a/dependencies.rb b/dependencies.rb
index f469c02..69912fb 100644
--- a/dependencies.rb
+++ b/dependencies.rb
@@ -110,6 +110,7 @@
                           :under=>"org.apache.felix", :version=>"0.6.1")
                       ]
 LOG4J               = "log4j:log4j:jar:1.2.17"
+LOG4J2              = group("log4j-api", "log4j-core", "log4j-slf4j-impl", "log4j-web", :under=>"org.apache.logging.log4j", :version=>"2.3")
 OBJECT_DIFF         = "de.danielbechler:java-object-diff:jar:0.13.1"
 OPENJPA             = ["org.apache.openjpa:openjpa:jar:1.2.3",
                        "net.sourceforge.serp:serp:jar:1.13.1"]
@@ -142,7 +143,7 @@
                         "commons-beanutils:commons-beanutils:jar:1.7.0",
                         "tranql:tranql-connector-derby-common:jar:1.1"
                         ]
-SLF4J = group(%w{ slf4j-api slf4j-log4j12 jcl-over-slf4j }, :under=>"org.slf4j", :version=>"1.7.2")
+SLF4J               = group(%w{ slf4j-api jcl-over-slf4j}, :under=>"org.slf4j", :version=>"1.7.12")
 SPRING              = ["org.springframework:spring:jar:2.5.6"]
 SPRING_OSGI         = ["org.springframework.osgi:spring-osgi-core:jar:1.2.0"]
 SPRING_TEST         = ["org.springframework:spring-test:jar:2.5.6"]
diff --git a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeListCommand.java b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeListCommand.java
index 6fcd7cf..d7a7e25 100644
--- a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeListCommand.java
+++ b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeListCommand.java
@@ -22,8 +22,8 @@
 import java.util.*;
 import java.util.concurrent.TimeoutException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.felix.gogo.commands.*;
 import org.apache.ode.bpel.pmapi.*;
 import org.apache.ode.bpel.pmapi.TScopeInfo.Activities;
@@ -36,7 +36,7 @@
 @Command(scope = "ode", name = "list", description = "Lists ode processes and active instances")
 public class OdeListCommand extends OdeCommandsBase {
 
-    private static final Log __log = LogFactory.getLog(OdeListCommand.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeListCommand.class);
 
     @Option(name = "-a", aliases = "--all", description = "Show all (even completed) instances")
     private boolean showAll;
diff --git a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeRecoverActivityCommand.java b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeRecoverActivityCommand.java
index 41002b8..b092463 100644
--- a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeRecoverActivityCommand.java
+++ b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeRecoverActivityCommand.java
@@ -19,13 +19,13 @@
 
 package org.apache.ode.karaf.commands;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.felix.gogo.commands.*;
 
 @Command(scope = "ode", name = "recoverActivity", description = "Recover a failed BPEL activity in ODE")
 public class OdeRecoverActivityCommand extends OdeCommandsBase {
-    private static final Log __log = LogFactory.getLog(OdeRecoverActivityCommand.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeRecoverActivityCommand.class);
     
     private static final String RETRY = "retry";
     private static final String FAULT = "fault";
diff --git a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeResumeCommand.java b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeResumeCommand.java
index b87c2f4..cb47265 100644
--- a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeResumeCommand.java
+++ b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeResumeCommand.java
@@ -22,15 +22,15 @@
 import java.util.List;
 import java.util.concurrent.TimeoutException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.felix.gogo.commands.*;
 import org.apache.ode.bpel.pmapi.TInstanceInfo;
 
 @Command(scope = "ode", name = "resume", description = "Resume suspended ODE process instances")
 public class OdeResumeCommand extends OdeCommandsBase {
 
-    private static final Log __log = LogFactory.getLog(OdeResumeCommand.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeResumeCommand.class);
 
     @Argument(name = "iids", description = "Instance IDs to resume", multiValued = true)
     private static Long[] iids;
diff --git a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeSuspendCommand.java b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeSuspendCommand.java
index 584014e..ec7cd20 100644
--- a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeSuspendCommand.java
+++ b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeSuspendCommand.java
@@ -22,15 +22,15 @@
 import java.util.List;
 import java.util.concurrent.TimeoutException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.felix.gogo.commands.*;
 import org.apache.ode.bpel.pmapi.TInstanceInfo;
 
 @Command(scope = "ode", name = "suspend", description = "Suspend active ODE process instances")
 public class OdeSuspendCommand extends OdeCommandsBase {
 
-    private static final Log __log = LogFactory.getLog(OdeSuspendCommand.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeSuspendCommand.class);
 
     @Argument(name = "iids", description = "Instance IDs to suspend", multiValued = true)
     private static Long[] iids;
diff --git a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeTerminateCommand.java b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeTerminateCommand.java
index 01d6a0b..52699ce 100644
--- a/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeTerminateCommand.java
+++ b/jbi-karaf-commands/src/main/java/org/apache/ode/karaf/commands/OdeTerminateCommand.java
@@ -22,15 +22,15 @@
 import java.util.List;
 import java.util.concurrent.TimeoutException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.felix.gogo.commands.*;
 import org.apache.ode.bpel.pmapi.TInstanceInfo;
 
 @Command(scope = "ode", name = "terminate", description = "Terminate active ODE process instances")
 public class OdeTerminateCommand extends OdeCommandsBase {
 
-    private static final Log __log = LogFactory.getLog(OdeTerminateCommand.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeTerminateCommand.class);
 
     @Argument(name = "iids", description = "Instance IDs to terminate", multiValued = true)
     private static Long[] iids;
diff --git a/jbi/src/main/java/org/apache/ode/jbi/BaseMessageExchangeProcessor.java b/jbi/src/main/java/org/apache/ode/jbi/BaseMessageExchangeProcessor.java
index b8a6a97..a83f937 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/BaseMessageExchangeProcessor.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/BaseMessageExchangeProcessor.java
@@ -26,15 +26,15 @@
 import javax.jbi.messaging.MessagingException;
 import javax.jbi.messaging.NormalizedMessage;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Base message exchange processor; handles common JBI message exchange conditions and delegates
  * actual invocation to subclass.
  */
 public abstract class BaseMessageExchangeProcessor implements JbiMessageExchangeProcessor {
-    final Log LOG = LogFactory.getLog(getClass());
+    final Logger LOG = LoggerFactory.getLogger(getClass());
 
     DeliveryChannel _channel;
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java b/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java
index 1b06383..3a49170 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java
@@ -24,8 +24,8 @@
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.BindingContext;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.Endpoint;
@@ -40,7 +40,7 @@
  *
  */
 class BindingContextImpl implements BindingContext {
-    private static final Log __log = LogFactory.getLog(BindingContextImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(BindingContextImpl.class);
 
     private final OdeContext _ode;
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/EndpointReferenceContextImpl.java b/jbi/src/main/java/org/apache/ode/jbi/EndpointReferenceContextImpl.java
index 6762dba..8c3e055 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/EndpointReferenceContextImpl.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/EndpointReferenceContextImpl.java
@@ -22,8 +22,8 @@
 import javax.jbi.servicedesc.ServiceEndpoint;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.EndpointReference;
 import org.apache.ode.bpel.iapi.EndpointReferenceContext;
 import org.apache.ode.bpel.epr.MutableEndpoint;
@@ -49,7 +49,7 @@
  *
  */
 public class EndpointReferenceContextImpl implements EndpointReferenceContext {
-  private static final Log __log = LogFactory.getLog(EndpointReferenceContextImpl.class);
+  private static final Logger __log = LoggerFactory.getLogger(EndpointReferenceContextImpl.class);
 
   private final OdeContext _ode;
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/JbiMessageExchangeEventRouter.java b/jbi/src/main/java/org/apache/ode/jbi/JbiMessageExchangeEventRouter.java
index fdba2a7..2510a95 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/JbiMessageExchangeEventRouter.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/JbiMessageExchangeEventRouter.java
@@ -23,15 +23,15 @@
 import javax.jbi.messaging.MessagingException;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.Endpoint;
 
 /**
  * Route incoming JBI messages to Ode services
  */
 class JbiMessageExchangeEventRouter implements JbiMessageExchangeProcessor {
-    private static final Log __log = LogFactory.getLog(JbiMessageExchangeEventRouter.class);
+    private static final Logger __log = LoggerFactory.getLogger(JbiMessageExchangeEventRouter.class);
 
     private OdeContext _ode;
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/MessageExchangeContextImpl.java b/jbi/src/main/java/org/apache/ode/jbi/MessageExchangeContextImpl.java
index 122a4c6..3b1102c 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/MessageExchangeContextImpl.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/MessageExchangeContextImpl.java
@@ -20,8 +20,8 @@
 package org.apache.ode.jbi;
 
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.apache.ode.bpel.iapi.BpelEngineException;
 import org.apache.ode.bpel.iapi.ContextException;
@@ -37,8 +37,7 @@
  */
 public class MessageExchangeContextImpl implements MessageExchangeContext {
 
-  private static final Log __log = LogFactory
-      .getLog(MessageExchangeContextImpl.class);
+  private static final Logger __log = LoggerFactory.getLogger(MessageExchangeContextImpl.class);
 
   private OdeContext _ode;
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java b/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java
index 64b9a6d..85d33fa 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java
@@ -34,15 +34,15 @@
 import javax.jbi.messaging.*;
 import javax.jbi.servicedesc.ServiceEndpoint;
 import javax.xml.namespace.QName;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Bridge between ODE (consumers) and JBI (providers). An single object of this type handles all communications initiated by ODE
  * that is destined for other JBI providers.
  */
 abstract class OdeConsumer extends ServiceBridge implements JbiMessageExchangeProcessor {
-    private static final Log __log = LogFactory.getLog(OdeConsumer.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeConsumer.class);
     private static final long DEFAULT_RESPONSE_TIMEOUT = Long.getLong("org.apache.ode.jbi.timeout", 2 * 60 * 1000L);
 
     protected OdeContext _ode;
@@ -232,7 +232,7 @@
                                                 .getName()), faultResponse);
                                     } else {
                                         // Can this even happen?
-                                        __log.fatal("Internal Error: fault found without a message type: " + wsdlFlt);
+                                        __log.error("Internal Error: fault found without a message type: " + wsdlFlt);
                                         pmex.replyWithFailure(FailureType.FORMAT_ERROR, "Fault has no message: "
                                                 + wsdlFlt.getName(), null);
                                     }
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeConsumerAsync.java b/jbi/src/main/java/org/apache/ode/jbi/OdeConsumerAsync.java
index 029ded7..704cbe1 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeConsumerAsync.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeConsumerAsync.java
@@ -31,8 +31,8 @@
 import javax.jbi.messaging.InOut;
 import javax.jbi.messaging.MessagingException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
 import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
 
@@ -40,7 +40,7 @@
  * Asynchronous JBI service consumer
  */
 class OdeConsumerAsync extends OdeConsumer {
-    private static final Log __log = LogFactory.getLog(OdeConsumerAsync.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeConsumerAsync.class);
 
     /**
      * We create an executor to handle all the asynchronous invocations/timeouts. Note, we don't need a lot of threads
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeConsumerSync.java b/jbi/src/main/java/org/apache/ode/jbi/OdeConsumerSync.java
index 97815cc..0ea3710 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeConsumerSync.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeConsumerSync.java
@@ -23,8 +23,8 @@
 import javax.jbi.messaging.InOut;
 import javax.jbi.messaging.MessagingException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
 
 /**
@@ -34,7 +34,7 @@
  *
  */
 class OdeConsumerSync extends OdeConsumer {
-    private static final Log __log = LogFactory.getLog(OdeConsumerSync.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeConsumerSync.class);
 
 
     OdeConsumerSync(OdeContext ode) {
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java b/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java
index c8fed8d..ffa3636 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java
@@ -37,8 +37,8 @@
 import javax.wsdl.factory.WSDLFactory;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.agents.memory.SizingAgent;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.engine.BpelServerImpl;
@@ -63,7 +63,7 @@
  * @author mszefler
  */
 final public class OdeContext {
-    private static final Log __log = LogFactory.getLog(OdeContext.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeContext.class);
 
     public static final QName PM_SERVICE_NAME = new QName("http://www.apache.org/ode/pmapi", "ProcessManagementService");
     public static final String PM_PORT_NAME = "ProcessManagementPort";
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
index c885d13..950d47e 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.jbi;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 import org.apache.ode.bpel.connector.BpelServerConnector;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactoryJDBC;
@@ -56,7 +56,7 @@
 public class OdeLifeCycle implements ComponentLifeCycle {
     private static final Messages __msgs = Messages.getMessages(Messages.class);
 
-    private static final Log __log = LogFactory.getLog(OdeLifeCycle.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeLifeCycle.class);
 
     private OdeSUManager _suManager = null;
 
@@ -147,7 +147,7 @@
             _initSuccess = true;
             __log.info(__msgs.msgOdeInitialized());
         } catch (Throwable t) {
-            __log.fatal("", t);
+            __log.error("", t);
             throw new JBIException("Fatal error", t);
         }
     }
@@ -378,7 +378,7 @@
             if (!_initSuccess) {
                 String errmsg = "attempt to call start() after init() failure.";
                 IllegalStateException ex = new IllegalStateException(errmsg);
-                __log.fatal(errmsg, ex);
+                __log.error(errmsg, ex);
                 throw new JBIException(errmsg, ex);
             }
 
@@ -422,7 +422,7 @@
                 try {
                     _receiver.cease();
                 } catch (Exception ex) {
-                    __log.fatal("Error ceasing receiver.", ex);
+                    __log.error("Error ceasing receiver.", ex);
                 } finally {
                     _receiver = null;
                 }
@@ -432,7 +432,7 @@
                 _ode._server.stop();
 
             } catch (Throwable ex) {
-                __log.fatal("Error stopping services.", ex);
+                __log.error("Error stopping services.", ex);
             }
 
             __log.info("ODE stopped.");
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java b/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java
index 8ff9a3f..7e6dfef 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java
@@ -27,8 +27,8 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -36,7 +36,7 @@
 import org.apache.ode.utils.XMLParserUtils;
 
 public class OdeSUManager implements ServiceUnitManager {
-  private static final Log __log = LogFactory.getLog(OdeSUManager.class);
+  private static final Logger __log = LoggerFactory.getLogger(OdeSUManager.class);
 
   private static final Messages __msgs = Messages.getMessages(Messages.class);
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeService.java b/jbi/src/main/java/org/apache/ode/jbi/OdeService.java
index 6f2be7e..699b752 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeService.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeService.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.jbi;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.Endpoint;
 import org.apache.ode.bpel.iapi.Message;
 import org.apache.ode.bpel.iapi.MessageExchange;
@@ -47,7 +47,7 @@
  */
 public class OdeService extends ServiceBridge implements JbiMessageExchangeProcessor {
 
-    private static final Log __log = LogFactory.getLog(OdeService.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeService.class);
 
     /** utility for tracking outstanding JBI message exchanges. */
     private final JbiMexTracker _jbiMexTracker = new JbiMexTracker();
@@ -118,7 +118,7 @@
     public void onJbiMessageExchange(javax.jbi.messaging.MessageExchange jbiMex) throws MessagingException {
         if (jbiMex.getRole() != javax.jbi.messaging.MessageExchange.Role.PROVIDER) {
             String errmsg = "Message exchange is not in PROVIDER role as expected: " + jbiMex.getExchangeId();
-            __log.fatal(errmsg);
+            __log.error(errmsg);
             throw new IllegalArgumentException(errmsg);
         }
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java b/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java
index a497c17..829ca1d 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java
@@ -31,15 +31,15 @@
 import javax.jbi.management.DeploymentException;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Representation of a JBI service unit. A JBI service unit may actually consist
  * of multiple processes.
  */
 class OdeServiceUnit {
-    private static final Log __log = LogFactory.getLog(OdeServiceUnit.class);
+    private static final Logger __log = LoggerFactory.getLogger(OdeServiceUnit.class);
 
     private static final Messages __msgs = Messages.getMessages(Messages.class);
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/Receiver.java b/jbi/src/main/java/org/apache/ode/jbi/Receiver.java
index d3f93f8..066349d 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/Receiver.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/Receiver.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.jbi;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jbi.messaging.DeliveryChannel;
 import javax.jbi.messaging.MessageExchange;
@@ -34,7 +34,7 @@
  * Receiver pulls messages from the NMS and submits them to ODE for further processing.
  */
 public class Receiver implements Runnable {
-    private static final Log __log = LogFactory.getLog(Receiver.class);
+    private static final Logger __log = LoggerFactory.getLogger(Receiver.class);
 
     // default time to wait for MessageExchanges, in seconds
     private static final long ACCEPT_TIMEOUT = 1L;
@@ -111,7 +111,7 @@
 
                 // If it's not dead yet, we got a problem we can't deal with.
                 if (_thread.isAlive()) {
-                    __log.fatal("Receiver thread is not dying gracefully despite our insistence!.");
+                    __log.error("Receiver thread is not dying gracefully despite our insistence!.");
                 }
 
                 // In any case, next step is to shutdown the thread pool
@@ -150,11 +150,11 @@
         try {
             _channel = _odeContext.getContext().getDeliveryChannel();
             if (_channel == null) {
-                __log.fatal("No Channel!");
+                __log.error("No Channel!");
                 return;
             }
         } catch (MessagingException ex) {
-            __log.fatal("Error getting channel! ", ex);
+            __log.error("Error getting channel! ", ex);
             return;
         }
 
diff --git a/jbi/src/main/java/org/apache/ode/jbi/ServiceBridge.java b/jbi/src/main/java/org/apache/ode/jbi/ServiceBridge.java
index eab3119..ee098a8 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/ServiceBridge.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/ServiceBridge.java
@@ -22,8 +22,8 @@
 
 import javax.jbi.messaging.NormalizedMessage;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.iapi.MessageExchange;
 import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
 import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
@@ -36,7 +36,7 @@
  */
 public class ServiceBridge {
 
-    private static final Log __log = LogFactory.getLog(ServiceBridge.class);
+    private static final Logger __log = LoggerFactory.getLogger(ServiceBridge.class);
 
     /**
      * Transfer message properties from the ODE message exchange to the JBI message exchange object.
diff --git a/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java b/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java
index 66ecf61..6103c4f 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java
@@ -25,14 +25,14 @@
 
 import javax.xml.transform.Source;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 public abstract class BaseXmlMapper {
-    protected Log __log = LogFactory.getLog(getClass());
+    protected Logger __log = LoggerFactory.getLogger(getClass());
 
     /** Cache of the parsed messages. */
     private static Map<Source, Document> __parsed = Collections.synchronizedMap(new WeakHashMap<Source, Document>());
diff --git a/jbi/src/main/java/org/apache/ode/jbi/util/SchemaCollection.java b/jbi/src/main/java/org/apache/ode/jbi/util/SchemaCollection.java
index 6b26a77..e8aaaa2 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/util/SchemaCollection.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/util/SchemaCollection.java
@@ -27,8 +27,8 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.XMLParserUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -43,7 +43,7 @@
  */
 public class SchemaCollection {
 
-    private static Log log = LogFactory.getLog(SchemaCollection.class);
+    private static Logger log = LoggerFactory.getLogger(SchemaCollection.class);
 
     private Map schemas;
     private URI baseUri;
diff --git a/jbi/src/main/java/org/apache/ode/jbi/util/WSDLFlattener.java b/jbi/src/main/java/org/apache/ode/jbi/util/WSDLFlattener.java
index d73e6d4..85edebb 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/util/WSDLFlattener.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/util/WSDLFlattener.java
@@ -38,14 +38,14 @@
 import javax.wsdl.factory.WSDLFactory;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.ibm.wsdl.extensions.schema.SchemaImpl;
 
 public class WSDLFlattener {
 
-    private static Log __log = LogFactory.getLog(WSDLFlattener.class);
+    private static Logger __log = LoggerFactory.getLogger(WSDLFlattener.class);
 
     private Definition _definition;
     private SchemaCollection _schemas;
diff --git a/jbi/src/test/java/org/apache/ode/jbi/JbiTestBase.java b/jbi/src/test/java/org/apache/ode/jbi/JbiTestBase.java
index 6b56ab7..97ec81c 100644
--- a/jbi/src/test/java/org/apache/ode/jbi/JbiTestBase.java
+++ b/jbi/src/test/java/org/apache/ode/jbi/JbiTestBase.java
@@ -37,8 +37,8 @@
 import javax.xml.namespace.QName;
 import javax.xml.transform.stream.StreamSource;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.servicemix.client.DefaultServiceMixClient;
 import org.apache.servicemix.jbi.container.ActivationSpec;
 import org.apache.servicemix.jbi.container.JBIContainer;
@@ -53,7 +53,7 @@
 
 @Ignore
 public class JbiTestBase extends SpringTestSupport {
-    private static Log log = LogFactory.getLog(JbiTestBase.class);
+    private static Logger log = LoggerFactory.getLogger(JbiTestBase.class);
 
     protected OdeComponent odeComponent;
     protected JBIContainer jbiContainer;
diff --git a/jbi/src/test/java/org/apache/ode/jbi/msgmap/JbiWsdl11WrapperMapperTest.java b/jbi/src/test/java/org/apache/ode/jbi/msgmap/JbiWsdl11WrapperMapperTest.java
index 91de1f0..63a378c 100644
--- a/jbi/src/test/java/org/apache/ode/jbi/msgmap/JbiWsdl11WrapperMapperTest.java
+++ b/jbi/src/test/java/org/apache/ode/jbi/msgmap/JbiWsdl11WrapperMapperTest.java
@@ -30,12 +30,12 @@
 import javax.xml.transform.dom.DOMSource;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 
 public class JbiWsdl11WrapperMapperTest extends junit.framework.TestCase {
-    private static Log __log = LogFactory.getLog(JbiWsdl11WrapperMapperTest.class);
+    private static Logger __log = LoggerFactory.getLogger(JbiWsdl11WrapperMapperTest.class);
 
     public static class MockJbiFault implements javax.jbi.messaging.Fault {
         private String resourceName;
diff --git a/jbi/src/test/resources/log4j2.xml b/jbi/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..9f6bc53
--- /dev/null
+++ b/jbi/src/test/resources/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+       <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
diff --git a/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java b/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java
index e5bad62..6520e1a 100644
--- a/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java
+++ b/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java
@@ -26,8 +26,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.jca.server.ConnectionProvider;
 import org.apache.ode.ra.transports.rmi.OdeRemote;
 import org.apache.ode.ra.transports.rmi.OdeTransportPipeRemote;
@@ -37,7 +37,7 @@
  * "pipes", each represented by its own remote object.
  */
 public class RmiTransportServerImpl implements OdeRemote {
-    private static final Log __log = LogFactory.getLog(RmiTransportServerImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(RmiTransportServerImpl.class);
 
     private List<RmiPipeServerImpl> _pipes = new ArrayList<RmiPipeServerImpl>();
 
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
index b3e7936..b255e08 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/JdbcDelegate.java
@@ -42,8 +42,8 @@
 import org.apache.ode.bpel.iapi.Scheduler.JobDetails;
 import org.apache.ode.utils.DbIsolation;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DbIsolation;
 import org.apache.ode.utils.StreamUtils;
 
@@ -55,7 +55,7 @@
  */
 public class JdbcDelegate implements DatabaseDelegate {
 
-    private static final Log __log = LogFactory.getLog(JdbcDelegate.class);
+    private static final Logger __log = LoggerFactory.getLogger(JdbcDelegate.class);
 
     private static final String DELETE_JOB = "delete from ODE_JOB where jobid = ? and nodeid = ?";
 
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerThread.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerThread.java
index 9410791..5849f3e 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerThread.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerThread.java
@@ -24,8 +24,8 @@
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.stl.CollectionsX;
 import org.apache.ode.utils.stl.MemberOfFunction;
 
@@ -38,7 +38,7 @@
  */
 class SchedulerThread implements Runnable {
 
-    private static final Log __log = LogFactory.getLog(SchedulerThread.class);
+    private static final Logger __log = LoggerFactory.getLogger(SchedulerThread.class);
 
     private static final int TODO_QUEUE_INITIAL_CAPACITY = 200;
 
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index 517045d..306a9fb 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.scheduler.simple;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.clapi.ClusterMemberListener;
 import org.apache.ode.bpel.iapi.ContextException;
@@ -54,7 +54,7 @@
  *
  */
 public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberListener {
-    private static final Log __log = LogFactory.getLog(SimpleScheduler.class);
+    private static final Logger __log = LoggerFactory.getLogger(SimpleScheduler.class);
 
     private static final int DEFAULT_TRANSACTION_TIMEOUT = 60 * 1000;
 
diff --git a/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java b/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java
index 3872664..85778db 100644
--- a/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java
+++ b/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java
@@ -20,8 +20,8 @@
 package org.apache.ode.scheduler.simple;
 
 import org.apache.ode.bpel.iapi.Scheduler;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 import org.junit.After;
 import org.junit.Before;
@@ -38,7 +38,7 @@
  * @author Matthieu Riou <mriou@apache.org>
  */
 public class RetriesTest extends Assert implements Scheduler.JobProcessor {
-    private static final Log __log = LogFactory.getLog(RetriesTest.class);
+    private static final Logger __log = LoggerFactory.getLogger(RetriesTest.class);
 
     DelegateSupport _ds;
     SimpleScheduler _scheduler;
diff --git a/scheduler-simple/src/test/resources/log4j2.xml b/scheduler-simple/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..9f6bc53
--- /dev/null
+++ b/scheduler-simple/src/test/resources/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+       <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
diff --git a/tools/src/main/java/org/apache/ode/tools/ClineCommandContext.java b/tools/src/main/java/org/apache/ode/tools/ClineCommandContext.java
index 4532c4a..228bf5b 100644
--- a/tools/src/main/java/org/apache/ode/tools/ClineCommandContext.java
+++ b/tools/src/main/java/org/apache/ode/tools/ClineCommandContext.java
@@ -18,13 +18,13 @@
  */
 package org.apache.ode.tools;
 
-import org.apache.commons.logging.Log;
+import org.slf4j.Logger;
 
 public class ClineCommandContext implements CommandContext {
 
-  private Log _log;
+  private Logger _log;
 
-  public ClineCommandContext(Log l) {
+  public ClineCommandContext(Logger l) {
     _log = l;
   }
 
diff --git a/tools/src/main/java/org/apache/ode/tools/CommandContext.java b/tools/src/main/java/org/apache/ode/tools/CommandContext.java
index 22e4bcd..660979a 100644
--- a/tools/src/main/java/org/apache/ode/tools/CommandContext.java
+++ b/tools/src/main/java/org/apache/ode/tools/CommandContext.java
@@ -52,46 +52,46 @@
   public void errln(String s);
 
   /**
-   * Log an error.
+   * Logger an error.
    * @param s a descriptive message.
    */
   public void error(String s);
 
   /**
-   * Log an error that resulted from a {@link Throwable}.
+   * Logger an error that resulted from a {@link Throwable}.
    * @param s a descriptive message.
    * @param t the cause.
    */
   public void error(String s, Throwable t);
 
   /**
-   * Log a warning that resulted from a {@link Throwable}
+   * Logger a warning that resulted from a {@link Throwable}
    * @param s
    * @param t
    */
   public void warn(String s, Throwable t);
 
   /**
-   * Log a warning.
+   * Logger a warning.
    * @param s a descriptive message.
    */
   public void warn(String s);
 
   /**
-   * Log an informative message.
+   * Logger an informative message.
    * @param s a descriptive message.
    */
   public void info(String s);
 
   /**
-   * Log an informative message that resulted from a {@link Throwable}.
+   * Logger an informative message that resulted from a {@link Throwable}.
    * @param s a descriptive message.
    * @param t the cause.
    */
   public void info(String s, Throwable t);
 
   /**
-   * Log a debug-level message that resulted from a {@link Throwable}.
+   * Logger a debug-level message that resulted from a {@link Throwable}.
    * @param s a descriptive message.
    * @param t the cause.
    */
@@ -99,7 +99,7 @@
   public void debug(String s, Throwable t);
 
   /**
-   * Log an debug-level message.
+   * Logger an debug-level message.
    * @param s a descriptive message.
    */
   public void debug(String s);
diff --git a/tools/src/main/java/org/apache/ode/tools/bpelc/cline/BpelC.java b/tools/src/main/java/org/apache/ode/tools/bpelc/cline/BpelC.java
index 4d4831c..194cb88 100644
--- a/tools/src/main/java/org/apache/ode/tools/bpelc/cline/BpelC.java
+++ b/tools/src/main/java/org/apache/ode/tools/bpelc/cline/BpelC.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.tools.bpelc.cline;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.tools.ClineCommandContext;
 import org.apache.ode.tools.ExecutionException;
 import org.apache.ode.tools.bpelc.BpelCompileCommand;
@@ -33,7 +33,7 @@
 import java.io.File;
 
 public class BpelC extends BaseCommandlineTool {
-    private static final Log __log = LogFactory.getLog(BpelC.class);
+    private static final Logger __log = LoggerFactory.getLogger(BpelC.class);
 
     private static FlagWithArgument OUTPUT_DIR = new FlagWithArgument("od","directory",
             "output directory",true);
diff --git a/utils/src/main/java/org/apache/ode/utils/DOMUtils.java b/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
index c2a795d..854a8bc 100644
--- a/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
+++ b/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
@@ -50,8 +50,8 @@
 
 import net.sf.saxon.om.Name11Checker;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.sax.LoggingErrorHandler;
 import org.apache.xerces.dom.DOMOutputImpl;
 import org.apache.xerces.impl.Constants;
@@ -77,7 +77,7 @@
  */
 public class DOMUtils {
 
-    private static Log __log = LogFactory.getLog(DOMUtils.class);
+    private static Logger __log = LoggerFactory.getLogger(DOMUtils.class);
 
     /** The namespaceURI represented by the prefix <code>xmlns</code>. */
     public static final String NS_URI_XMLNS = "http://www.w3.org/2000/xmlns/";
@@ -1041,7 +1041,7 @@
                 txer = _transformerFactory.newTransformer();
             } catch (TransformerConfigurationException e) {
                 String errmsg = "Transformer configuration error!";
-                __log.fatal(errmsg, e);
+                __log.error(errmsg, e);
                 throw new Error(errmsg, e);
             }
         }
@@ -1058,7 +1058,7 @@
                     builder = __documentBuilderFactory.newDocumentBuilder();
                     builder.setErrorHandler(new LoggingErrorHandler());
                 } catch (ParserConfigurationException e) {
-                    __log.error(e);
+                    __log.error("",e);
                     throw new RuntimeException(e);
                 }
             }
diff --git a/utils/src/main/java/org/apache/ode/utils/DbIsolation.java b/utils/src/main/java/org/apache/ode/utils/DbIsolation.java
index 935a58d..7003063 100644
--- a/utils/src/main/java/org/apache/ode/utils/DbIsolation.java
+++ b/utils/src/main/java/org/apache/ode/utils/DbIsolation.java
@@ -23,14 +23,14 @@
 import java.sql.SQLException;
 import javax.sql.DataSource;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Utility to set Ode-specific isolation level on DataSource connections.
  */
 public class DbIsolation {
-    private static final Log __log = LogFactory.getLog(DbIsolation.class);
+    private static final Logger __log = LoggerFactory.getLogger(DbIsolation.class);
     private static int _isolationLevel;
 
     // Read Ode-specific isolation level configuration
diff --git a/utils/src/main/java/org/apache/ode/utils/HierarchicalProperties.java b/utils/src/main/java/org/apache/ode/utils/HierarchicalProperties.java
index b393f95..2ae9e4b 100644
--- a/utils/src/main/java/org/apache/ode/utils/HierarchicalProperties.java
+++ b/utils/src/main/java/org/apache/ode/utils/HierarchicalProperties.java
@@ -20,8 +20,8 @@
 package org.apache.ode.utils;
 
 import org.apache.commons.collections.map.MultiKeyMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.commons.lang.StringUtils;
 
 import javax.xml.namespace.QName;
@@ -80,7 +80,7 @@
  */
 public class HierarchicalProperties {
 
-    private static final Log log = LogFactory.getLog(HierarchicalProperties.class);
+    private static final Logger log = LoggerFactory.getLogger(HierarchicalProperties.class);
 
     public static final String ODE_PREFFIX = "ode";
 
diff --git a/utils/src/main/java/org/apache/ode/utils/LoggingInterceptor.java b/utils/src/main/java/org/apache/ode/utils/LoggingInterceptor.java
index 3a11973..affb888 100644
--- a/utils/src/main/java/org/apache/ode/utils/LoggingInterceptor.java
+++ b/utils/src/main/java/org/apache/ode/utils/LoggingInterceptor.java
@@ -29,7 +29,7 @@
 
 import javax.sql.DataSource;
 
-import org.apache.commons.logging.Log;
+import org.slf4j.Logger;
 
 public class LoggingInterceptor<T> implements InvocationHandler {
 
@@ -54,13 +54,13 @@
         PARAMSTYPES.add("setURL");
     }
 
-    private Log _log;
+    private Logger _log;
     private T _delegate;
     private Map<String, Object> _paramsByName = new TreeMap<String, Object>();
     private Map<Integer, Object> _paramsByIdx = new TreeMap<Integer, Object>();
 
 
-    public LoggingInterceptor(T delegate, Log log) {
+    public LoggingInterceptor(T delegate, Logger log) {
         _log = log;
         _delegate = delegate;
     }
@@ -166,7 +166,7 @@
         else System.out.println(str);
     }
 
-    public static DataSource createLoggingDS(DataSource ds, Log log) {
+    public static DataSource createLoggingDS(DataSource ds, Logger log) {
         return (DataSource)Proxy.newProxyInstance(ds.getClass().getClassLoader(),
                 new Class[] {DataSource.class}, new LoggingInterceptor<DataSource>(ds,log));
     }
diff --git a/utils/src/main/java/org/apache/ode/utils/NSContext.java b/utils/src/main/java/org/apache/ode/utils/NSContext.java
index 86a183a..26109ca 100644
--- a/utils/src/main/java/org/apache/ode/utils/NSContext.java
+++ b/utils/src/main/java/org/apache/ode/utils/NSContext.java
@@ -34,8 +34,8 @@
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.stl.CollectionsX;
 import org.apache.ode.utils.stl.CompositeUnaryFunction;
 import org.apache.ode.utils.stl.EqualsUnaryFunction;
@@ -54,7 +54,7 @@
     private static final long serialVersionUID = 1L;
 
     /** Class-level logger. */
-    private static final Log __log = LogFactory.getLog(NSContext.class);
+    private static final Logger __log = LoggerFactory.getLogger(NSContext.class);
 
     /** Prefix-to-URI map. */
     private HashMap<String, String> _prefixToUriMap = new HashMap<String, String>() {
diff --git a/utils/src/main/java/org/apache/ode/utils/Properties.java b/utils/src/main/java/org/apache/ode/utils/Properties.java
index b7ca983..c283548 100644
--- a/utils/src/main/java/org/apache/ode/utils/Properties.java
+++ b/utils/src/main/java/org/apache/ode/utils/Properties.java
@@ -35,8 +35,8 @@
 import org.apache.commons.httpclient.params.HttpConnectionParams;
 import org.apache.commons.httpclient.params.HttpMethodParams;
 import org.apache.commons.httpclient.params.HttpParams;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -94,7 +94,7 @@
     public static final String PROP_SEND_WS_ADDRESSING_HEADERS = "ws-addressing.headers";
 
 
-    protected static final Log log = LogFactory.getLog(Properties.class);
+    protected static final Logger log = LoggerFactory.getLogger(Properties.class);
 
     public static Object[] getProxyAndHeaders(Map<String, String> properties) {
         ArrayList<Header> headers = null; // /!\ Axis2 requires an ArrayList (not a List implementation)
diff --git a/utils/src/main/java/org/apache/ode/utils/SerializableElement.java b/utils/src/main/java/org/apache/ode/utils/SerializableElement.java
index 4e868fb..6e66044 100644
--- a/utils/src/main/java/org/apache/ode/utils/SerializableElement.java
+++ b/utils/src/main/java/org/apache/ode/utils/SerializableElement.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.utils;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.w3c.dom.Element;
 
@@ -35,7 +35,7 @@
  */
 public final class SerializableElement implements Serializable {
   private static final long serialVersionUID = -1L;
-  private static final Log __log = LogFactory.getLog(SerializableElement.class);
+  private static final Logger __log = LoggerFactory.getLogger(SerializableElement.class);
 
   private transient Element e;
 
diff --git a/utils/src/main/java/org/apache/ode/utils/URITemplate.java b/utils/src/main/java/org/apache/ode/utils/URITemplate.java
index ce4835e..2c4abba 100644
--- a/utils/src/main/java/org/apache/ode/utils/URITemplate.java
+++ b/utils/src/main/java/org/apache/ode/utils/URITemplate.java
@@ -21,8 +21,8 @@
 
 import org.apache.commons.httpclient.URIException;
 import org.apache.commons.httpclient.util.URIUtil;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -78,7 +78,7 @@
 
 public class URITemplate {
 
-    private static final Log log = LogFactory.getLog(URITemplate.class);
+    private static final Logger log = LoggerFactory.getLogger(URITemplate.class);
 
 
     public static final String EXPANSION_REGEX = "\\{[^\\}]+\\}";
diff --git a/utils/src/main/java/org/apache/ode/utils/WatchDog.java b/utils/src/main/java/org/apache/ode/utils/WatchDog.java
index 1f92cf7..56cb07f 100644
--- a/utils/src/main/java/org/apache/ode/utils/WatchDog.java
+++ b/utils/src/main/java/org/apache/ode/utils/WatchDog.java
@@ -19,8 +19,8 @@
 
 package org.apache.ode.utils;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.util.Map;
@@ -47,7 +47,7 @@
  */
 public class WatchDog<T, C extends WatchDog.Observer> implements Runnable {
     static final public long DEFAULT_DELAY = 30000;
-    final Log log = LogFactory.getLog(WatchDog.class);
+    final Logger log = LoggerFactory.getLogger(WatchDog.class);
 
     private long expire;
     private T lastModif;
diff --git a/utils/src/main/java/org/apache/ode/utils/cli/BaseCommandlineTool.java b/utils/src/main/java/org/apache/ode/utils/cli/BaseCommandlineTool.java
index dfd2ed1..e7496ae 100644
--- a/utils/src/main/java/org/apache/ode/utils/cli/BaseCommandlineTool.java
+++ b/utils/src/main/java/org/apache/ode/utils/cli/BaseCommandlineTool.java
@@ -19,154 +19,163 @@
 
 package org.apache.ode.utils.cli;
 
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.BasicConfigurator;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.FileAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
-import org.apache.log4j.SimpleLayout;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.appender.FileAppender;
+import org.apache.logging.log4j.core.config.AppenderRef;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.ode.utils.Version;
 import org.apache.ode.utils.fs.TempFileManager;
 import org.apache.ode.utils.msg.MessageBundle;
+import org.slf4j.Logger;
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.nio.charset.Charset;
 
 public abstract class BaseCommandlineTool {
 
-  public static final int TERSE = 0;
+	public static final int TERSE = 0;
 
-  public static final int VERBOSE = 1;
+	public static final int VERBOSE = 1;
 
-  public static final int EFFUSIVE = 2;
+	public static final int EFFUSIVE = 2;
 
-  private static boolean _tempFileManagerRegistered = false;
+	private static boolean _tempFileManagerRegistered = false;
 
-  private static Class CLAZZ = BaseCommandlineTool.class;
+	private static Class CLAZZ = BaseCommandlineTool.class;
 
-  private static final String LOGGING_PATTERN = "%p - %d{ISO8601} - <%c> %m%n";
+	private static final String LOGGING_PATTERN = "%p - %d{ISO8601} - <%c> %m%n";
 
-  protected static final Flag HELP_FLAG = new Flag("h",
-      "print usage and help to the console and exit.", false);
+	protected static final Flag HELP_FLAG = new Flag("h", "print usage and help to the console and exit.", false);
 
-  protected static final Fragments HELP = new Fragments(new CommandlineFragment[]{HELP_FLAG});
+	protected static final Fragments HELP = new Fragments(new CommandlineFragment[] { HELP_FLAG });
 
-  protected static final Flag QUIET_F = new Flag("q",
-      "only produce error output in the event of an error.", false);
-  protected static final Flag VERBOSE_F = new Flag("v",
-      "produce verbose (INFO-level) logging output.", false);
-  protected static final Flag VERYVERBOSE_F = new Flag("vv",
-      "product effusive (DEBUG-level) logging output", false);
+	protected static final Flag QUIET_F = new Flag("q", "only produce error output in the event of an error.", false);
+	protected static final Flag VERBOSE_F = new Flag("v", "produce verbose (INFO-level) logging output.", false);
+	protected static final Flag VERYVERBOSE_F = new Flag("vv", "product effusive (DEBUG-level) logging output", false);
 
-  protected static final XorGroup LOGGING = new XorGroup(
-      "set logging output verbosity from quiet (-q), to verbose (-v), to effusive (-vv).",
-      true);
-  static {
-    LOGGING.addFragment(QUIET_F);
-    LOGGING.addFragment(VERBOSE_F);
-    LOGGING.addFragment(VERYVERBOSE_F);
-  }
+	protected static final XorGroup LOGGING = new XorGroup(
+			"set logging output verbosity from quiet (-q), to verbose (-v), to effusive (-vv).", true);
 
-  private static final CommandLineMessages __msgs = MessageBundle.getMessages(CommandLineMessages.class);
+	static {
+		LOGGING.addFragment(QUIET_F);
+		LOGGING.addFragment(VERBOSE_F);
+		LOGGING.addFragment(VERYVERBOSE_F);
+	}
 
-  /**
-   * Print program banner.
-   */
-  public static void outputHeader() {
-    if (QUIET_F.isSet()) {
-      return;
-    }
-    System.out.println(__msgs.msgCliHeader(getProgramName(), Version.getVersionName(), Version
-        .getBuildDate()));
-  }
+	private static final CommandLineMessages __msgs = MessageBundle.getMessages(CommandLineMessages.class);
 
-  /**
-   * Initialize logging appropriate for command-line utilities. The logging will
-   * be limited to error messages on standard error, unless user-specified
-   * logging options are present. Among other things, this method looks for the
-   * <code>-v</code> option and configures logging verbosity appropriately
-   *
-   * @param level
-   */
-  protected static void initLogging(int level) {
-    ConsoleAppender appender = new ConsoleAppender(new SimpleLayout());
-    appender.setName("stderr appender");
-    appender.setWriter(new PrintWriter(System.err));
-    appender.setLayout(new PatternLayout(LOGGING_PATTERN));
-    initialize(appender, level);
-    BasicConfigurator.configure(appender);
-    Logger.getRootLogger().addAppender(appender);
-  }
+	/**
+	 * Print program banner.
+	 */
+	public static void outputHeader() {
+		if (QUIET_F.isSet()) {
+			return;
+		}
+		System.out.println(__msgs.msgCliHeader(getProgramName(), Version.getVersionName(), Version.getBuildDate()));
+	}
 
-  protected static void initLogFile() throws IOException {
-    initLogFile(getLevel());
-  }
+	/**
+	 * Initialize logging appropriate for command-line utilities. The logging
+	 * will be limited to error messages on standard error, unless
+	 * user-specified logging options are present. Among other things, this
+	 * method looks for the <code>-v</code> option and configures logging
+	 * verbosity appropriately
+	 *
+	 * @param level
+	 */
+	protected static void initLogging(int level) {
+	      final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+	      final Configuration config = ctx.getConfiguration();
+	      LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
+	      Layout layout = PatternLayout.createLayout(LOGGING_PATTERN,config,null,Charset.forName("UTF-8"),true,false,null,null);
+	      Appender appender = ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "stderr appender", "false", "true");
+	      AppenderRef ref = initialize("stderr appender", level);
+	      AppenderRef[] refs = new AppenderRef[] {ref};
+	      loggerConfig.addAppender(appender, ref.getLevel(), null);
+	      loggerConfig.setLevel(ref.getLevel());
+	      ctx.updateLoggers();
+	}
 
-  protected static void initLogFile(int level) throws IOException {
-    FileAppender appender = new FileAppender(new PatternLayout(LOGGING_PATTERN),
-        System.getProperty("ode.home") + "/logs/ode.log");
-    appender.setName("file appender");
-    initialize(appender, level);
-    BasicConfigurator.configure(appender);
-    Logger.getRootLogger().addAppender(appender);
-  }
+	protected static void initLogFile() throws IOException {
+		initLogFile(getLevel());
+	}
 
-  private static void initialize(AppenderSkeleton appender, int level) {
-    switch (level) {
-      case EFFUSIVE :
-        appender.setThreshold(Level.DEBUG);
-        break;
-      case VERBOSE :
-        appender.setThreshold(Level.INFO);
-        break;
-      default :
-        appender.setThreshold(Level.WARN);
-    }
-  }
+	protected static void initLogFile(int level) throws IOException {
+	      final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+	      final Configuration config = ctx.getConfiguration();
+	      LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
+	      Layout layout = PatternLayout.createLayout(LOGGING_PATTERN,config,null,Charset.forName("UTF-8"),true,false,null,null);
+	      Appender appender = FileAppender.createAppender(System.getProperty("ode.home") + "/logs/ode.log", "false", "false", "File", "false",
+	          "true", "true", "8192", layout, null, "false", null, config);
+	      AppenderRef ref = initialize("File", level);
+	      AppenderRef[] refs = new AppenderRef[] {ref};
+	      loggerConfig.addAppender(appender, ref.getLevel(), null);
+	      loggerConfig.setLevel(ref.getLevel());
+	      ctx.updateLoggers();
+	}
 
-  protected static void setClazz(Class c) {
-    CLAZZ = c;
-  }
+	  private static AppenderRef initialize(String name, int level) {
+	      Level appenderLevel = null;
+	      switch (level) {
+	          case EFFUSIVE :
+	              appenderLevel = Level.DEBUG;
+	          break;
+	          case VERBOSE :
+	              appenderLevel = Level.INFO;
+	          break;
+	          default :
+	              appenderLevel = Level.WARN;
+	          break;
+	    }
+	    return AppenderRef.createAppenderRef(name, appenderLevel, null);
+	  }
 
-  protected static String getProgramName() {
-    return "java " + CLAZZ.getName();
-  }
+	protected static void setClazz(Class c) {
+		CLAZZ = c;
+	}
 
-  protected static void initLogging() {
-    initLogging(getLevel());
-  }
+	protected static String getProgramName() {
+		return "java " + CLAZZ.getName();
+	}
 
-  private static int getLevel() {
-    if (QUIET_F.isSet()) {
-      return TERSE;
-    }
-    else if (VERBOSE_F.isSet()) {
-      return VERBOSE;
-    }
-    else if (VERYVERBOSE_F.isSet()) {
-      return EFFUSIVE;
-    }
-    else {
-      // none of the above.
-      return -1;
-    }
-  }
+	protected static void initLogging() {
+		initLogging(getLevel());
+	}
 
-  protected synchronized static final void registerTempFileManager() {
-    if (!_tempFileManagerRegistered) {
-      Runtime.getRuntime().addShutdownHook(new Thread() {
+	private static int getLevel() {
+		if (QUIET_F.isSet()) {
+			return TERSE;
+		} else if (VERBOSE_F.isSet()) {
+			return VERBOSE;
+		} else if (VERYVERBOSE_F.isSet()) {
+			return EFFUSIVE;
+		} else {
+			// none of the above.
+			return -1;
+		}
+	}
 
-        public void run() {
-          TempFileManager.cleanup();
-        }
-      });
-    }
-  }
+	protected synchronized static final void registerTempFileManager() {
+		if (!_tempFileManagerRegistered) {
+			Runtime.getRuntime().addShutdownHook(new Thread() {
 
-  protected static void consoleErr(String errMsg) {
-    String progName = getProgramName();
-    System.err.println(progName + ": " + errMsg);
-  }
+				public void run() {
+					TempFileManager.cleanup();
+				}
+			});
+		}
+	}
+
+	protected static void consoleErr(String errMsg) {
+		String progName = getProgramName();
+		System.err.println(progName + ": " + errMsg);
+	}
 }
diff --git a/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java b/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java
index 0dac704..ca240a8 100644
--- a/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java
+++ b/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java
@@ -24,15 +24,15 @@
 import java.util.List;
 import java.util.TreeSet;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Various file system utilities.
  */
 public class FileUtils {
 
-    private static final Log __log = LogFactory.getLog(FileUtils.class);
+    private static final Logger __log = LoggerFactory.getLogger(FileUtils.class);
 
     /**
      * Test if the given path is absolute or not.
diff --git a/utils/src/main/java/org/apache/ode/utils/fs/TempFileManager.java b/utils/src/main/java/org/apache/ode/utils/fs/TempFileManager.java
index f9185f8..7a1e62e 100644
--- a/utils/src/main/java/org/apache/ode/utils/fs/TempFileManager.java
+++ b/utils/src/main/java/org/apache/ode/utils/fs/TempFileManager.java
@@ -27,15 +27,15 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Convenience class for managing temporary files and cleanup on JVM exit.
  */
 public class TempFileManager {
 
-  private static final Log __log = LogFactory.getLog(TempFileManager.class);
+  private static final Logger __log = LoggerFactory.getLogger(TempFileManager.class);
 
   private static TempFileManager __singleton;
   private static File __baseDir;
diff --git a/utils/src/main/java/org/apache/ode/utils/jmx/SimpleMBean.java b/utils/src/main/java/org/apache/ode/utils/jmx/SimpleMBean.java
index 91bd639..b38b276 100644
--- a/utils/src/main/java/org/apache/ode/utils/jmx/SimpleMBean.java
+++ b/utils/src/main/java/org/apache/ode/utils/jmx/SimpleMBean.java
@@ -24,15 +24,15 @@
 
 import javax.management.*;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * An extension of {@link StandardMBean} with common features such as registeration,
  * notification, sequence generation, etc. "built-in."
  */
 public abstract class SimpleMBean extends StandardMBean implements MBeanRegistration, NotificationEmitter {
-  private static final Log __log = LogFactory.getLog(SimpleMBean.class);
+  private static final Logger __log = LoggerFactory.getLogger(SimpleMBean.class);
 
   protected MBeanServer _mbeanServer;
   protected ObjectName _myName;
@@ -91,7 +91,7 @@
     } catch (InstanceNotFoundException ex) {
         // ignore
     } catch (MBeanRegistrationException ex) {
-        __log.fatal("Error unregistering mbean: " + getObjectName().getCanonicalName(), ex);
+        __log.error("Error unregistering mbean: " + getObjectName().getCanonicalName(), ex);
     }
     try {
       server.registerMBean(this, getObjectName());
@@ -136,7 +136,7 @@
       return new ObjectName(buf.toString());
     } catch (Exception ex) {
       String errmsg = "DomainNodeImpl.createObjectName is broken!";
-      __log.fatal(errmsg,ex);
+      __log.error(errmsg,ex);
       throw new AssertionError(errmsg);
     }
   }
diff --git a/utils/src/main/java/org/apache/ode/utils/rmi/RMIConstants.java b/utils/src/main/java/org/apache/ode/utils/rmi/RMIConstants.java
index a462740..a6da788 100644
--- a/utils/src/main/java/org/apache/ode/utils/rmi/RMIConstants.java
+++ b/utils/src/main/java/org/apache/ode/utils/rmi/RMIConstants.java
@@ -19,15 +19,15 @@
 
 package org.apache.ode.utils.rmi;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Constant related to naming of ODE objects in JMX.
  * @deprecated DO NO USE: Find your own way to get this URL.
  */
 public final class RMIConstants {
-  private static final Log __log = LogFactory.getLog(RMIConstants.class);
+  private static final Logger __log = LoggerFactory.getLogger(RMIConstants.class);
 
 
   /**
diff --git a/utils/src/main/java/org/apache/ode/utils/sax/LoggingErrorHandler.java b/utils/src/main/java/org/apache/ode/utils/sax/LoggingErrorHandler.java
index f6e4c1d..0e679c1 100644
--- a/utils/src/main/java/org/apache/ode/utils/sax/LoggingErrorHandler.java
+++ b/utils/src/main/java/org/apache/ode/utils/sax/LoggingErrorHandler.java
@@ -22,8 +22,8 @@
 import org.apache.ode.utils.msg.CommonMessages;
 import org.apache.ode.utils.msg.MessageBundle;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -34,8 +34,8 @@
  */
 public class LoggingErrorHandler implements ErrorHandler {
 
-  private static final Log __log = LogFactory.getLog(LoggingErrorHandler.class);
-  private Log _l;
+  private static final Logger __log = LoggerFactory.getLogger(LoggingErrorHandler.class);
+  private Logger _l;
 
   private static final String WARNING = MessageBundle.getMessages(CommonMessages.class)
       .strWarning().toUpperCase();
@@ -59,7 +59,7 @@
    * @param log
    *          the <code>Log</code> on which to dump messages.
    */
-  public LoggingErrorHandler(Log log) {
+  public LoggingErrorHandler(Logger log) {
     _l = log;
   }
 
diff --git a/utils/src/main/java/org/apache/ode/utils/trax/LogErrorListener.java b/utils/src/main/java/org/apache/ode/utils/trax/LogErrorListener.java
index 948e22b..0b6f233 100644
--- a/utils/src/main/java/org/apache/ode/utils/trax/LogErrorListener.java
+++ b/utils/src/main/java/org/apache/ode/utils/trax/LogErrorListener.java
@@ -21,13 +21,13 @@
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.TransformerException;
 
-import org.apache.commons.logging.Log;
+import org.slf4j.Logger;
 
 public class LogErrorListener implements ErrorListener {
 
-  private Log _log;
+  private Logger _log;
 
-  public LogErrorListener(Log log) {
+  public LogErrorListener(Logger log) {
     _log = log;
   }
 
@@ -42,7 +42,7 @@
 
   public void fatalError(TransformerException exception)
       throws TransformerException {
-    _log.fatal(exception.getMessageAndLocation(),exception);
+    _log.error(exception.getMessageAndLocation(),exception);
   }
 
 }
diff --git a/utils/src/main/java/org/apache/ode/utils/xml/capture/Tracker.java b/utils/src/main/java/org/apache/ode/utils/xml/capture/Tracker.java
index f51cfd3..942c96f 100644
--- a/utils/src/main/java/org/apache/ode/utils/xml/capture/Tracker.java
+++ b/utils/src/main/java/org/apache/ode/utils/xml/capture/Tracker.java
@@ -21,8 +21,8 @@
 import java.net.URI;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.Locator;
@@ -32,7 +32,7 @@
  * Base class for schema-specifc dependency trackers.
  */
 public abstract class Tracker implements ContentHandler {
-  private static final Log __log = LogFactory.getLog(Tracker.class);
+  private static final Logger __log = LoggerFactory.getLogger(Tracker.class);
 
   private Set<URI> references_ ;
   private URI base_;
diff --git a/utils/src/main/java/org/apache/ode/utils/xml/capture/Wsdl11Tracker.java b/utils/src/main/java/org/apache/ode/utils/xml/capture/Wsdl11Tracker.java
index 1ee2fc1..3303ef3 100644
--- a/utils/src/main/java/org/apache/ode/utils/xml/capture/Wsdl11Tracker.java
+++ b/utils/src/main/java/org/apache/ode/utils/xml/capture/Wsdl11Tracker.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.utils.xml.capture;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
@@ -29,7 +29,7 @@
  * document may have in-line schemas.
  */
 public class Wsdl11Tracker extends XmlSchemaTracker {
-  private static final Log __log = LogFactory.getLog(Wsdl11Tracker.class);
+  private static final Logger __log = LoggerFactory.getLogger(Wsdl11Tracker.class);
 
   public static final String NS = "http://schemas.xmlsoap.org/wsdl/";
 
diff --git a/utils/src/main/java/org/apache/ode/utils/xml/capture/XmlSchemaTracker.java b/utils/src/main/java/org/apache/ode/utils/xml/capture/XmlSchemaTracker.java
index 0eefb0a..a6d29c3 100644
--- a/utils/src/main/java/org/apache/ode/utils/xml/capture/XmlSchemaTracker.java
+++ b/utils/src/main/java/org/apache/ode/utils/xml/capture/XmlSchemaTracker.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.utils.xml.capture;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
@@ -27,7 +27,7 @@
  * {@link Tracker} for XML schema imports / includes.
  */
 public class XmlSchemaTracker extends Tracker {
-  private static final Log __log = LogFactory.getLog(XmlSchemaTracker.class);
+  private static final Logger __log = LoggerFactory.getLogger(XmlSchemaTracker.class);
 
   private static final String NS="http://www.w3.org/2001/XMLSchema" ;
 
diff --git a/utils/src/main/java/org/apache/ode/utils/xsd/CapturingXMLEntityResolver.java b/utils/src/main/java/org/apache/ode/utils/xsd/CapturingXMLEntityResolver.java
index 3242bf7..13ced9f 100644
--- a/utils/src/main/java/org/apache/ode/utils/xsd/CapturingXMLEntityResolver.java
+++ b/utils/src/main/java/org/apache/ode/utils/xsd/CapturingXMLEntityResolver.java
@@ -18,8 +18,8 @@
  */
 package org.apache.ode.utils.xsd;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.StreamUtils;
 import org.apache.ode.utils.fs.FileUtils;
 import org.apache.xerces.xni.XMLResourceIdentifier;
@@ -40,8 +40,8 @@
  * "whole" of a schema document (including imports and other dependencies).
  */
 public class CapturingXMLEntityResolver implements XMLEntityResolver {
-  private static final Log __log = LogFactory
-      .getLog(CapturingXMLEntityResolver.class);
+  private static final Logger __log = LoggerFactory
+      .getLogger(CapturingXMLEntityResolver.class);
 
   private XMLEntityResolver _resolver;
 
diff --git a/utils/src/main/java/org/apache/ode/utils/xsd/LoggingXmlErrorHandler.java b/utils/src/main/java/org/apache/ode/utils/xsd/LoggingXmlErrorHandler.java
index d340555..48f447d 100644
--- a/utils/src/main/java/org/apache/ode/utils/xsd/LoggingXmlErrorHandler.java
+++ b/utils/src/main/java/org/apache/ode/utils/xsd/LoggingXmlErrorHandler.java
@@ -19,7 +19,7 @@
 
 package org.apache.ode.utils.xsd;
 
-import org.apache.commons.logging.Log;
+import org.slf4j.Logger;
 import org.apache.ode.utils.msg.MessageBundle;
 import org.apache.xerces.xni.XNIException;
 import org.apache.xerces.xni.parser.XMLErrorHandler;
@@ -31,20 +31,20 @@
  */
 public class LoggingXmlErrorHandler implements XMLErrorHandler {
 
-  private Log _log;
+  private Logger _log;
 
   private static final XsdMessages __msgs = MessageBundle.getMessages(XsdMessages.class);
 
   private XMLParseException _ex;
 
   /**
-   * Create a new instance that will output to the specified {@link Log}
+   * Create a new instance that will output to the specified {@link Logger}
    * instance.
    *
    * @param log
    *          the target log, which much be non-<code>null</code>
    */
-  public LoggingXmlErrorHandler(Log log) {
+  public LoggingXmlErrorHandler(Logger log) {
     assert log != null;
     _log = log;
   }
diff --git a/utils/src/main/java/org/apache/ode/utils/xsd/SchemaModelImpl.java b/utils/src/main/java/org/apache/ode/utils/xsd/SchemaModelImpl.java
index 072a990..53d7329 100644
--- a/utils/src/main/java/org/apache/ode/utils/xsd/SchemaModelImpl.java
+++ b/utils/src/main/java/org/apache/ode/utils/xsd/SchemaModelImpl.java
@@ -27,8 +27,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.xerces.dom.DOMInputImpl;
 import org.apache.xerces.impl.Constants;
 import org.apache.xerces.impl.xs.XMLSchemaLoader;
@@ -48,7 +48,7 @@
  * Xerces based schema model.
  */
 public class SchemaModelImpl implements SchemaModel {
-    private static final Log __log = LogFactory.getLog(SchemaModelImpl.class);
+    private static final Logger __log = LoggerFactory.getLogger(SchemaModelImpl.class);
     private XSModel _model;
 
     private SchemaModelImpl(XSModel model) {
@@ -99,8 +99,8 @@
             boolean isWarning = (error.getSeverity() == DOMError.SEVERITY_WARNING);
             __log.warn("Schema error", ((Exception)error.getRelatedException()));
             __log.warn(error.getLocation().getUri() + ":" + error.getLocation().getLineNumber());
-            __log.warn(error.getRelatedData());
-            __log.warn(error.getRelatedException());
+            __log.warn(error.getRelatedData().toString());
+            __log.warn(error.getRelatedException().toString());
             return isWarning;
         }
     }
diff --git a/utils/src/main/java/org/apache/ode/utils/xsd/XSUtils.java b/utils/src/main/java/org/apache/ode/utils/xsd/XSUtils.java
index 0c2cc26..7659c13 100644
--- a/utils/src/main/java/org/apache/ode/utils/xsd/XSUtils.java
+++ b/utils/src/main/java/org/apache/ode/utils/xsd/XSUtils.java
@@ -25,8 +25,8 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.msg.MessageBundle;
 import org.apache.xerces.dom.DOMInputImpl;
 import org.apache.xerces.impl.Constants;
@@ -46,7 +46,7 @@
  */
 public class XSUtils {
 
-    private static final Log __log = LogFactory.getLog(XSUtils.class);
+    private static final Logger __log = LoggerFactory.getLogger(XSUtils.class);
 
     private static final XsdMessages __msgs = MessageBundle.getMessages(XsdMessages.class);
 
@@ -145,16 +145,16 @@
      */
     static class LoggingXmlErrorHandler implements XMLErrorHandler {
 
-        private Log _log;
+        private Logger _log;
 
         private ArrayList<XMLParseException> _errors = new ArrayList<XMLParseException>();
 
         /**
-         * Create a new instance that will output to the specified {@link Log}
+         * Create a new instance that will output to the specified {@link Logger}
          * instance.
          * @param log the target log, which much be non-<code>null</code>
          */
-        public LoggingXmlErrorHandler(Log log) {
+        public LoggingXmlErrorHandler(Logger log) {
             assert log != null;
             _log = log;
         }
@@ -209,9 +209,9 @@
     static class LoggingDOMErrorHandler implements DOMErrorHandler {
 
         private ArrayList<Exception> _exceptions = new ArrayList<Exception>();
-        private Log _log;
+        private Logger _log;
 
-        public LoggingDOMErrorHandler(Log log) {
+        public LoggingDOMErrorHandler(Logger log) {
             assert log != null;
             _log = log;
         }
diff --git a/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java b/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java
index a1e0c66..547fbd9 100644
--- a/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java
+++ b/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java
@@ -38,8 +38,8 @@
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.commons.collections.map.MultiKeyMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -55,7 +55,7 @@
  */
 public class XslTransformHandler {
 
-    private static final Log __log = LogFactory.getLog(XslTransformHandler.class);
+    private static final Logger __log = LoggerFactory.getLogger(XslTransformHandler.class);
 
   private static XslTransformHandler __singleton;
 
diff --git a/utils/src/test/java/org/apache/ode/utils/xsd/SchemaCaptureTest.java b/utils/src/test/java/org/apache/ode/utils/xsd/SchemaCaptureTest.java
index aa09424..b824279 100644
--- a/utils/src/test/java/org/apache/ode/utils/xsd/SchemaCaptureTest.java
+++ b/utils/src/test/java/org/apache/ode/utils/xsd/SchemaCaptureTest.java
@@ -28,8 +28,8 @@
 
 import junit.framework.TestCase;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.ode.utils.StreamUtils;
 import org.apache.ode.utils.TestResources;
 import org.apache.xerces.xni.XMLResourceIdentifier;
@@ -42,7 +42,7 @@
  * Test schema capture functionality.
  */
 public class SchemaCaptureTest {
-    private static Log __log = LogFactory.getLog(SchemaCaptureTest.class);
+    private static Logger __log = LoggerFactory.getLogger(SchemaCaptureTest.class);
 
     @Test
     public void testSchemaCapture() throws Exception {
diff --git a/utils/src/test/resources/log4j2.xml b/utils/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..9f6bc53
--- /dev/null
+++ b/utils/src/test/resources/log4j2.xml
@@ -0,0 +1,37 @@
+<Configuration>
+    <Appenders>
+        <File name="FILE" fileName="target/test/test.log" append="false">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+        </Console>
+        <Async name="Async">
+            <AppenderRef ref="FILE"/>
+            <AppenderRef ref="STDOUT"/>
+        </Async>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="org.apache.ode" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.axis2" level="info" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+       <Logger name="org.hibernate" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.apache.openjpa" level="warn" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+        <Logger name="org.springframework" level="error" additivity="false">
+            <AppenderRef ref="FILE"/>
+        </Logger>
+
+        <Root level="info">
+            <AppenderRef ref="Async"/>
+        </Root>
+    </Loggers>
+
+</Configuration>
