Index: project.xml
===================================================================
--- project.xml	(revision 292295)
+++ project.xml	(working copy)
@@ -335,8 +335,9 @@
             <url>http://jcp.org/en/jsr/detail?id=170</url>
         </dependency>
         <dependency>
-            <id>log4j</id>
-            <version>1.2.8</version>
+            <groupId>org.slf4j</groupId>
+            <artifactId>nlog4j</artifactId>
+            <version>1.2.17</version>
         </dependency>
         <dependency>
             <groupId>lucene</groupId>
Index: src/test/org/apache/jackrabbit/test/JUnitTest.java
===================================================================
--- src/test/org/apache/jackrabbit/test/JUnitTest.java	(revision 292228)
+++ src/test/org/apache/jackrabbit/test/JUnitTest.java	(working copy)
@@ -17,7 +17,8 @@
 package org.apache.jackrabbit.test;
 
 import junit.framework.TestCase;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Abstract base class for any JUnit test case.
@@ -27,7 +28,7 @@
     /**
      * Logger instance for test cases
      */
-    private static final Logger logger = Logger.getLogger(JUnitTest.class);
+    private static final Logger logger = LoggerFactory.getLogger(JUnitTest.class);
 
     /**
      * Output stream for general messages from tests.
Index: src/test/org/apache/jackrabbit/test/LogPrintWriter.java
===================================================================
--- src/test/org/apache/jackrabbit/test/LogPrintWriter.java	(revision 292228)
+++ src/test/org/apache/jackrabbit/test/LogPrintWriter.java	(working copy)
@@ -16,8 +16,7 @@
  */
 package org.apache.jackrabbit.test;
 
-import org.apache.log4j.Logger;
-import org.apache.log4j.Level;
+import org.slf4j.Logger;
 
 import java.io.Writer;
 import java.io.IOException;
@@ -40,11 +39,6 @@
     private Logger log;
 
     /**
-     * Default Level is debug.
-     */
-    private Level level = Level.DEBUG;
-
-    /**
      * Creates a new <code>LogPrintWriter</code> which is based on a
      * <code>Writer</code>.
      *
@@ -90,16 +84,6 @@
         this.log = log;
     }
 
-    /**
-     * Sets the log level for messages written to the <code>Logger</code>
-     * instance currently set in this <code>LogPrintWriter</code>.
-     *
-     * @param level the log level to set.
-     */
-    public void setMsgLevel(Level level) {
-        this.level = level;
-    }
-
     //------------------< overrides from PrintWriter >-------------------------
 
     public void close() {
@@ -139,7 +123,7 @@
             return;
         }
         if (log != null) {
-            log.log(level, buffer);
+            log.debug(buffer.toString());
         } else {
             try {
                 out.write(buffer.toString());
Index: src/test/org/apache/jackrabbit/core/ConcurrentSaveTest.java
===================================================================
--- src/test/org/apache/jackrabbit/core/ConcurrentSaveTest.java	(revision 292228)
+++ src/test/org/apache/jackrabbit/core/ConcurrentSaveTest.java	(working copy)
@@ -17,7 +17,8 @@
 package org.apache.jackrabbit.core;
 
 import org.apache.jackrabbit.test.AbstractJCRTest;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.Session;
 import javax.jcr.Node;
@@ -33,7 +34,7 @@
 public class ConcurrentSaveTest extends AbstractJCRTest {
 
     /** logger instance */
-    private static final Logger log = Logger.getLogger(ConcurrentSaveTest.class);
+    private static final Logger log = LoggerFactory.getLogger(ConcurrentSaveTest.class);
 
     private final int NUM_NODES = 1000;
     private Session addNodeSession;
Index: src/java/org/apache/jackrabbit/core/SearchManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/SearchManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/SearchManager.java	(working copy)
@@ -31,7 +31,8 @@
 import org.apache.jackrabbit.core.state.ItemStateManager;
 import org.apache.jackrabbit.core.state.ItemState;
 import org.apache.jackrabbit.name.Path;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.NamespaceException;
 import javax.jcr.NamespaceRegistry;
@@ -56,7 +57,7 @@
     /**
      * Logger instance for this class
      */
-    private static final Logger log = Logger.getLogger(SearchManager.class);
+    private static final Logger log = LoggerFactory.getLogger(SearchManager.class);
 
     /**
      * Namespace URI for xpath functions
Index: src/java/org/apache/jackrabbit/core/ItemValidator.java
===================================================================
--- src/java/org/apache/jackrabbit/core/ItemValidator.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/ItemValidator.java	(working copy)
@@ -28,7 +28,8 @@
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
@@ -44,7 +45,7 @@
     /**
      * Logger instance for this class
      */
-    private static Logger log = Logger.getLogger(ItemValidator.class);
+    private static Logger log = LoggerFactory.getLogger(ItemValidator.class);
 
     /**
      * node type registry
Index: src/java/org/apache/jackrabbit/core/SessionImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/SessionImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/SessionImpl.java	(working copy)
@@ -42,7 +42,8 @@
 import org.apache.jackrabbit.name.MalformedPathException;
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.Path;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.xml.serialize.OutputFormat;
 import org.apache.xml.serialize.XMLSerializer;
 import org.xml.sax.ContentHandler;
@@ -94,7 +95,7 @@
  */
 public class SessionImpl implements Session, Dumpable {
 
-    private static Logger log = Logger.getLogger(SessionImpl.class);
+    private static Logger log = LoggerFactory.getLogger(SessionImpl.class);
 
     /**
      * prededfined action constants in checkPermission
Index: src/java/org/apache/jackrabbit/core/PropertyImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/PropertyImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/PropertyImpl.java	(working copy)
@@ -29,7 +29,8 @@
 import org.apache.jackrabbit.value.DateValue;
 import org.apache.jackrabbit.value.DoubleValue;
 import org.apache.jackrabbit.value.LongValue;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.ItemNotFoundException;
@@ -55,7 +56,7 @@
  */
 public class PropertyImpl extends ItemImpl implements Property {
 
-    private static Logger log = Logger.getLogger(PropertyImpl.class);
+    private static Logger log = LoggerFactory.getLogger(PropertyImpl.class);
 
     private PropertyDefinition definition;
 
Index: src/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java
===================================================================
--- src/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java	(working copy)
@@ -35,7 +35,8 @@
 import org.apache.jackrabbit.core.state.ItemStateReferenceMap;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.uuid.UUID;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import java.util.HashSet;
@@ -49,7 +50,7 @@
     /**
      * the default logger
      */
-    private static Logger log = Logger.getLogger(AbstractVISProvider.class);
+    private static Logger log = LoggerFactory.getLogger(AbstractVISProvider.class);
 
     /**
      * the root node
Index: src/java/org/apache/jackrabbit/core/NodeImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/NodeImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/NodeImpl.java	(working copy)
@@ -53,7 +53,8 @@
 import org.apache.jackrabbit.util.IteratorHelper;
 import org.apache.jackrabbit.uuid.UUID;
 import org.apache.jackrabbit.value.ValueHelper;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.InvalidItemStateException;
@@ -100,7 +101,7 @@
  */
 public class NodeImpl extends ItemImpl implements Node {
 
-    private static Logger log = Logger.getLogger(NodeImpl.class);
+    private static Logger log = LoggerFactory.getLogger(NodeImpl.class);
 
     /** same as ((NodeState) state).getNodeTypeName(); cached to avoid type casts */
     protected final QName primaryTypeName;
Index: src/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.core.fs.FileSystem;
 import org.apache.jackrabbit.core.fs.FileSystemResource;
 import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.xerces.util.XMLChar;
 
 import javax.jcr.AccessDeniedException;
@@ -41,7 +42,7 @@
 public class NamespaceRegistryImpl implements NamespaceRegistry,
         NamespaceResolver, Constants {
 
-    private static Logger log = Logger.getLogger(NamespaceRegistryImpl.class);
+    private static Logger log = LoggerFactory.getLogger(NamespaceRegistryImpl.class);
 
     private static final String NS_REG_RESOURCE = "ns_reg.properties";
 
Index: src/java/org/apache/jackrabbit/core/lock/LockInfo.java
===================================================================
--- src/java/org/apache/jackrabbit/core/lock/LockInfo.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/lock/LockInfo.java	(working copy)
@@ -19,7 +19,8 @@
 import org.apache.jackrabbit.core.NodeImpl;
 import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.core.SessionListener;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -34,7 +35,7 @@
     /**
      * Logger
      */
-    private static final Logger log = Logger.getLogger(LockInfo.class);
+    private static final Logger log = LoggerFactory.getLogger(LockInfo.class);
 
     /**
      * Lock manager
Index: src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java	(working copy)
@@ -29,7 +29,8 @@
 import org.apache.jackrabbit.name.MalformedPathException;
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.Path;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.Node;
 import javax.jcr.PathNotFoundException;
@@ -59,7 +60,7 @@
     /**
      * Logger
      */
-    private static final Logger log = Logger.getLogger(LockManagerImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(LockManagerImpl.class);
 
     /**
      * Path map containing all locks at the leaves
Index: src/java/org/apache/jackrabbit/core/BatchedItemOperations.java
===================================================================
--- src/java/org/apache/jackrabbit/core/BatchedItemOperations.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/BatchedItemOperations.java	(working copy)
@@ -40,7 +40,8 @@
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.uuid.UUID;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.ItemExistsException;
@@ -66,7 +67,7 @@
  */
 public class BatchedItemOperations extends ItemValidator implements Constants {
 
-    private static Logger log = Logger.getLogger(BatchedItemOperations.class);
+    private static Logger log = LoggerFactory.getLogger(BatchedItemOperations.class);
 
     // flags used by the copy(...) methods
     protected static final int COPY = 0;
Index: src/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java	(working copy)
@@ -23,7 +23,8 @@
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.document.Document;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import java.io.IOException;
@@ -52,7 +53,7 @@
     /**
      * Logger instance for this class
      */
-    private static final Logger log = Logger.getLogger(ConsistencyCheck.class);
+    private static final Logger log = LoggerFactory.getLogger(ConsistencyCheck.class);
 
     /**
      * The ItemStateManager of the workspace.
Index: src/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java	(working copy)
@@ -29,7 +29,8 @@
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 
@@ -50,7 +51,7 @@
     /**
      * The logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(NodeIndexer.class);
+    private static final Logger log = LoggerFactory.getLogger(NodeIndexer.class);
 
     /**
      * QName for jcr:encoding
Index: src/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java	(working copy)
@@ -21,7 +21,8 @@
 import org.apache.commons.collections.Buffer;
 import org.apache.commons.collections.BufferUtils;
 import org.apache.commons.collections.buffer.UnboundedFifoBuffer;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.List;
 import java.util.Collections;
@@ -40,7 +41,7 @@
     /**
      * Logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(IndexMerger.class);
+    private static final Logger log = LoggerFactory.getLogger(IndexMerger.class);
 
     /**
      * Marker task to signal the background thread to quit.
Index: src/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java	(working copy)
@@ -19,7 +19,8 @@
 import org.apache.jackrabbit.core.ItemManager;
 import org.apache.jackrabbit.core.NodeId;
 import org.apache.jackrabbit.core.NodeImpl;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
@@ -32,7 +33,7 @@
 class NodeIteratorImpl implements ScoreNodeIterator {
 
     /** Logger instance for this class */
-    private static final Logger log = Logger.getLogger(NodeIteratorImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(NodeIteratorImpl.class);
 
     /** The UUIDs of the nodes in the result set */
     protected final String[] uuids;
Index: src/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java	(working copy)
@@ -22,7 +22,8 @@
 import org.apache.jackrabbit.core.state.NoSuchItemStateException;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.uuid.Constants;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.Term;
@@ -74,7 +75,7 @@
     /**
      * The logger instance for this class
      */
-    private static final Logger log = Logger.getLogger(MultiIndex.class);
+    private static final Logger log = LoggerFactory.getLogger(MultiIndex.class);
 
     /**
      * Name of the file to persist search internal namespace mappings
Index: src/java/org/apache/jackrabbit/core/query/lucene/NamespaceMappings.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/NamespaceMappings.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/NamespaceMappings.java	(working copy)
@@ -21,7 +21,8 @@
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.name.UnknownPrefixException;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.NamespaceException;
 import java.io.BufferedOutputStream;
@@ -51,7 +52,7 @@
     /**
      * Default logger instance for this class
      */
-    private static Logger log = Logger.getLogger(NamespaceMappings.class);
+    private static Logger log = LoggerFactory.getLogger(NamespaceMappings.class);
 
     /**
      * Location of the file that persists the uri / prefix mappings
Index: src/java/org/apache/jackrabbit/core/query/lucene/RedoLog.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/RedoLog.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/RedoLog.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.query.lucene;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -46,7 +47,7 @@
     /**
      * Logger instance for this class
      */
-    private static final Logger log = Logger.getLogger(RedoLog.class);
+    private static final Logger log = LoggerFactory.getLogger(RedoLog.class);
 
     /**
      * Implements a {@link ActionCollector} that counts all entries and sets
Index: src/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java	(working copy)
@@ -25,7 +25,8 @@
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.document.Document;
@@ -52,7 +53,7 @@
 public class SearchIndex extends AbstractQueryHandler {
 
     /** The logger instance for this class */
-    private static final Logger log = Logger.getLogger(SearchIndex.class);
+    private static final Logger log = LoggerFactory.getLogger(SearchIndex.class);
 
     /**
      * The default value for property {@link #minMergeDocs}.
Index: src/java/org/apache/jackrabbit/core/query/lucene/Recovery.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/Recovery.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/Recovery.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.query.lucene;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Set;
 import java.util.HashSet;
@@ -32,7 +33,7 @@
     /**
      * The logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(Recovery.class);
+    private static final Logger log = LoggerFactory.getLogger(Recovery.class);
 
     /**
      * The MultiIndex where to run the recovery on.
Index: src/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java	(working copy)
@@ -17,7 +17,8 @@
 package org.apache.jackrabbit.core.query.lucene;
 
 import org.apache.commons.collections.map.LRUMap;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Implements a Document number cache with a fixed size and a LRU strategy.
@@ -27,7 +28,7 @@
     /**
      * Logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(DocNumberCache.class);
+    private static final Logger log = LoggerFactory.getLogger(DocNumberCache.class);
 
     /**
      * Log cache statistics at most every 10 seconds.
@@ -123,7 +124,7 @@
                 statistics.append(", #hits=").append((accesses - misses));
                 statistics.append(", #misses=").append(misses);
                 statistics.append(", cacheRatio=").append(ratio).append("%");
-                log.info(statistics);
+                log.info(statistics.toString());
                 accesses = 0;
                 misses = 0;
                 lastLog = System.currentTimeMillis();
Index: src/java/org/apache/jackrabbit/core/query/lucene/DocOrderNodeIteratorImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/DocOrderNodeIteratorImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/DocOrderNodeIteratorImpl.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.core.NodeId;
 import org.apache.jackrabbit.core.NodeImpl;
 import org.apache.jackrabbit.name.Path;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
@@ -36,7 +37,7 @@
 class DocOrderNodeIteratorImpl implements ScoreNodeIterator {
 
     /** Logger instance for this class */
-    private static final Logger log = Logger.getLogger(DocOrderNodeIteratorImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(DocOrderNodeIteratorImpl.class);
 
     /** A node iterator with ordered nodes */
     private NodeIteratorImpl orderedNodes;
Index: src/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.query.lucene;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.FilterIndexReader;
 import org.apache.lucene.index.IndexReader;
@@ -37,7 +38,7 @@
     /**
      * The logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(CachingIndexReader.class);
+    private static final Logger log = LoggerFactory.getLogger(CachingIndexReader.class);
 
     /**
      * The current value of the global creation tick counter.
Index: src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java	(working copy)
@@ -23,7 +23,8 @@
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.RAMDirectory;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -38,7 +39,7 @@
     /**
      * Logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(VolatileIndex.class);
+    private static final Logger log = LoggerFactory.getLogger(VolatileIndex.class);
 
     /**
      * Default value for {@link #bufferSize}.
Index: src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java	(working copy)
@@ -41,7 +41,8 @@
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.name.UnknownPrefixException;
 import org.apache.jackrabbit.util.ISO8601;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queryParser.ParseException;
@@ -74,7 +75,7 @@
     /**
      * Logger for this class
      */
-    private static final Logger log = Logger.getLogger(LuceneQueryBuilder.class);
+    private static final Logger log = LoggerFactory.getLogger(LuceneQueryBuilder.class);
 
     /**
      * QName for jcr:primaryType
Index: src/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java	(working copy)
@@ -29,7 +29,8 @@
 import org.apache.lucene.search.Scorer;
 import org.apache.lucene.search.Explanation;
 import org.apache.lucene.search.Similarity;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.commons.collections.map.LRUMap;
 
 import java.io.IOException;
@@ -52,7 +53,7 @@
     /**
      * Logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(WildcardQuery.class);
+    private static final Logger log = LoggerFactory.getLogger(WildcardQuery.class);
 
     /**
      * Name of the field to search.
Index: src/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java	(working copy)
@@ -27,7 +27,8 @@
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.TermEnum;
 import org.apache.lucene.index.TermDocs;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.commons.collections.map.LRUMap;
 
 import java.io.IOException;
@@ -46,7 +47,7 @@
     /**
      * Logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(RangeQuery.class);
+    private static final Logger log = LoggerFactory.getLogger(RangeQuery.class);
 
     /**
      * Simple result cache for previously calculated hits.
Index: src/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
@@ -35,7 +36,7 @@
     /**
      * The logger instance for this class
      */
-    private static final Logger log = Logger.getLogger(QueryResultImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(QueryResultImpl.class);
 
     /**
      * The item manager of the session executing the query
Index: src/java/org/apache/jackrabbit/core/query/lucene/QueryImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/QueryImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/QueryImpl.java	(working copy)
@@ -37,7 +37,8 @@
 import org.apache.jackrabbit.core.query.TextsearchQueryNode;
 import org.apache.jackrabbit.core.security.AccessManager;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.lucene.search.Query;
 
 import javax.jcr.RepositoryException;
@@ -58,7 +59,7 @@
     /**
      * The logger instance for this class
      */
-    private static final Logger log = Logger.getLogger(QueryImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(QueryImpl.class);
 
     /**
      * Represents a query that selects all nodes. E.g. in XPath: //*
Index: src/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.query.lucene;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriter;
@@ -35,7 +36,7 @@
 class PersistentIndex extends AbstractIndex {
 
     /** The logger instance for this class */
-    private static final Logger log = Logger.getLogger(PersistentIndex.class);
+    private static final Logger log = LoggerFactory.getLogger(PersistentIndex.class);
 
     /** Name of the write lock file */
     private static final String WRITE_LOCK = IndexWriter.WRITE_LOCK_NAME;
Index: src/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.query.lucene;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.IndexReader;
@@ -46,7 +47,7 @@
 abstract class AbstractIndex {
 
     /** The logger instance for this class */
-    private static final Logger log = Logger.getLogger(AbstractIndex.class);
+    private static final Logger log = LoggerFactory.getLogger(AbstractIndex.class);
 
     /** PrintStream that pipes all calls to println(String) into log.info() */
     private static final LoggingPrintStream STREAM_LOGGER = new LoggingPrintStream();
Index: src/java/org/apache/jackrabbit/core/query/TextFilterService.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/TextFilterService.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/TextFilterService.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.query;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.jackrabbit.core.state.PropertyState;
 
 import javax.jcr.RepositoryException;
@@ -55,7 +56,7 @@
     /**
      * Logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(TextFilterService.class);
+    private static final Logger log = LoggerFactory.getLogger(TextFilterService.class);
 
     /**
      * List of all {@link TextFilter}s known to the system.
Index: src/java/org/apache/jackrabbit/core/query/sql/JCRSQLQueryBuilder.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/sql/JCRSQLQueryBuilder.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/sql/JCRSQLQueryBuilder.java	(working copy)
@@ -35,7 +35,8 @@
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.name.UnknownPrefixException;
 import org.apache.jackrabbit.util.ISO8601;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.query.InvalidQueryException;
 import java.text.SimpleDateFormat;
@@ -58,7 +59,7 @@
     /**
      * logger instance for this class
      */
-    private static final Logger log = Logger.getLogger(JCRSQLQueryBuilder.class);
+    private static final Logger log = LoggerFactory.getLogger(JCRSQLQueryBuilder.class);
 
     /**
      * DateFormat pattern for type
Index: src/java/org/apache/jackrabbit/core/query/PropertyTypeRegistry.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/PropertyTypeRegistry.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/query/PropertyTypeRegistry.java	(working copy)
@@ -22,7 +22,8 @@
 import org.apache.jackrabbit.core.nodetype.NodeTypeRegistryListener;
 import org.apache.jackrabbit.core.nodetype.PropDef;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
@@ -41,7 +42,7 @@
 public class PropertyTypeRegistry implements NodeTypeRegistryListener {
 
     /** The logger instance for this class */
-    private static final Logger log = Logger.getLogger(PropertyTypeRegistry.class);
+    private static final Logger log = LoggerFactory.getLogger(PropertyTypeRegistry.class);
 
     /** '*' denoting residual child item definition */
     protected static final QName ANY_NAME = new QName(Constants.NS_DEFAULT_URI, "*");
Index: src/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java
===================================================================
--- src/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.core.fs.FileSystemException;
 import org.apache.jackrabbit.core.fs.RandomAccessOutputStream;
 import org.apache.jackrabbit.util.LazyFileInputStream;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.FileFilter;
@@ -36,7 +37,7 @@
  */
 public class LocalFileSystem implements FileSystem {
 
-    private static Logger log = Logger.getLogger(LocalFileSystem.class);
+    private static Logger log = LoggerFactory.getLogger(LocalFileSystem.class);
 
     private File root;
 
Index: src/java/org/apache/jackrabbit/core/fs/local/HandleMonitor.java
===================================================================
--- src/java/org/apache/jackrabbit/core/fs/local/HandleMonitor.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/fs/local/HandleMonitor.java	(working copy)
@@ -17,7 +17,8 @@
 package org.apache.jackrabbit.core.fs.local;
 
 import org.apache.jackrabbit.util.LazyFileInputStream;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.FileDescriptor;
@@ -38,7 +39,7 @@
     /**
      * The default logger
      */
-    private static Logger log = Logger.getLogger(HandleMonitor.class);
+    private static Logger log = LoggerFactory.getLogger(HandleMonitor.class);
 
     /**
      * the map of open handles (key=File, value=Handle)
Index: src/java/org/apache/jackrabbit/core/ItemManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/ItemManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/ItemManager.java	(working copy)
@@ -37,7 +37,8 @@
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.ItemNotFoundException;
@@ -77,7 +78,7 @@
  */
 public class ItemManager implements ItemLifeCycleListener, Dumpable, Constants {
 
-    private static Logger log = Logger.getLogger(ItemManager.class);
+    private static Logger log = LoggerFactory.getLogger(ItemManager.class);
 
     private final NodeDefinition rootNodeDef;
     private final NodeId rootNodeId;
Index: src/java/org/apache/jackrabbit/core/value/BLOBFileValue.java
===================================================================
--- src/java/org/apache/jackrabbit/core/value/BLOBFileValue.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/value/BLOBFileValue.java	(working copy)
@@ -19,7 +19,8 @@
 import org.apache.jackrabbit.core.fs.FileSystemException;
 import org.apache.jackrabbit.core.fs.FileSystemResource;
 import org.apache.jackrabbit.util.ISO8601;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
@@ -49,7 +50,7 @@
     /**
      * The default logger
      */
-    private static Logger log = Logger.getLogger(BLOBFileValue.class);
+    private static Logger log = LoggerFactory.getLogger(BLOBFileValue.class);
 
     /**
      * the property type
Index: src/java/org/apache/jackrabbit/core/XASessionImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/XASessionImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/XASessionImpl.java	(working copy)
@@ -22,7 +22,8 @@
 import org.apache.jackrabbit.core.state.TransactionContext;
 import org.apache.jackrabbit.core.state.TransactionException;
 import org.apache.jackrabbit.core.state.TransactionListener;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.RepositoryException;
@@ -42,7 +43,7 @@
     /**
      * Logger instance
      */
-    private static final Logger log = Logger.getLogger(XASessionImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(XASessionImpl.class);
 
     /**
      * Global transactions
Index: src/java/org/apache/jackrabbit/core/state/ItemState.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/ItemState.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/ItemState.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.commons.collections.map.ReferenceMap;
 import org.apache.jackrabbit.core.ItemId;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.io.ObjectInputStream;
@@ -36,7 +37,7 @@
     /** Serialization UID of this class. */
     static final long serialVersionUID = -337199573967324199L;
 
-    private static Logger log = Logger.getLogger(ItemState.class);
+    private static Logger log = LoggerFactory.getLogger(ItemState.class);
 
     private static long LAST_MOD_COUNT = 1;
 
Index: src/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.jackrabbit.core.ItemId;
 import org.apache.jackrabbit.core.util.Dumpable;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Set;
 import java.util.Collections;
@@ -45,7 +46,7 @@
 public class ItemStateReferenceCache implements ItemStateCache, Dumpable {
 
     /** Logger instance */
-    private static Logger log = Logger.getLogger(LRUItemStateCache.class);
+    private static Logger log = LoggerFactory.getLogger(LRUItemStateCache.class);
 
     /**
      * primary cache storing weak references to <code>ItemState</code>
Index: src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java	(working copy)
@@ -22,7 +22,8 @@
 import org.apache.jackrabbit.core.WorkspaceImpl;
 import org.apache.jackrabbit.core.observation.ObservationManagerImpl;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import java.util.Iterator;
@@ -37,7 +38,7 @@
     /**
      * Logger instance
      */
-    private static Logger log = Logger.getLogger(LocalItemStateManager.class);
+    private static Logger log = LoggerFactory.getLogger(LocalItemStateManager.class);
 
     /**
      * cache of weak references to ItemState objects issued by this
Index: src/java/org/apache/jackrabbit/core/state/LRUItemStateCache.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/LRUItemStateCache.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/LRUItemStateCache.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.commons.collections.map.LRUMap;
 import org.apache.jackrabbit.core.ItemId;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -30,7 +31,7 @@
  */
 public class LRUItemStateCache implements ItemStateCache {
     /** Logger instance */
-    private static Logger log = Logger.getLogger(LRUItemStateCache.class);
+    private static Logger log = LoggerFactory.getLogger(LRUItemStateCache.class);
 
     /** default maximum size of this cache */
     public static final int DEFAULT_MAX_SIZE = 1000;
Index: src/java/org/apache/jackrabbit/core/state/TransactionalItemStateManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/TransactionalItemStateManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/TransactionalItemStateManager.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.jackrabbit.core.ItemId;
 import org.apache.jackrabbit.core.WorkspaceImpl;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Extension to <code>LocalItemStateManager</code> that remembers changes on
@@ -30,7 +31,7 @@
     /**
      * Logger instance
      */
-    private static Logger log = Logger.getLogger(TransactionalItemStateManager.class);
+    private static Logger log = LoggerFactory.getLogger(TransactionalItemStateManager.class);
 
     /**
      * Known attribute name
@@ -90,7 +91,7 @@
             try {
                 sharedStateMgr.checkTargetsExist(changeLog);
             } catch (ItemStateException e) {
-                log.error(e);
+                log.error(e.getMessage(), e);
                 changeLog.undo(sharedStateMgr);
                 throw new TransactionException("Unable to prepare transaction.", e);
             }
@@ -111,7 +112,7 @@
                 ((CommitLog) commitLog.get()).setChanges(changeLog);
                 super.update(changeLog);
             } catch (ItemStateException e) {
-                log.error(e);
+                log.error(e.getMessage(), e);
                 changeLog.undo(sharedStateMgr);
                 throw new TransactionException("Unable to commit transaction.", e);
             } finally {
Index: src/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java	(working copy)
@@ -30,7 +30,8 @@
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.core.virtual.VirtualItemStateProvider;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import javax.jcr.nodetype.ConstraintViolationException;
@@ -52,7 +53,7 @@
     /**
      * Logger instance
      */
-    private static Logger log = Logger.getLogger(SharedItemStateManager.class);
+    private static Logger log = LoggerFactory.getLogger(SharedItemStateManager.class);
 
     /**
      * cache of weak references to ItemState objects issued by this
Index: src/java/org/apache/jackrabbit/core/state/TransientItemStateManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/TransientItemStateManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/TransientItemStateManager.java	(working copy)
@@ -21,7 +21,8 @@
 import org.apache.jackrabbit.core.PropertyId;
 import org.apache.jackrabbit.core.util.Dumpable;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.PrintStream;
 import java.util.ArrayList;
@@ -33,7 +34,7 @@
  */
 class TransientItemStateManager implements ItemStateManager, Dumpable {
 
-    private static Logger log = Logger.getLogger(TransientItemStateManager.class);
+    private static Logger log = LoggerFactory.getLogger(TransientItemStateManager.class);
 
     /**
      * map of those states that have been removed transiently
Index: src/java/org/apache/jackrabbit/core/state/mem/InMemPersistenceManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/mem/InMemPersistenceManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/mem/InMemPersistenceManager.java	(working copy)
@@ -36,7 +36,8 @@
 import org.apache.jackrabbit.core.value.BLOBFileValue;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import java.io.BufferedInputStream;
@@ -71,7 +72,7 @@
 public class InMemPersistenceManager extends AbstractPersistenceManager
         implements BLOBStore {
 
-    private static Logger log = Logger.getLogger(InMemPersistenceManager.class);
+    private static Logger log = LoggerFactory.getLogger(InMemPersistenceManager.class);
 
     protected boolean initialized;
 
Index: src/java/org/apache/jackrabbit/core/state/xml/XMLPersistenceManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/xml/XMLPersistenceManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/xml/XMLPersistenceManager.java	(working copy)
@@ -39,7 +39,8 @@
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.util.Text;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import java.io.BufferedWriter;
@@ -64,7 +65,7 @@
  */
 public class XMLPersistenceManager extends AbstractPersistenceManager {
 
-    private static Logger log = Logger.getLogger(XMLPersistenceManager.class);
+    private static Logger log = LoggerFactory.getLogger(XMLPersistenceManager.class);
 
     /**
      * hexdigits for toString
@@ -156,7 +157,7 @@
         } catch (NoSuchAlgorithmException nsae) {
             // should never get here as MD5 should always be available in the JRE
             String msg = "MD5 not available";
-            log.fatal(msg, nsae);
+            log.error(msg, nsae);
             throw new InternalError(msg + nsae);
         }
         return buildNodeFolderPath(parentUUID) + "/" + fileName;
Index: src/java/org/apache/jackrabbit/core/state/NodeReferences.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/NodeReferences.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/NodeReferences.java	(working copy)
@@ -17,7 +17,8 @@
 package org.apache.jackrabbit.core.state;
 
 import org.apache.jackrabbit.core.PropertyId;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -38,7 +39,7 @@
     /**
      * Logger instance
      */
-    private static Logger log = Logger.getLogger(NodeReferences.class);
+    private static Logger log = LoggerFactory.getLogger(NodeReferences.class);
 
     /**
      * id of the target node
Index: src/java/org/apache/jackrabbit/core/state/obj/ObjectPersistenceManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/obj/ObjectPersistenceManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/obj/ObjectPersistenceManager.java	(working copy)
@@ -37,7 +37,8 @@
 import org.apache.jackrabbit.core.value.BLOBFileValue;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import java.io.BufferedInputStream;
@@ -64,7 +65,7 @@
 public class ObjectPersistenceManager extends AbstractPersistenceManager
         implements BLOBStore {
 
-    private static Logger log = Logger.getLogger(ObjectPersistenceManager.class);
+    private static Logger log = LoggerFactory.getLogger(ObjectPersistenceManager.class);
 
     /**
      * encoding used for serializing String values
@@ -128,7 +129,7 @@
         } catch (NoSuchAlgorithmException nsae) {
             // should never get here as MD5 should always be available in the JRE
             String msg = "MD5 not available: ";
-            log.fatal(msg, nsae);
+            log.error(msg, nsae);
             throw new InternalError(msg + nsae);
         }
         return buildNodeFolderPath(parentUUID) + FileSystem.SEPARATOR + fileName;
Index: src/java/org/apache/jackrabbit/core/state/ItemStateMap.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/ItemStateMap.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/ItemStateMap.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.jackrabbit.core.ItemId;
 import org.apache.jackrabbit.core.util.Dumpable;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.PrintStream;
 import java.util.Collection;
@@ -34,7 +35,7 @@
 public class ItemStateMap implements ItemStateStore, Dumpable {
 
     /** Logger instance */
-    private static Logger log = Logger.getLogger(ItemStateMap.class);
+    private static Logger log = LoggerFactory.getLogger(ItemStateMap.class);
 
     /**
      * the map backing this <code>ItemStateStore</code> implementation
Index: src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java	(working copy)
@@ -27,7 +27,8 @@
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.InvalidItemStateException;
 import javax.jcr.ItemNotFoundException;
@@ -45,7 +46,7 @@
 public class SessionItemStateManager
         implements UpdatableItemStateManager, Dumpable {
 
-    private static Logger log = Logger.getLogger(SessionItemStateManager.class);
+    private static Logger log = LoggerFactory.getLogger(SessionItemStateManager.class);
 
     /**
      * State manager that allows updates
Index: src/java/org/apache/jackrabbit/core/RepositoryImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/RepositoryImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/RepositoryImpl.java	(working copy)
@@ -42,7 +42,8 @@
 import org.apache.jackrabbit.core.version.VersionManager;
 import org.apache.jackrabbit.core.version.VersionManagerImpl;
 import org.apache.jackrabbit.uuid.UUID;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.Credentials;
@@ -75,7 +76,7 @@
 public class RepositoryImpl implements Repository, SessionListener,
         EventListener, Constants {
 
-    private static Logger log = Logger.getLogger(RepositoryImpl.class);
+    private static Logger log = LoggerFactory.getLogger(RepositoryImpl.class);
 
     /**
      * repository home lock
Index: src/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java	(working copy)
@@ -43,7 +43,8 @@
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.uuid.UUID;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.NodeIterator;
 import javax.jcr.PropertyIterator;
@@ -68,7 +69,7 @@
     /**
      * the default logger
      */
-    private static Logger log = Logger.getLogger(VersionManager.class);
+    private static Logger log = LoggerFactory.getLogger(VersionManager.class);
 
     /**
      * The root node UUID for the version storage
Index: src/java/org/apache/jackrabbit/core/version/VersionImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/version/VersionImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/version/VersionImpl.java	(working copy)
@@ -22,7 +22,8 @@
 import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.core.NodeImpl;
 import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.Item;
 import javax.jcr.RepositoryException;
@@ -42,7 +43,7 @@
     /**
      * the default logger.
      */
-    private static Logger log = Logger.getLogger(VersionImpl.class);
+    private static Logger log = LoggerFactory.getLogger(VersionImpl.class);
 
     /**
      * the internal version
Index: src/java/org/apache/jackrabbit/core/version/VersionItemStateProvider.java
===================================================================
--- src/java/org/apache/jackrabbit/core/version/VersionItemStateProvider.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/version/VersionItemStateProvider.java	(working copy)
@@ -33,7 +33,8 @@
 import org.apache.jackrabbit.core.virtual.VirtualPropertyState;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.uuid.UUID;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 
@@ -46,7 +47,7 @@
     /**
      * the default logger
      */
-    private static Logger log = Logger.getLogger(VersionItemStateProvider.class);
+    private static Logger log = LoggerFactory.getLogger(VersionItemStateProvider.class);
 
     /**
      * The version manager
Index: src/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java	(working copy)
@@ -24,7 +24,8 @@
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.uuid.UUID;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import javax.jcr.ReferentialIntegrityException;
@@ -46,7 +47,7 @@
     /**
      * default logger
      */
-    private static Logger log = Logger.getLogger(InternalVersionHistory.class);
+    private static Logger log = LoggerFactory.getLogger(InternalVersionHistory.class);
 
     /**
      * the cache of the version labels
Index: src/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java	(working copy)
@@ -26,7 +26,8 @@
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.name.UnknownPrefixException;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.Item;
 import javax.jcr.RepositoryException;
@@ -47,7 +48,7 @@
     /**
      * the default logger.
      */
-    private static Logger log = Logger.getLogger(VersionHistoryImpl.class);
+    private static Logger log = LoggerFactory.getLogger(VersionHistoryImpl.class);
 
     /**
      * the internal version history
Index: src/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java	(working copy)
@@ -23,7 +23,8 @@
 import org.apache.jackrabbit.name.UnknownPrefixException;
 import org.apache.jackrabbit.util.IteratorHelper;
 import org.apache.jackrabbit.core.util.Dumpable;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
@@ -46,7 +47,7 @@
     /**
      * Logger instance for this class
      */
-    private static Logger log = Logger.getLogger(NodeTypeManagerImpl.class);
+    private static Logger log = LoggerFactory.getLogger(NodeTypeManagerImpl.class);
 
     /**
      * The wrapped node type registry.
Index: src/java/org/apache/jackrabbit/core/nodetype/virtual/VirtualNodeTypeStateManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/virtual/VirtualNodeTypeStateManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/virtual/VirtualNodeTypeStateManager.java	(working copy)
@@ -27,7 +27,8 @@
 import org.apache.jackrabbit.core.observation.EventState;
 import org.apache.jackrabbit.core.virtual.VirtualItemStateProvider;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.NodeIterator;
 import javax.jcr.PropertyIterator;
@@ -45,7 +46,7 @@
     /**
      * the default logger
      */
-    private static Logger log = Logger.getLogger(VirtualNodeTypeStateManager.class);
+    private static Logger log = LoggerFactory.getLogger(VirtualNodeTypeStateManager.class);
 
 
     /**
Index: src/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
@@ -39,7 +40,7 @@
  * Instances of <code>EffectiveNodeType</code> are immutable.
  */
 public class EffectiveNodeType implements Cloneable {
-    private static Logger log = Logger.getLogger(EffectiveNodeType.class);
+    private static Logger log = LoggerFactory.getLogger(EffectiveNodeType.class);
 
     // node type registry
     private final NodeTypeRegistry ntReg;
Index: src/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java	(working copy)
@@ -23,7 +23,8 @@
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.name.UnknownPrefixException;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
@@ -41,7 +42,7 @@
  */
 public class NodeTypeImpl implements NodeType {
 
-    private static Logger log = Logger.getLogger(NodeTypeImpl.class);
+    private static Logger log = LoggerFactory.getLogger(NodeTypeImpl.class);
 
     private final NodeTypeDef ntd;
     private final EffectiveNodeType ent;
@@ -71,7 +72,7 @@
             this.ntd = (NodeTypeDef) ntd.clone();
         } catch (CloneNotSupportedException e) {
             // should never get here
-            log.fatal("internal error", e);
+            log.error("internal error", e);
             throw new InternalError(e.getMessage());
         }
     }
@@ -149,7 +150,7 @@
             return (NodeTypeDef) ntd.clone();
         } catch (CloneNotSupportedException e) {
             // should never get here
-            log.fatal("internal error", e);
+            log.error("internal error", e);
             throw new InternalError(e.getMessage());
         }
     }
Index: src/java/org/apache/jackrabbit/core/nodetype/PropertyDefinitionImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/PropertyDefinitionImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/PropertyDefinitionImpl.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
@@ -36,7 +37,7 @@
     /**
      * Logger instance for this class
      */
-    private static Logger log = Logger.getLogger(PropertyDefinitionImpl.class);
+    private static Logger log = LoggerFactory.getLogger(PropertyDefinitionImpl.class);
 
     /**
      * Package private constructor
Index: src/java/org/apache/jackrabbit/core/nodetype/NodeDefinitionImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/NodeDefinitionImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/NodeDefinitionImpl.java	(working copy)
@@ -19,7 +19,8 @@
 import org.apache.jackrabbit.Constants;
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.nodetype.NoSuchNodeTypeException;
 import javax.jcr.nodetype.NodeDefinition;
@@ -36,7 +37,7 @@
     /**
      * Logger instance for this class
      */
-    private static Logger log = Logger.getLogger(NodeDefinitionImpl.class);
+    private static Logger log = LoggerFactory.getLogger(NodeDefinitionImpl.class);
 
     /**
      * Package private constructor.
Index: src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java	(working copy)
@@ -24,7 +24,8 @@
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.core.util.Dumpable;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.NamespaceRegistry;
 import javax.jcr.PropertyType;
@@ -52,7 +53,7 @@
  */
 public class NodeTypeRegistry implements Dumpable, Constants {
 
-    private static Logger log = Logger.getLogger(NodeTypeRegistry.class);
+    private static Logger log = LoggerFactory.getLogger(NodeTypeRegistry.class);
 
     private static final String BUILTIN_NODETYPES_RESOURCE_PATH =
             "org/apache/jackrabbit/core/nodetype/builtin_nodetypes.xml";
@@ -285,7 +286,7 @@
             ntd = (NodeTypeDef) ntd.clone();
         } catch (CloneNotSupportedException e) {
             // should never get here
-            log.fatal("internal error", e);
+            log.error("internal error", e);
             throw new InternalError(e.getMessage());
         }
         registeredNTDefs.put(name, ntd);
@@ -1312,7 +1313,7 @@
             return (NodeTypeDef) def.clone();
         } catch (CloneNotSupportedException e) {
             // should never get here
-            log.fatal("internal error", e);
+            log.error("internal error", e);
             throw new InternalError(e.getMessage());
         }
     }
Index: src/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java	(working copy)
@@ -26,7 +26,8 @@
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.name.UnknownPrefixException;
 import org.apache.jackrabbit.value.DateValue;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
@@ -44,7 +45,7 @@
  */
 public abstract class ValueConstraint {
 
-    protected static Logger log = Logger.getLogger(ValueConstraint.class);
+    protected static Logger log = LoggerFactory.getLogger(ValueConstraint.class);
 
     public static final ValueConstraint[] EMPTY_ARRAY = new ValueConstraint[0];
 
Index: src/java/org/apache/jackrabbit/core/nodetype/ItemDefinitionImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/nodetype/ItemDefinitionImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/nodetype/ItemDefinitionImpl.java	(working copy)
@@ -19,7 +19,8 @@
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.nodetype.ItemDefinition;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
@@ -36,7 +37,7 @@
     /**
      * Logger instance for this class
      */
-    private static Logger log = Logger.getLogger(ItemDefinitionImpl.class);
+    private static Logger log = LoggerFactory.getLogger(ItemDefinitionImpl.class);
 
     /**
      * Literal for 'any name'.
Index: src/java/org/apache/jackrabbit/core/LazyItemIterator.java
===================================================================
--- src/java/org/apache/jackrabbit/core/LazyItemIterator.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/LazyItemIterator.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.Item;
 import javax.jcr.Node;
@@ -45,7 +46,7 @@
 class LazyItemIterator implements NodeIterator, PropertyIterator {
 
     /** Logger instance for this class */
-    private static Logger log = Logger.getLogger(LazyItemIterator.class);
+    private static Logger log = LoggerFactory.getLogger(LazyItemIterator.class);
 
     /** the item manager that is used to lazily fetch the items */
     private final ItemManager itemMgr;
Index: src/java/org/apache/jackrabbit/core/observation/EventImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/observation/EventImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/observation/EventImpl.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.name.MalformedPathException;
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.Path;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.observation.Event;
@@ -33,7 +34,7 @@
     /**
      * Logger instance for this class
      */
-    private static final Logger log = Logger.getLogger(EventImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(EventImpl.class);
 
     /**
      * The session of the {@link javax.jcr.observation.EventListener} this
Index: src/java/org/apache/jackrabbit/core/observation/EventFilter.java
===================================================================
--- src/java/org/apache/jackrabbit/core/observation/EventFilter.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/observation/EventFilter.java	(working copy)
@@ -21,7 +21,8 @@
 import org.apache.jackrabbit.core.nodetype.NodeTypeImpl;
 import org.apache.jackrabbit.name.MalformedPathException;
 import org.apache.jackrabbit.name.Path;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.observation.Event;
@@ -35,7 +36,7 @@
     /**
      * Logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(EventFilter.class);
+    private static final Logger log = LoggerFactory.getLogger(EventFilter.class);
 
     static final EventFilter BLOCK_ALL = new BlockAllFilter();
 
Index: src/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java	(working copy)
@@ -19,7 +19,8 @@
 import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
 import org.apache.jackrabbit.name.MalformedPathException;
 import org.apache.jackrabbit.name.Path;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.observation.EventListener;
@@ -36,7 +37,7 @@
     /**
      * The logger instance of this class
      */
-    private static final Logger log = Logger.getLogger(ObservationManagerImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(ObservationManagerImpl.class);
 
     /**
      * The <code>Session</code> this <code>ObservationManager</code>
Index: src/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java
===================================================================
--- src/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.observation;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.observation.Event;
@@ -33,7 +34,7 @@
      * Logger instance for this class
      */
     private static final Logger log
-            = Logger.getLogger(FilteredEventIterator.class);
+            = LoggerFactory.getLogger(FilteredEventIterator.class);
 
     /**
      * The actual {@link EventState}s fired by the workspace (unfiltered)
Index: src/java/org/apache/jackrabbit/core/observation/EventConsumer.java
===================================================================
--- src/java/org/apache/jackrabbit/core/observation/EventConsumer.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/observation/EventConsumer.java	(working copy)
@@ -22,7 +22,8 @@
 import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.core.state.ItemState;
 import org.apache.jackrabbit.core.security.AccessManager;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -49,7 +50,7 @@
     /**
      * The default Logger instance for this class.
      */
-    private static final Logger log = Logger.getLogger(EventConsumer.class);
+    private static final Logger log = LoggerFactory.getLogger(EventConsumer.class);
 
     /**
      * The <code>Session</code> associated with this <code>EventConsumer</code>.
Index: src/java/org/apache/jackrabbit/core/observation/EventStateCollection.java
===================================================================
--- src/java/org/apache/jackrabbit/core/observation/EventStateCollection.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/observation/EventStateCollection.java	(working copy)
@@ -30,7 +30,8 @@
 import org.apache.jackrabbit.name.MalformedPathException;
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PathNotFoundException;
 import javax.jcr.RepositoryException;
@@ -61,7 +62,7 @@
     /**
      * Logger instance for this class
      */
-    private static Logger log = Logger.getLogger(EventStateCollection.class);
+    private static Logger log = LoggerFactory.getLogger(EventStateCollection.class);
 
     /**
      * List of events
Index: src/java/org/apache/jackrabbit/core/observation/ObservationManagerFactory.java
===================================================================
--- src/java/org/apache/jackrabbit/core/observation/ObservationManagerFactory.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/observation/ObservationManagerFactory.java	(working copy)
@@ -22,7 +22,8 @@
 import org.apache.jackrabbit.core.ItemManager;
 import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.core.state.ChangeLog;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Collections;
 import java.util.HashSet;
@@ -41,7 +42,7 @@
      * Logger instance for this class
      */
     private static final Logger log
-            = Logger.getLogger(ObservationManagerFactory.class);
+            = LoggerFactory.getLogger(ObservationManagerFactory.class);
 
     /**
      * Dummy DispatchAction indicating the notification thread to end
Index: src/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java	(working copy)
@@ -23,7 +23,8 @@
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Iterator;
 
@@ -36,7 +37,7 @@
  */
 public class ZombieHierarchyManager extends HierarchyManagerImpl {
 
-    private static Logger log = Logger.getLogger(ZombieHierarchyManager.class);
+    private static Logger log = LoggerFactory.getLogger(ZombieHierarchyManager.class);
 
     protected ItemStateManager attic;
 
Index: src/java/org/apache/jackrabbit/core/xml/TargetImportHandler.java
===================================================================
--- src/java/org/apache/jackrabbit/core/xml/TargetImportHandler.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/xml/TargetImportHandler.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.jackrabbit.Constants;
 import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.helpers.DefaultHandler;
 
 import java.io.File;
@@ -36,7 +37,7 @@
  */
 abstract class TargetImportHandler extends DefaultHandler implements Constants {
 
-    private static Logger log = Logger.getLogger(TargetImportHandler.class);
+    private static Logger log = LoggerFactory.getLogger(TargetImportHandler.class);
 
     protected final Importer importer;
     protected final NamespaceResolver nsContext;
Index: src/java/org/apache/jackrabbit/core/xml/WorkspaceImporter.java
===================================================================
--- src/java/org/apache/jackrabbit/core/xml/WorkspaceImporter.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/xml/WorkspaceImporter.java	(working copy)
@@ -39,7 +39,8 @@
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.util.Base64;
 import org.apache.jackrabbit.uuid.UUID;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.ImportUUIDBehavior;
 import javax.jcr.ItemExistsException;
@@ -63,7 +64,7 @@
  */
 public class WorkspaceImporter implements Importer, Constants {
 
-    private static Logger log = Logger.getLogger(WorkspaceImporter.class);
+    private static Logger log = LoggerFactory.getLogger(WorkspaceImporter.class);
 
     private final NodeState importTarget;
     private final WorkspaceImpl wsp;
Index: src/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java
===================================================================
--- src/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.core.util.ISO9075;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.value.ValueHelper;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.AttributesImpl;
@@ -40,7 +41,7 @@
  */
 public class DocViewSAXEventGenerator extends AbstractSAXEventGenerator {
 
-    private static Logger log = Logger.getLogger(DocViewSAXEventGenerator.class);
+    private static Logger log = LoggerFactory.getLogger(DocViewSAXEventGenerator.class);
 
     public static final String CDATA_TYPE = "CDATA";
 
Index: src/java/org/apache/jackrabbit/core/xml/SessionImporter.java
===================================================================
--- src/java/org/apache/jackrabbit/core/xml/SessionImporter.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/xml/SessionImporter.java	(working copy)
@@ -27,7 +27,8 @@
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.value.ReferenceValue;
 import org.apache.jackrabbit.value.ValueHelper;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.ImportUUIDBehavior;
 import javax.jcr.ItemExistsException;
@@ -50,7 +51,7 @@
  */
 public class SessionImporter implements Importer {
 
-    private static Logger log = Logger.getLogger(SessionImporter.class);
+    private static Logger log = LoggerFactory.getLogger(SessionImporter.class);
 
     private final SessionImpl session;
     private final NodeImpl importTargetNode;
Index: src/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java
===================================================================
--- src/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.Constants;
 import org.apache.jackrabbit.name.SessionNamespaceResolver;
 import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 
@@ -49,7 +50,7 @@
  */
 abstract class AbstractSAXEventGenerator implements Constants {
 
-    private static Logger log = Logger.getLogger(AbstractSAXEventGenerator.class);
+    private static Logger log = LoggerFactory.getLogger(AbstractSAXEventGenerator.class);
 
     /**
      * the session to be used for resolving namespace mappings
Index: src/java/org/apache/jackrabbit/core/xml/ImportHandler.java
===================================================================
--- src/java/org/apache/jackrabbit/core/xml/ImportHandler.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/xml/ImportHandler.java	(working copy)
@@ -19,7 +19,8 @@
 import org.apache.jackrabbit.Constants;
 import org.apache.jackrabbit.core.NamespaceRegistryImpl;
 import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.Locator;
@@ -49,7 +50,7 @@
  */
 public class ImportHandler extends DefaultHandler {
 
-    private static Logger log = Logger.getLogger(ImportHandler.class);
+    private static Logger log = LoggerFactory.getLogger(ImportHandler.class);
 
     protected final Importer importer;
     protected final NamespaceRegistryImpl nsReg;
Index: src/java/org/apache/jackrabbit/core/xml/DocViewImportHandler.java
===================================================================
--- src/java/org/apache/jackrabbit/core/xml/DocViewImportHandler.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/xml/DocViewImportHandler.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.core.util.ISO9075;
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
@@ -36,7 +37,7 @@
  */
 class DocViewImportHandler extends TargetImportHandler {
 
-    private static Logger log = Logger.getLogger(DocViewImportHandler.class);
+    private static Logger log = LoggerFactory.getLogger(DocViewImportHandler.class);
 
     /**
      * stack of NodeInfo instances; an instance is pushed onto the stack
Index: src/java/org/apache/jackrabbit/core/WorkspaceImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/WorkspaceImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/WorkspaceImpl.java	(working copy)
@@ -33,7 +33,8 @@
 import org.apache.jackrabbit.core.xml.WorkspaceImporter;
 import org.apache.jackrabbit.name.MalformedPathException;
 import org.apache.jackrabbit.name.Path;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -70,7 +71,7 @@
  */
 public class WorkspaceImpl implements Workspace, Constants {
 
-    private static Logger log = Logger.getLogger(WorkspaceImpl.class);
+    private static Logger log = LoggerFactory.getLogger(WorkspaceImpl.class);
 
     /**
      * The configuration of this <code>Workspace</code>
Index: src/java/org/apache/jackrabbit/core/ItemImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/ItemImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/ItemImpl.java	(working copy)
@@ -41,7 +41,8 @@
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
 import org.apache.jackrabbit.uuid.UUID;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.InvalidItemStateException;
@@ -77,7 +78,7 @@
  */
 public abstract class ItemImpl implements Item, ItemStateListener, Constants {
 
-    private static Logger log = Logger.getLogger(ItemImpl.class);
+    private static Logger log = LoggerFactory.getLogger(ItemImpl.class);
 
     protected static final int STATUS_NORMAL = 0;
     protected static final int STATUS_MODIFIED = 1;
Index: src/java/org/apache/jackrabbit/core/CachingHierarchyManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/CachingHierarchyManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/CachingHierarchyManager.java	(working copy)
@@ -26,7 +26,8 @@
 import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.PathNotFoundException;
@@ -51,7 +52,7 @@
     /**
      * Logger instance
      */
-    private static Logger log = Logger.getLogger(CachingHierarchyManager.class);
+    private static Logger log = LoggerFactory.getLogger(CachingHierarchyManager.class);
 
     /**
      * Mapping of paths to children in the path map
Index: src/java/org/apache/jackrabbit/core/security/SimpleAccessManager.java
===================================================================
--- src/java/org/apache/jackrabbit/core/security/SimpleAccessManager.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/security/SimpleAccessManager.java	(working copy)
@@ -18,7 +18,8 @@
 
 import org.apache.jackrabbit.core.HierarchyManager;
 import org.apache.jackrabbit.core.ItemId;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.ItemNotFoundException;
@@ -31,7 +32,7 @@
  */
 public class SimpleAccessManager implements AccessManager {
 
-    private static Logger log = Logger.getLogger(SimpleAccessManager.class);
+    private static Logger log = LoggerFactory.getLogger(SimpleAccessManager.class);
 
     /**
      * Subject whose access rights this AccessManager should reflect
Index: src/java/org/apache/jackrabbit/core/security/SimpleLoginModule.java
===================================================================
--- src/java/org/apache/jackrabbit/core/security/SimpleLoginModule.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/security/SimpleLoginModule.java	(working copy)
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.security;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.Credentials;
 import javax.jcr.SimpleCredentials;
@@ -36,7 +37,7 @@
  */
 public class SimpleLoginModule implements LoginModule {
 
-    private static Logger log = Logger.getLogger(SimpleLoginModule.class);
+    private static Logger log = LoggerFactory.getLogger(SimpleLoginModule.class);
 
     /**
      * Name of the anonymous user id option in the LoginModule configuration
Index: src/java/org/apache/jackrabbit/core/SystemSession.java
===================================================================
--- src/java/org/apache/jackrabbit/core/SystemSession.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/SystemSession.java	(working copy)
@@ -20,7 +20,8 @@
 import org.apache.jackrabbit.core.security.AMContext;
 import org.apache.jackrabbit.core.security.AccessManager;
 import org.apache.jackrabbit.core.security.SystemPrincipal;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.ItemNotFoundException;
@@ -36,7 +37,7 @@
  */
 class SystemSession extends SessionImpl {
 
-    private static Logger log = Logger.getLogger(SystemSession.class);
+    private static Logger log = LoggerFactory.getLogger(SystemSession.class);
 
     /**
      * Package private factory method
Index: src/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java
===================================================================
--- src/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java	(revision 292228)
+++ src/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java	(working copy)
@@ -28,7 +28,8 @@
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
 import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.PathNotFoundException;
@@ -39,7 +40,7 @@
  */
 public class HierarchyManagerImpl implements HierarchyManager {
 
-    private static Logger log = Logger.getLogger(HierarchyManagerImpl.class);
+    private static Logger log = LoggerFactory.getLogger(HierarchyManagerImpl.class);
 
     protected final NodeId rootNodeId;
     protected final ItemStateManager provider;
