Index: src/ch/CfgProperties.h
===================================================================
diff -u -N -r9ea1e103b5fa4ddfebf8028f121ce16e917eec04 -r1d7d79169d480a02e335b8b0a4919f9c78d58325
--- src/ch/CfgProperties.h	(.../CfgProperties.h)	(revision 9ea1e103b5fa4ddfebf8028f121ce16e917eec04)
+++ src/ch/CfgProperties.h	(.../CfgProperties.h)	(revision 1d7d79169d480a02e335b8b0a4919f9c78d58325)
@@ -21,6 +21,8 @@
 
 #pragma once
 
+#include "TTaskConfiguration.h"
+
 class TConfig;
 
 // properties definitions
@@ -115,6 +117,11 @@
 	eFreq_Max
 };
 
+///////////////////////////////////////////////////////////////////////////////////////////////
+// specific branches in configuration
+
+#define BRANCH_TASK_SETTINGS _T("CHConfig.TaskSettings")
+
 /////////////////////////////////////////////////////////////////////////////////////////////
 // Properties definitions
 
@@ -126,6 +133,7 @@
 		typedef val_type value_type;\
 		static value_type GetDefaultValue() { return def_value; }\
 		static const wchar_t* GetPropertyName() { return val_name; }\
+		static const wchar_t* GetPropertyNamePrefix() { return _T(""); }\
 	}
 
 #define PROPERTY_MINMAX(enum_id, val_type, val_name, def_value, min_val, max_val)\
@@ -134,14 +142,25 @@
 		typedef val_type value_type;\
 		static value_type GetDefaultValue() { return def_value; }\
 		static const wchar_t* GetPropertyName() { return val_name; }\
+		static const wchar_t* GetPropertyNamePrefix() { return _T(""); }\
 	}
 
+#define ADAPT_TASK_PROPERTY(enum_id, task_enum_id)\
+	template<> struct PropData<enum_id>\
+{\
+	typedef TaskPropData<task_enum_id>::value_type value_type;\
+	static value_type GetDefaultValue() { return TaskPropData<task_enum_id>::GetDefaultValue(); }\
+	static const wchar_t* GetPropertyName() { return TaskPropData<task_enum_id>::GetPropertyName(); }\
+	static const wchar_t* GetPropertyNamePrefix() { return BRANCH_TASK_SETTINGS _T("."); }\
+}
+
 const long long Hour = 3600UL*1000UL;
 const long long Minute = 60UL*1000UL;
 const long long Second = 1000UL;
 
 typedef std::vector<CString> CStringVector;
 
+///////////////////////////////////////////////////////////////////////////////////////////////
 // General settings
 PROPERTY(PP_PCLIPBOARDMONITORING, bool, _T("CHConfig.General.Program.EnableClipboardMonitoring"), false);
 PROPERTY_MINMAX(PP_PMONITORSCANINTERVAL, unsigned int, _T("CHConfig.General.Program.ClipboardMonitorScanInterval"), 1000, 0, 3600UL*1000UL);
@@ -191,22 +210,23 @@
 
 PROPERTY(PP_CMLIMITMAXOPERATIONS, unsigned int, _T("CHConfig.Core.Operation.LimitMaxOperations"), 1);
 
-PROPERTY(PP_CMSETDESTATTRIBUTES, bool, _T("CHConfig.Core.Operation.SetDestinationAttributes"), true);
-PROPERTY(PP_CMSETDESTDATE, bool, _T("CHConfig.Core.Operation.SetDestinationTime"), true);
-PROPERTY(PP_CMPROTECTROFILES, bool, _T("CHConfig.Core.Operation.ProtectReadOnlyFiles"), true);
-PROPERTY(PP_CMREADSIZEBEFOREBLOCKING, bool, _T("CHConfig.Core.Operation.ScanForFilesBeforeBlocking"), true);
-PROPERTY(PP_CMDEFAULTPRIORITY, int, _T("CHConfig.Core.Operation.Thread.Priority"), THREAD_PRIORITY_NORMAL);
-PROPERTY(PP_CMDISABLEPRIORITYBOOST, bool, _T("CHConfig.Core.Operation.Thread.DisablePriorityBoost"), false);
-PROPERTY(PP_CMDELETEAFTERFINISHED, bool, _T("CHConfig.Core.Operation.DeleteDilesInSeparateOperation"), true);
+// Task default settings (see TTaskConfiguration.h)
+ADAPT_TASK_PROPERTY(PP_BFUSEONLYDEFAULT, eTO_UseOnlyDefaultBuffer);
+ADAPT_TASK_PROPERTY(PP_BFDEFAULT, eTO_DefaultBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFONEDISK, eTO_OneDiskBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFTWODISKS, eTO_TwoDisksBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFCD, eTO_CDBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFLAN, eTO_LANBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFUSENOBUFFERING, eTO_DisableBuffering);
+ADAPT_TASK_PROPERTY(PP_BFBOUNDARYLIMIT, eTO_DisableBufferingMinSize);
 
-PROPERTY(PP_BFUSEONLYDEFAULT, bool, _T("CHConfig.Core.Operation.Buffer.UseOnlyDefaultBuffer"), false);
-PROPERTY_MINMAX(PP_BFDEFAULT, unsigned int, _T("CHConfig.Core.Operation.Buffer.DefaultBufferSize"), 2097152, 1, 0xffffffff);
-PROPERTY_MINMAX(PP_BFONEDISK, unsigned int, _T("CHConfig.Core.Operation.Buffer.OnePhysicalDiskSize"), 4194304, 1, 0xffffffff);
-PROPERTY_MINMAX(PP_BFTWODISKS, unsigned int, _T("CHConfig.Core.Operation.Buffer.TwoPhysicalDisksSize"), 524288, 1, 0xffffffff);
-PROPERTY_MINMAX(PP_BFCD, unsigned int, _T("CHConfig.Core.Operation.Buffer.CDSize"), 262144, 1, 0xffffffff);
-PROPERTY_MINMAX(PP_BFLAN, unsigned int, _T("CHConfig.Core.Operation.Buffer.LANSize"), 131072, 1, 0xffffffff);
-PROPERTY(PP_BFUSENOBUFFERING, bool, _T("CHConfig.Core.Operation.Buffering.DisableBufferingForLargeFiles"), true);
-PROPERTY_MINMAX(PP_BFBOUNDARYLIMIT, int, _T("CHConfig.Core.Operation.Buffering.MinSizeOfFileToDisableBuffering"), 2097152, 1, 0xffffffff);
+ADAPT_TASK_PROPERTY(PP_CMSETDESTATTRIBUTES, eTO_SetDestinationAttributes);
+ADAPT_TASK_PROPERTY(PP_CMSETDESTDATE, eTO_SetDestinationDateTime);
+ADAPT_TASK_PROPERTY(PP_CMPROTECTROFILES, eTO_ProtectReadOnlyFiles);
+ADAPT_TASK_PROPERTY(PP_CMREADSIZEBEFOREBLOCKING, eTO_ScanDirectoriesBeforeBlocking);
+ADAPT_TASK_PROPERTY(PP_CMDEFAULTPRIORITY, eTO_ThreadPriority);
+ADAPT_TASK_PROPERTY(PP_CMDISABLEPRIORITYBOOST, eTO_DisablePriorityBoost);
+ADAPT_TASK_PROPERTY(PP_CMDELETEAFTERFINISHED, eTO_DeleteInSeparateSubTask);
 
 // Shell extension
 PROPERTY(PP_SHSHOWCOPY, bool, _T("CHConfig.ShellExtension.ShowCommands.Copy"), true);
@@ -220,8 +240,8 @@
 PROPERTY(PP_SHSHOWFREESPACE, bool, _T("CHConfig.ShellExtension.ShowFreeSpaceAlongShortcuts"), true);
 PROPERTY(PP_SHSHOWSHELLICONS, bool, _T("CHConfig.ShellExtension.ShowShortcutsShellIcons"), false);
 PROPERTY(PP_SHINTERCEPTDRAGDROP, bool, _T("CHConfig.ShellExtension.InterceptDragDrop"), true);
-PROPERTY(PP_SHINTERCEPTKEYACTIONS, bool, _T("CHConfig.ShellExtension.ShowCommands.InterceptKeyboardActions"), true);
-PROPERTY(PP_SHINTERCEPTCTXMENUACTIONS, bool, _T("CHConfig.ShellExtension.ShowCommands.InterceptDefaultContextMenuActions"), false);
+PROPERTY(PP_SHINTERCEPTKEYACTIONS, bool, _T("CHConfig.ShellExtension.InterceptKeyboardActions"), true);
+PROPERTY(PP_SHINTERCEPTCTXMENUACTIONS, bool, _T("CHConfig.ShellExtension.InterceptDefaultContextMenuActions"), false);
 
 // Invisible options
 PROPERTY_MINMAX(PP_LAST_UPDATE_TIMESTAMP, long long, _T("CHConfig.RuntimeState.LastCheckedForUpdates"), 0, 0, LLONG_MAX);
@@ -233,20 +253,20 @@
 typename PropData<PropID>::value_type GetPropValue(const TConfig& rConfig)
 {
 	typename PropData<PropID>::value_type tValue;
-	rConfig.GetValue(PropData<PropID>::GetPropertyName(), tValue, PropData<PropID>::GetDefaultValue());
+	rConfig.GetValue(CString(PropData<PropID>::GetPropertyNamePrefix()) + PropData<PropID>::GetPropertyName(), tValue, PropData<PropID>::GetDefaultValue());
 	return tValue;
 }
 
 template<ECHProperties PropID>
 bool GetPropValue(const TConfig& rConfig, typename PropData<PropID>::value_type& rValue)
 {
-	return rConfig.GetValue(PropData<PropID>::GetPropertyName(), rValue, PropData<PropID>::GetDefaultValue());
+	return rConfig.GetValue(CString(PropData<PropID>::GetPropertyNamePrefix()) + PropData<PropID>::GetPropertyName(), rValue, PropData<PropID>::GetDefaultValue());
 }
 
 template<ECHProperties PropID>
 void SetPropValue(TConfig& rConfig, const typename PropData<PropID>::value_type& rValue)
 {
-	rConfig.SetValue(PropData<PropID>::GetPropertyName(), rValue);
+	rConfig.SetValue(CString(PropData<PropID>::GetPropertyNamePrefix()) + PropData<PropID>::GetPropertyName(), rValue);
 }
 
 #endif