diff --git a/org.adempiere.base/src/org/compiere/util/CLogFile.java b/org.adempiere.base/src/org/compiere/util/CLogFile.java
index eac1c8ec99..edfc84d3da 100644
--- a/org.adempiere.base/src/org/compiere/util/CLogFile.java
+++ b/org.adempiere.base/src/org/compiere/util/CLogFile.java
@@ -61,6 +61,7 @@ public class CLogFile extends Handler
     private String		m_fileNameDate = "";
     /** Record Counter			*/
     private int			m_records = 0;
+	private File m_previousFile;
 
 	/**
 	 * 	Initialize
@@ -202,6 +203,25 @@ public class CLogFile extends Handler
 		initialize(m_idempiereHome, true, Ini.isClient());
 	}	//	rotateLog
 
+	public void reopen()
+	{
+		if (m_previousFile != null && m_previousFile.exists() && m_file == null && m_writer == null) 
+		{
+			try
+			{
+				m_file = m_previousFile;
+				m_writer = new FileWriter (m_file, true);
+				m_records = 0;
+			}
+			catch (Exception ex)
+			{
+				reportError ("writer", ex, ErrorManager.OPEN_FAILURE);
+				m_writer = null;
+				m_file = null;
+			}
+		}
+	}
+	
 	/**
 	 * 	Get File Name
 	 *	@return file name
@@ -337,7 +357,8 @@ public class CLogFile extends Handler
 			reportError ("close", ex, ErrorManager.CLOSE_FAILURE);
 		}
 		m_writer = null;
-		m_file = null;
+		m_previousFile = m_file;
+		m_file = null;		
 	}	//	close
 
 	/**
diff --git a/org.adempiere.base/src/org/compiere/util/CLogMgt.java b/org.adempiere.base/src/org/compiere/util/CLogMgt.java
index 19a2897aa9..dd6482d58a 100644
--- a/org.adempiere.base/src/org/compiere/util/CLogMgt.java
+++ b/org.adempiere.base/src/org/compiere/util/CLogMgt.java
@@ -16,6 +16,8 @@
  *****************************************************************************/
 package org.compiere.util;
 
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.PrintWriter;
@@ -25,8 +27,10 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
@@ -52,15 +56,43 @@ import org.idempiere.distributed.IClusterService;
  */
 public class CLogMgt
 {
+	private static final CLogConsole CONSOLE_HANDLER = new CLogConsole();
+	private static final CLogErrorBuffer ERROR_BUFFER_HANDLER = new CLogErrorBuffer();
+	private static CLogFile fileHandler;
+	
+	private static final Map<String, Level> levelMap = new HashMap<String, Level>();
+	
+	private final static PropertyChangeListener listener = new PropertyChangeListener() {			
+		@Override
+		public void propertyChange(PropertyChangeEvent evt) {
+			if (evt.getPropertyName() == null) {
+				reInit();
+			}
+		}
+	};	
+	
+	
+	private static synchronized void reInit() {
+		CLogMgt.initialize(Ini.isClient());
+		if (!levelMap.isEmpty()) {
+			for(String key : levelMap.keySet()) {
+				setLevel(key, levelMap.get(key));
+			}
+		}
+		if (fileHandler != null) {
+			fileHandler.reopen();
+		}
+	}
+	
 	/**
 	 * 	Initialize Logging
 	 * 	@param isClient client
 	 */
-	public static void initialize(boolean isClient)
+	public static synchronized void initialize(boolean isClient)
 	{
+		LogManager mgr = LogManager.getLogManager();
 		if (isClient)
-		{
-			LogManager mgr = LogManager.getLogManager();
+		{			
 			try
 			{	//	Load Logging config from org.compiere.util.*properties
 				String fileName = "logClient.properties";
@@ -147,21 +179,22 @@ public class CLogMgt
 		}
 		//	Check Loggers
 		if (!handlerNames.contains(CLogErrorBuffer.class.getName()))
-			addHandler(new CLogErrorBuffer());
+			addHandler(ERROR_BUFFER_HANDLER);
 		if (isClient && !handlerNames.contains(CLogConsole.class.getName()))
-			addHandler(new CLogConsole());
+			addHandler(CONSOLE_HANDLER);
 		if (!handlerNames.contains(CLogFile.class.getName()))
 		{
-			Handler fh = new CLogFile(null, true, isClient);
-			addHandler(fh);
+			if (fileHandler == null)
+				fileHandler = new CLogFile(null, true, isClient);
+			
+			addHandler(fileHandler);
 		}
 
 		setFormatter(CLogFormatter.get());
 		setFilter(CLogFilter.get());
-	//	setLevel(s_currentLevel);
-	//	setLoggerLevel(Level.ALL, null);
-		//
-	//	System.out.println("Handlers=" + s_handlers.size() + ", Level=" + s_currentLevel);
+	
+		mgr.removePropertyChangeListener(listener);
+		mgr.addPropertyChangeListener(listener);
 	}	//	initialize
 
 
@@ -267,7 +300,7 @@ public class CLogMgt
 	 * 	Set Level for all handlers
 	 *	@param level log level
 	 */
-	public static void setLevel (String loggerName, Level level)
+	public static synchronized void setLevel (String loggerName, Level level)
 	{
 		if (level == null)
 			return;
@@ -293,6 +326,9 @@ public class CLogMgt
 				logger.setUseParentHandlers(true);
 			}
 		}
+		String key = loggerName == null ? "" : loggerName;
+		if (!levelMap.containsKey(key))
+			levelMap.put(key, level);
 	}	//	setHandlerLevel
 
 	/**