Index: src/ch/StatusDlg.cpp
===================================================================
diff -u -r9ddf8fdd5f641491dd30c49eb90f8f740314b6af -rdb26c9ac6945d5c754c3460dd55bd6d53e2c9e7e
--- src/ch/StatusDlg.cpp	(.../StatusDlg.cpp)	(revision 9ddf8fdd5f641491dd30c49eb90f8f740314b6af)
+++ src/ch/StatusDlg.cpp	(.../StatusDlg.cpp)	(revision db26c9ac6945d5c754c3460dd55bd6d53e2c9e7e)
@@ -26,6 +26,7 @@
 #include "Structs.h"
 #include "CfgProperties.h"
 #include "../libchengine/TTaskManager.h"
+#include "../libchengine/TLocalFilesystem.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -733,7 +734,15 @@
 	if(!spTask)
 		return;
 
-	ULONG_PTR hResult = (ULONG_PTR)ShellExecute(this->m_hWnd, _T("open"), _T("notepad.exe"), spTask->GetLogPath().ToString(), nullptr, SW_SHOWNORMAL);
+	chcore::TSmartPath logPath = spTask->GetLogPath();
+	chengine::TLocalFilesystem localFilesystem(GetLogFileData());
+	if(!localFilesystem.PathExist(logPath))
+	{
+		MsgBox(IDS_LOGFILEEMPTY_STRING, MB_OK | MB_ICONINFORMATION);
+		return;
+	}
+
+	ULONG_PTR hResult = (ULONG_PTR)ShellExecute(this->m_hWnd, _T("open"), _T("notepad.exe"), logPath.ToString(), nullptr, SW_SHOWNORMAL);
 	if(hResult < 32)
 	{
 		ictranslate::CFormat fmt(GetResManager().LoadString(IDS_SHELLEXECUTEERROR_STRING));
Index: src/ch/ch.cpp
===================================================================
diff -u -r9ddf8fdd5f641491dd30c49eb90f8f740314b6af -rdb26c9ac6945d5c754c3460dd55bd6d53e2c9e7e
--- src/ch/ch.cpp	(.../ch.cpp)	(revision 9ddf8fdd5f641491dd30c49eb90f8f740314b6af)
+++ src/ch/ch.cpp	(.../ch.cpp)	(revision db26c9ac6945d5c754c3460dd55bd6d53e2c9e7e)
@@ -265,6 +265,7 @@
 	m_spEngineLoggerConfig->SetLogLevel(L"Serializer-RowData", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_SERIALIZER>(rCfg));
 	m_spEngineLoggerConfig->SetLogLevel(L"Serializer-Container", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_SERIALIZER>(rCfg));
 	m_spEngineLoggerConfig->SetLogLevel(L"TaskManager", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_ENGINEDEFAULT>(rCfg));
+	// also update CCopyHandlerApp::OnConfigNotify() with new channels
 
 	// initialize the global log file if it is requested by configuration file
 	CString strLogPath = strPath + _T("\\ch.log");
@@ -653,7 +654,10 @@
 		m_spLog->GetLogFileData()->GetMultiLoggerConfig()->SetLogLevel(L"default", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_APP>(rCfg));
 
 	if(setPropNames.HasValue(PropData<PP_LOGLEVEL_ENGINEDEFAULT>::GetPropertyName()))
+	{
 		m_spEngineLoggerConfig->SetLogLevel(L"default", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_ENGINEDEFAULT>(rCfg));
+		m_spEngineLoggerConfig->SetLogLevel(L"TaskManager", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_ENGINEDEFAULT>(rCfg));
+	}
 	if(setPropNames.HasValue(PropData<PP_LOGLEVEL_FILESYSTEM>::GetPropertyName()))
 	{
 		m_spEngineLoggerConfig->SetLogLevel(L"Filesystem", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_FILESYSTEM>(rCfg));
@@ -670,6 +674,14 @@
 		m_spEngineLoggerConfig->SetLogLevel(L"ST-Delete", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_SUBTASK_DELETE>(rCfg));
 	if(setPropNames.HasValue(PropData<PP_LOGLEVEL_SUBTASK_SCANDIR>::GetPropertyName()))
 		m_spEngineLoggerConfig->SetLogLevel(L"ST-ScanDirs", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_SUBTASK_SCANDIR>(rCfg));
+
+	if(setPropNames.HasValue(PropData<PP_LOGLEVEL_SERIALIZER>::GetPropertyName()))
+	{
+		m_spEngineLoggerConfig->SetLogLevel(L"Serializer", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_SERIALIZER>(rCfg));
+		m_spEngineLoggerConfig->SetLogLevel(L"Serializer-RowReader", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_SERIALIZER>(rCfg));
+		m_spEngineLoggerConfig->SetLogLevel(L"Serializer-RowData", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_SERIALIZER>(rCfg));
+		m_spEngineLoggerConfig->SetLogLevel(L"Serializer-Container", (logger::ESeverityLevel)GetPropValue<PP_LOGLEVEL_SERIALIZER>(rCfg));
+	}
 }
 
 void CCopyHandlerApp::OnResManNotify(UINT uiType)
Index: src/ch/ch.rc
===================================================================
diff -u -rcf73cd72a012517c1efe09a740516c6f4dc2c150 -rdb26c9ac6945d5c754c3460dd55bd6d53e2c9e7e
--- src/ch/ch.rc	(.../ch.rc)	(revision cf73cd72a012517c1efe09a740516c6f4dc2c150)
+++ src/ch/ch.rc	(.../ch.rc)	(revision db26c9ac6945d5c754c3460dd55bd6d53e2c9e7e)
@@ -1049,6 +1049,7 @@
     IDS_SHELLEXECUTEERROR_STRING 
                             "Error #%errno calling ShellExecute for file %path"
     IDS_BSDEFAULT_STRING    "Default: "
+	IDS_LOGFILEEMPTY_STRING "Log file is empty"
 END
 
 STRINGTABLE
Index: src/ch/langs/polish.lng
===================================================================
diff -u -rb556d023b748dfea230575959b6513acf29fd7b3 -rdb26c9ac6945d5c754c3460dd55bd6d53e2c9e7e
Binary files differ
Index: src/ch/resource.h
===================================================================
diff -u -r5aac942a83e4a308ff401cca43be501b1bbdfb6a -rdb26c9ac6945d5c754c3460dd55bd6d53e2c9e7e
--- src/ch/resource.h	(.../resource.h)	(revision 5aac942a83e4a308ff401cca43be501b1bbdfb6a)
+++ src/ch/resource.h	(.../resource.h)	(revision db26c9ac6945d5c754c3460dd55bd6d53e2c9e7e)
@@ -704,6 +704,7 @@
 #define IDS_STATUS_LOADERROR_STRING     21555
 #define IDS_EXPORTING_TASK_FAILED       21556
 #define IDS_BUTTON_TRUNCATE_STRING      21557
+#define IDS_LOGFILEEMPTY_STRING         21558
 #define ID_POPUP_SHOW_STATUS            32773
 #define ID_POPUP_TIME_CRITICAL          32774
 #define ID_POPUP_HIGHEST                32775