diff --git a/sipXcommons/src/main/java/org/sipfoundry/commons/jainsip/AbstractSipStackBean.java b/sipXcommons/src/main/java/org/sipfoundry/commons/jainsip/AbstractSipStackBean.java
index 42139e2..61305c7 100644
--- a/sipXcommons/src/main/java/org/sipfoundry/commons/jainsip/AbstractSipStackBean.java
+++ b/sipXcommons/src/main/java/org/sipfoundry/commons/jainsip/AbstractSipStackBean.java
@@ -30,13 +30,14 @@ import org.apache.log4j.Appender;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.sipfoundry.commons.log4j.ServerLoggerImpl;
+import org.sipfoundry.commons.log4j.SipFoundryLayout;
 import org.sipfoundry.commons.log4j.StackLoggerImpl;
 
 
 /**
  * 
- * Abstract class that encapsulates a SIP stack. This initilizes the stack.
- * Extend this class to effortlessy construct a SIP  stack with all the trappings we
+ * Abstract class that encapsulates a SIP stack. This initializes the stack.
+ * Extend this class to effortlessly construct a SIP  stack with all the trappings we
  * need. 
  */
 
@@ -78,19 +79,19 @@ public abstract class AbstractSipStackBean {
         m_properties.setProperty("gov.nist.javax.sip.STACK_LOGGER", StackLoggerImpl.class.getName());
         m_properties.setProperty("gov.nist.javax.sip.SERVER_LOGGER", ServerLoggerImpl.class.getName());
        
-        String logLevel =  getLogLevel();
+        String logLevel =  SipFoundryLayout.mapSipFoundry2log4j(getLogLevel()).toString();
         Logger serverLogger = Logger.getLogger(StackLoggerImpl.class);
         serverLogger.addAppender(getStackAppender());
+        serverLogger.error("getLogLevel returned " + logLevel);
         
         m_properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL",logLevel);
       
         if (!logLevel.equalsIgnoreCase("TRACE")) {
+            serverLogger.setLevel(Level.toLevel(logLevel));
             if (logLevel.equalsIgnoreCase("DEBUG")) {
-                serverLogger.setLevel(Level.INFO);
                 m_properties.setProperty(
                         "gov.nist.javax.sip.LOG_STACK_TRACE_ON_MESSAGE_SEND", "true");
             } else {
-                serverLogger.setLevel(Level.toLevel(logLevel));
                 m_properties.setProperty(
                         "gov.nist.javax.sip.LOG_STACK_TRACE_ON_MESSAGE_SEND", "false");
             }
diff --git a/sipXopenfire/src/main/java/org/sipfoundry/openfire/plugin/presence/SipXOpenfirePlugin.java b/sipXopenfire/src/main/java/org/sipfoundry/openfire/plugin/presence/SipXOpenfirePlugin.java
index 748d460..9ca9729 100644
--- a/sipXopenfire/src/main/java/org/sipfoundry/openfire/plugin/presence/SipXOpenfirePlugin.java
+++ b/sipXopenfire/src/main/java/org/sipfoundry/openfire/plugin/presence/SipXOpenfirePlugin.java
@@ -15,6 +15,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.log4j.ConsoleAppender;
 import org.apache.log4j.Logger;
 import org.apache.log4j.PatternLayout;
+import org.apache.log4j.PropertyConfigurator;
 import org.jivesoftware.openfire.PacketRouter;
 import org.jivesoftware.openfire.PresenceManager;
 import org.jivesoftware.openfire.XMPPServer;
@@ -190,38 +191,33 @@ public class SipXOpenfirePlugin implements Plugin, Component {
             StringBuilder sb = new StringBuilder(javaClassPaths).append(":" + openfireHome
                     + "/lib/sipxcommons.jar");
             System.setProperty("java.class.path", sb.toString());
-            String log4jPropertiesFile = configurationPath + "/log4j.properties";
-
-            if (new File(log4jPropertiesFile).exists()) {
-                /*
-                 * Override the file configuration setting.
-                 */
-                Properties props = new Properties();
-                props.load(new FileInputStream(log4jPropertiesFile));
-                String level = props.getProperty("log4j.category.org.sipfoundry.openfire");
+
+            // Configure log4j
+            Properties props = new Properties();
+            props.setProperty("log4j.rootLogger", "warn, file");
+            props.setProperty("log4j.logger.org.sipfoundry.openfire",
+                    SipFoundryLayout.mapSipFoundry2log4j(watcherConfig.getLogLevel()).toString());
+            props.setProperty("log4j.appender.file", SipFoundryAppender.class.getName());
+            props.setProperty("log4j.appender.file.File", logFile);
+            props.setProperty("log4j.appender.file.layout", SipFoundryLayout.class.getName());
+            props.setProperty("log4j.appender.file.layout.facility", "JAVA");
+            String log4jProps = configurationPath + "/log4j.properties";
+            if (new File(log4jProps).exists()) {
+                Properties fileProps = new Properties();
+                fileProps.load(new FileInputStream(log4jProps));
+                String level = fileProps
+                        .getProperty("log4j.logger.org.sipfoundry.openfire");
                 if (level != null) {
-                    watcherConfig.setLogLevel(level);
+                    props.setProperty("log4j.logger.org.sipfoundry.openfire",level);
                 }
             }
-            setLogAppender(new SipFoundryAppender(new SipFoundryLayout(), logFile));
-            // TODO -- this should be org.sipfoundry.openfire.
-            Logger applicationLogger = Logger.getLogger("org.sipfoundry");
-
-            /*
-             * Set the log level.
-             */
-            if (watcherConfig.getLogLevel().equals("TRACE")) {
-                applicationLogger.setLevel(org.apache.log4j.Level.DEBUG);
-            } else {
-                applicationLogger.setLevel(org.apache.log4j.Level.toLevel(watcherConfig
-                        .getLogLevel()));
-            }
-
-            applicationLogger.addAppender(getLogAppender());
-            if (System.getProperty("output.console") != null) {
-                applicationLogger.addAppender(new ConsoleAppender(new PatternLayout()));
-            }
+            PropertyConfigurator.configure(props);
 
+            log.debug("debug message");
+            log.info("info message");
+            log.warn("warn messaeg");
+            log.error("error message");
+            log.fatal("fatal message");
             
         } catch (Exception ex) {
             throw new SipXOpenfirePluginException(ex);
