diff --git a/pom.xml b/pom.xml
index 0e312b2..1ff381a 100755
--- a/pom.xml
+++ b/pom.xml
@@ -104,18 +104,16 @@
     <java.version>1.8</java.version>
     <!-- Dependencies version -->
     <fortress.realm.version>2.0.6</fortress.realm.version>
-    <cxf.version>3.3.6</cxf.version>
+    <cxf.version>3.4.4</cxf.version>
     <httpclient.version>3.1</httpclient.version>
     <java.version>1.8</java.version>
     <javadoc.version>2.9.1</javadoc.version>
-    <junit.version>4.12</junit.version>
-    <log4j.version>1.2.17</log4j.version>
+    <junit.version>4.13.2</junit.version>
+    <version.log4j>2.14.1</version.log4j>
     <servlet-api.version>2.5.0</servlet-api.version>
-    <slf4j.log4j12.version>1.7.21</slf4j.log4j12.version>
     <jackson-jaxrs.version>2.10.1</jackson-jaxrs.version>
     <version.jaxb.core>2.3.0.1</version.jaxb.core>
     <version.jaxb.impl>2.3.2</version.jaxb.impl>
-
     <!--  Other properties -->
     <base.dir>.</base.dir>
     <src.java.dir>${base.dir}/src/main/java</src.java.dir>
@@ -143,34 +141,34 @@
     </dependency>
 
     <dependency>
-        <groupId>com.fasterxml.jackson.jaxrs</groupId>
-        <artifactId>jackson-jaxrs-json-provider</artifactId>
-        <version>${jackson-jaxrs.version}</version>
+      <groupId>com.fasterxml.jackson.jaxrs</groupId>
+      <artifactId>jackson-jaxrs-json-provider</artifactId>
+      <version>${jackson-jaxrs.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-core</artifactId>
-      <version>5.2.6.RELEASE</version>
+      <version>5.3.8</version>
     </dependency>
-    
+
     <dependency>
       <groupId>org.springframework.security</groupId>
       <artifactId>spring-security-web</artifactId>
-      <version>5.3.2.RELEASE</version>
+      <version>5.5.1</version>
     </dependency>
 
     <!-- Logging Dependencies -->
     <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <version>${log4j.version}</version>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <version>${version.log4j}</version>
     </dependency>
 
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-log4j12</artifactId>
-      <version>${slf4j.log4j12.version}</version>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <version>${version.log4j}</version>
     </dependency>
 
     <!-- Test Dependencies -->
@@ -246,6 +244,17 @@
         <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-plugin</artifactId>
         <configuration>
+          <licenses>
+            <!-- TODO (low prio): Remove this simple workaround when Apache Rat 0.14 has been released. -->
+            <!-- See also: https://issues.apache.org/jira/browse/RAT-212 -->
+            <!-- and       https://issues.apache.org/jira/browse/LEGAL-265 -->
+            <license implementation="org.apache.rat.analysis.license.ApacheSoftwareLicense20">
+              <notes>Also allow the license url to be https.</notes>
+              <patterns>
+                <pattern>https://www.apache.org/licenses/LICENSE-2.0</pattern>
+              </patterns>
+            </license>
+          </licenses>
           <excludeSubProjects>false</excludeSubProjects>
           <excludes>
             <!-- MAVEN_DEFAULT_EXCLUDES -->
@@ -397,7 +406,6 @@
                   <sysproperty key="tenant" value="${tenant}" />
                   <arg value="-buildfile" />
                   <arg file="./${load.file}" />
-<!--                  <arg file="./src/main/resources/FortressRestServerPolicy.xml" />-->
                 </java>
               </target>
             </configuration>
@@ -434,23 +442,23 @@
   <!-- OWASP Dependency Vulnerability Scanner Profile -->
   <profiles>
 
-  <profile>
-    <id>owasp</id>
-    <build>
-      <plugins>
-        <plugin>
-          <groupId>org.owasp</groupId>
-          <artifactId>dependency-check-maven</artifactId>
-          <executions>
-            <execution>
-              <goals>
-                <goal>check</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
-    </build>
-  </profile>
-</profiles>
+    <profile>
+      <id>owasp</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.owasp</groupId>
+            <artifactId>dependency-check-maven</artifactId>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>check</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
 </project>
diff --git a/src/main/java/org/apache/directory/fortress/rest/AbstractMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/AbstractMgrImpl.java
index b0361b6..ff734c9 100644
--- a/src/main/java/org/apache/directory/fortress/rest/AbstractMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/AbstractMgrImpl.java
@@ -19,7 +19,8 @@
  */
 package org.apache.directory.fortress.rest;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.SecurityException;
 import org.apache.directory.fortress.core.model.FortResponse;
diff --git a/src/main/java/org/apache/directory/fortress/rest/AccessMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/AccessMgrImpl.java
index b451741..d64239e 100644
--- a/src/main/java/org/apache/directory/fortress/rest/AccessMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/AccessMgrImpl.java
@@ -23,11 +23,9 @@
 import org.apache.directory.fortress.core.AccessMgrFactory;
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.SecurityException;
-import org.apache.directory.fortress.core.ant.RoleConstraintAnt;
 import org.apache.directory.fortress.core.model.*;
-import org.apache.log4j.Logger;
-
-import java.util.ArrayList;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.util.List;
 import java.util.Set;
 
@@ -39,8 +37,8 @@
 class AccessMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger LOG = Logger.getLogger( AccessMgrImpl.class.getName() );
-    
+    private static final Logger LOG = LoggerFactory.getLogger( AccessMgrImpl.class.getName() );
+
     /** A flag for trusted sessions */
     private static final boolean TRUSTED = true;
     
@@ -381,4 +379,4 @@
         
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/AdminMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/AdminMgrImpl.java
index 25a6078..9262997 100644
--- a/src/main/java/org/apache/directory/fortress/rest/AdminMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/AdminMgrImpl.java
@@ -22,7 +22,9 @@
 import org.apache.directory.fortress.core.*;
 import org.apache.directory.fortress.core.SecurityException;
 import org.apache.directory.fortress.core.model.*;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 
 /**
  * Utility for Fortress Rest Server.  This class is thread safe.
@@ -32,8 +34,7 @@
 class AdminMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger log = Logger.getLogger( AdminMgrImpl.class.getName() );
-
+    private static final Logger LOG = LoggerFactory.getLogger( AdminMgrImpl.class.getName() );
     
     /* No qualifier */ FortResponse addUser( FortRequest request )
     {
@@ -49,7 +50,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -70,7 +71,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -91,7 +92,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -112,7 +113,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -133,7 +134,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -154,7 +155,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -175,7 +176,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -196,7 +197,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -217,7 +218,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -238,7 +239,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -259,7 +260,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -280,7 +281,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -301,7 +302,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -322,7 +323,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -343,7 +344,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -364,7 +365,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -385,7 +386,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -406,7 +407,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -427,7 +428,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -551,7 +552,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -578,7 +579,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -606,7 +607,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -634,7 +635,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -656,7 +657,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -677,7 +678,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -698,7 +699,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -719,7 +720,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -740,7 +741,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -761,7 +762,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -783,7 +784,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -805,7 +806,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -826,7 +827,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -847,7 +848,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -868,7 +869,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -889,7 +890,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -911,7 +912,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -933,7 +934,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -954,7 +955,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -975,7 +976,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -997,7 +998,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -1018,7 +1019,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -1039,7 +1040,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -1060,7 +1061,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         return response;
     }
@@ -1080,7 +1081,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         return response;
     }
@@ -1101,7 +1102,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -1123,7 +1124,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -1144,7 +1145,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -1164,7 +1165,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -1184,9 +1185,9 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/AuditMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/AuditMgrImpl.java
index 4e0ea07..c36984c 100644
--- a/src/main/java/org/apache/directory/fortress/rest/AuditMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/AuditMgrImpl.java
@@ -28,8 +28,8 @@
 import org.apache.directory.fortress.core.model.UserAudit;
 import org.apache.directory.fortress.core.model.FortRequest;
 import org.apache.directory.fortress.core.model.FortResponse;
-import org.apache.log4j.Logger;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.util.List;
 
 /**
@@ -40,7 +40,7 @@
 class AuditMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger log = Logger.getLogger( AuditMgrImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( AuditMgrImpl.class.getName() );
 
     /**
      * ************************************************************************************************************************************
@@ -62,7 +62,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -83,7 +83,7 @@
         }
         catch (SecurityException se)
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -104,7 +104,7 @@
         }
         catch (SecurityException se)
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -125,7 +125,7 @@
         }
         catch (SecurityException se)
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -146,7 +146,7 @@
         }
         catch (SecurityException se)
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -167,9 +167,9 @@
         }
         catch (SecurityException se)
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/ConfigMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/ConfigMgrImpl.java
index b3c6ec9..f180e06 100644
--- a/src/main/java/org/apache/directory/fortress/rest/ConfigMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/ConfigMgrImpl.java
@@ -27,8 +27,8 @@
 import org.apache.directory.fortress.core.model.FortResponse;
 import org.apache.directory.fortress.core.rest.RestUtils;
 import org.apache.directory.fortress.core.SecurityException;
-import org.apache.log4j.Logger;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.util.Properties;
 
 /**
@@ -38,7 +38,7 @@
  */
 class ConfigMgrImpl extends AbstractMgrImpl
 {
-    private static final Logger log = Logger.getLogger( ConfigMgrImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( ConfigMgrImpl.class.getName() );
 
     /**
      *
@@ -60,7 +60,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -87,7 +87,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -119,7 +119,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -145,9 +145,9 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/DelegatedAccessMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/DelegatedAccessMgrImpl.java
index 010064b..bcdb938 100644
--- a/src/main/java/org/apache/directory/fortress/rest/DelegatedAccessMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/DelegatedAccessMgrImpl.java
@@ -31,8 +31,8 @@
 import org.apache.directory.fortress.core.model.UserRole;
 import org.apache.directory.fortress.core.model.FortRequest;
 import org.apache.directory.fortress.core.model.FortResponse;
-import org.apache.log4j.Logger;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.util.List;
 import java.util.Set;
 
@@ -44,7 +44,7 @@
 class DelegatedAccessMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger LOG = Logger.getLogger( DelegatedAccessMgrImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( DelegatedAccessMgrImpl.class.getName() );
 
     /**
      * ************************************************************************************************************************************
@@ -264,4 +264,4 @@
         
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/DelegatedAdminMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/DelegatedAdminMgrImpl.java
index 8d114f1..d74b579 100644
--- a/src/main/java/org/apache/directory/fortress/rest/DelegatedAdminMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/DelegatedAdminMgrImpl.java
@@ -29,7 +29,8 @@
 import org.apache.directory.fortress.core.model.UserAdminRole;
 import org.apache.directory.fortress.core.model.FortRequest;
 import org.apache.directory.fortress.core.model.FortResponse;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -40,7 +41,7 @@
 class DelegatedAdminMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger LOG = Logger.getLogger( DelegatedAdminMgrImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( DelegatedAdminMgrImpl.class.getName() );
 
     /**
      * ************************************************************************************************************************************
@@ -386,4 +387,4 @@
         
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/DelegatedReviewMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/DelegatedReviewMgrImpl.java
index 086b8df..fb70a27 100644
--- a/src/main/java/org/apache/directory/fortress/rest/DelegatedReviewMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/DelegatedReviewMgrImpl.java
@@ -28,8 +28,8 @@
 import org.apache.directory.fortress.core.model.User;
 import org.apache.directory.fortress.core.model.FortRequest;
 import org.apache.directory.fortress.core.model.FortResponse;
-import org.apache.log4j.Logger;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.util.List;
 
 /**
@@ -40,7 +40,7 @@
 class DelegatedReviewMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger LOG = Logger.getLogger( DelegatedReviewMgrImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( DelegatedReviewMgrImpl.class.getName() );
 
     /**
      * ************************************************************************************************************************************
@@ -171,4 +171,4 @@
         
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/FortressInterceptor.java b/src/main/java/org/apache/directory/fortress/rest/FortressInterceptor.java
index 92b4e72..f92527c 100644
--- a/src/main/java/org/apache/directory/fortress/rest/FortressInterceptor.java
+++ b/src/main/java/org/apache/directory/fortress/rest/FortressInterceptor.java
@@ -31,7 +31,8 @@
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.util.ClassHelper;
 import org.apache.cxf.interceptor.security.SimpleAuthorizingInterceptor;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -42,7 +43,7 @@
 public class FortressInterceptor extends SimpleAuthorizingInterceptor
 {
     /** A logger for this class */
-    private static final Logger LOG = Logger.getLogger(FortressInterceptor.class.getName());
+    private static final Logger LOG = LoggerFactory.getLogger( FortressInterceptor.class.getName() );
 
     private static final String DEFAULT_ANNOTATION_CLASS_NAME = "javax.annotation.security.RolesAllowed";
     
diff --git a/src/main/java/org/apache/directory/fortress/rest/FortressServiceImpl.java b/src/main/java/org/apache/directory/fortress/rest/FortressServiceImpl.java
index deec55a..f47e6b2 100644
--- a/src/main/java/org/apache/directory/fortress/rest/FortressServiceImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/FortressServiceImpl.java
@@ -28,7 +28,9 @@
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.model.*;
 import org.apache.directory.fortress.core.rest.HttpIds;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.springframework.stereotype.Service;
 
 
@@ -40,7 +42,7 @@
 @Service("fortressService")
 public class FortressServiceImpl implements FortressService
 {
-    private static final Logger log = Logger.getLogger( FortressServiceImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( FortressServiceImpl.class.getName() );
     // Instantiate the implementation classes where the actual work is done:
     private final ReviewMgrImpl reviewMgrImpl = new ReviewMgrImpl();
     private final AdminMgrImpl adminMgrImpl = new AdminMgrImpl();
@@ -2534,10 +2536,10 @@
     public FortResponse invalid(FortRequest request)
     {
         String szError = "Could not find a matching service. HTTP request URI:" + httpRequest.getRequestURI() + ". User: " + httpRequest.getRemoteUser();
-        log.warn( szError );
+        LOG.warn( szError );
         FortResponse response = new FortResponse();
         response.setErrorCode( GlobalErrIds.REST_NOT_FOUND_ERR );
         response.setErrorMessage( szError );
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/GroupMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/GroupMgrImpl.java
index def26b8..e31434a 100644
--- a/src/main/java/org/apache/directory/fortress/rest/GroupMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/GroupMgrImpl.java
@@ -23,7 +23,8 @@
 import org.apache.directory.fortress.core.*;
 import org.apache.directory.fortress.core.SecurityException;
 import org.apache.directory.fortress.core.model.*;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,7 +37,7 @@
 class GroupMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger log = Logger.getLogger( GroupMgrImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( GroupMgrImpl.class.getName() );
 
     
     /* No qualifier */ FortResponse addGroup( FortRequest request )
@@ -53,7 +54,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -73,7 +74,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -95,7 +96,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -116,7 +117,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
         
         return response;
@@ -137,7 +138,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -173,7 +174,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -193,7 +194,7 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
@@ -213,9 +214,9 @@
         }
         catch ( SecurityException se )
         {
-            createError( response, log, se );
+            createError( response, LOG, se );
         }
 
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/PswdPolicyMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/PswdPolicyMgrImpl.java
index 3f391ca..19ecf4e 100644
--- a/src/main/java/org/apache/directory/fortress/rest/PswdPolicyMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/PswdPolicyMgrImpl.java
@@ -25,7 +25,8 @@
 import org.apache.directory.fortress.core.model.PwPolicy;
 import org.apache.directory.fortress.core.model.FortRequest;
 import org.apache.directory.fortress.core.model.FortResponse;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.List;
 
@@ -37,7 +38,7 @@
 class PswdPolicyMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger LOG = Logger.getLogger( PswdPolicyMgrImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( PswdPolicyMgrImpl.class.getName() );
 
     /**
      * ************************************************************************************************************************************
@@ -192,4 +193,4 @@
         
         return response;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/ReviewMgrImpl.java b/src/main/java/org/apache/directory/fortress/rest/ReviewMgrImpl.java
index 6f60fa4..4b1fb37 100644
--- a/src/main/java/org/apache/directory/fortress/rest/ReviewMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/rest/ReviewMgrImpl.java
@@ -34,8 +34,8 @@
 import org.apache.directory.fortress.core.model.UserRole;
 import org.apache.directory.fortress.core.model.FortRequest;
 import org.apache.directory.fortress.core.model.FortResponse;
-import org.apache.log4j.Logger;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.util.List;
 import java.util.Set;
 
@@ -47,7 +47,7 @@
 class ReviewMgrImpl extends AbstractMgrImpl
 {
     /** A logger for this class */
-    private static final Logger LOG = Logger.getLogger( ReviewMgrImpl.class.getName() );
+    private static final Logger LOG = LoggerFactory.getLogger( ReviewMgrImpl.class.getName() );
 
     /* No qualifier */  FortResponse readPermission( FortRequest request )
     {
@@ -842,4 +842,4 @@
         return response;
     }
 
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/SecUtils.java b/src/main/java/org/apache/directory/fortress/rest/SecUtils.java
index 1ebfd98..ab7b8e4 100644
--- a/src/main/java/org/apache/directory/fortress/rest/SecUtils.java
+++ b/src/main/java/org/apache/directory/fortress/rest/SecUtils.java
@@ -30,7 +30,8 @@
 import org.apache.directory.fortress.core.util.Config;
 import org.apache.directory.fortress.realm.J2eePolicyMgr;
 import org.apache.directory.fortress.realm.J2eePolicyMgrFactory;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -39,7 +40,7 @@
  */
 public class SecUtils
 {
-    private static final Logger LOG = Logger.getLogger(SecUtils.class.getName());
+    private static final Logger LOG = LoggerFactory.getLogger( SecUtils.class.getName() );
     private static J2eePolicyMgr j2eePolicyMgr;
 
     static
@@ -111,4 +112,4 @@
         LOG.info(errMsg);
         return fortResponse;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/directory/fortress/rest/SecurityOutFaultInterceptor.java b/src/main/java/org/apache/directory/fortress/rest/SecurityOutFaultInterceptor.java
index 008a7b5..20d653b 100644
--- a/src/main/java/org/apache/directory/fortress/rest/SecurityOutFaultInterceptor.java
+++ b/src/main/java/org/apache/directory/fortress/rest/SecurityOutFaultInterceptor.java
@@ -25,8 +25,8 @@
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.transport.http.AbstractHTTPDestination;
-import org.apache.log4j.Logger;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
@@ -37,7 +37,7 @@
  */
 public class SecurityOutFaultInterceptor extends AbstractPhaseInterceptor<Message>
 {
-    private static final Logger LOG = Logger.getLogger(SecurityOutFaultInterceptor.class.getName());
+    private static final Logger LOG = LoggerFactory.getLogger( SecurityOutFaultInterceptor.class.getName() );
 
     public SecurityOutFaultInterceptor()
     {
@@ -76,4 +76,4 @@
         }
         message.getInterceptorChain().abort();
     }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/org/apache/directory/fortress/rest/EmTest.java b/src/test/java/org/apache/directory/fortress/rest/EmTest.java
index 5273606..71fd011 100644
--- a/src/test/java/org/apache/directory/fortress/rest/EmTest.java
+++ b/src/test/java/org/apache/directory/fortress/rest/EmTest.java
@@ -35,7 +35,8 @@
 import org.apache.commons.httpclient.methods.*;
 import org.apache.cxf.common.util.Base64Utility;
 import org.apache.cxf.helpers.IOUtils;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -50,7 +51,7 @@
 public final class EmTest
 {
     private static final String CLS_NM = EmTest.class.getName();
-    private static final Logger log = Logger.getLogger(CLS_NM);
+    private static final Logger LOG = LoggerFactory.getLogger( CLS_NM );
     private static final String HOST = "localhost";
     private static final String PORT = "8080";
     private static final String VERSION = System.getProperty("version");
@@ -66,7 +67,7 @@
     @Test
     public void testServices()
     {
-        log.info(CLS_NM + ".testServices STARTED");
+        LOG.info(CLS_NM + ".testServices STARTED");
         try
         {
             // Don't fail if the delete was not successful as this may be the first run:
@@ -123,14 +124,14 @@
             // Use this group session to check access (URL is the same as for user, but session has 'isGroupSession' == true)
             testFunction("emTestCheckAccessGroupSession.xml", HttpIds.RBAC_AUTHZ, true);
 
-            log.info(CLS_NM + ".testServices SUCCESS");
+            LOG.info(CLS_NM + ".testServices SUCCESS");
         }
         catch(RestException re)
         {
             String error = CLS_NM + ".post caught RestException=" + re;
-            log.error(error);
+            LOG.error(error);
         }
-        log.info(CLS_NM + ".testServices FINISHED");
+        LOG.info(CLS_NM + ".testServices FINISHED");
     }
 
     /**
@@ -149,7 +150,7 @@
         String warn = CLS_NM + ".testServices FAILED calling " + function + " rc=" + rc + " error message=" + szErrorMsg;
         if(rc != 0)
         {
-            log.info(warn);
+            LOG.info(warn);
         }
         if (failOnError)
         {
@@ -169,7 +170,7 @@
     public String post(String userId, String password, String xmlFile, String function) throws RestException
     {
         String szResponse;
-        log.info(CLS_NM + ".post file:" + xmlFile + " HTTP POST request to:" + function);
+        LOG.info(CLS_NM + ".post file:" + xmlFile + " HTTP POST request to:" + function);
         URL fUrl = EmTest.class.getClassLoader().getResource(xmlFile);
         PostMethod post = null;
         try
@@ -185,8 +186,8 @@
                 HttpClient httpclient = new HttpClient();
                 int result = httpclient.executeMethod(post);
                 szResponse = IOUtils.toString(post.getResponseBodyAsStream(), "UTF-8");
-                log.info(CLS_NM + ".post Response status code: " + result);
-                log.info(CLS_NM + ".post Response value: " + szResponse);
+                LOG.info(CLS_NM + ".post Response status code: " + result);
+                LOG.info(CLS_NM + ".post Response value: " + szResponse);
             }
             else
             {
