Index: src/libchcore/TTaskDefinition.cpp
===================================================================
diff -u -rb193a95402f2bf4c456fb9d65d111caaf6994823 -r8b7479db2ee71a3d00779c67fe6a1b1d9ec414b8
--- src/libchcore/TTaskDefinition.cpp	(.../TTaskDefinition.cpp)	(revision b193a95402f2bf4c456fb9d65d111caaf6994823)
+++ src/libchcore/TTaskDefinition.cpp	(.../TTaskDefinition.cpp)	(revision 8b7479db2ee71a3d00779c67fe6a1b1d9ec414b8)
@@ -121,7 +121,8 @@
 void TTaskDefinition::SetDestinationPath(const TSmartPath& pathDestination)
 {
 	m_pathDestinationPath = pathDestination;
-	m_pathDestinationPath.AppendSeparatorIfDoesNotExist();
+	if(!m_pathDestinationPath.IsEmpty())
+		m_pathDestinationPath.AppendSeparatorIfDoesNotExist();
 	m_bModified = true;
 }
 
@@ -255,7 +256,7 @@
 	tTaskInfo.WriteToString(strOutput);
 }
 
-void TTaskDefinition::LoadFromString(const TString& strInput)
+void TTaskDefinition::LoadFromString(const TString& strInput, bool bAllowEmptyDstPath)
 {
 	// read everything
 	TConfig tTaskInfo;
@@ -289,10 +290,11 @@
 	GetConfigValue(tTaskInfo, _T("TaskDefinition.Filters"), m_afFilters);
 
 	// destination path
-	if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath) || m_pathDestinationPath.IsEmpty())
+	if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath) || (!bAllowEmptyDstPath && m_pathDestinationPath.IsEmpty()))
 		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
-	m_pathDestinationPath.AppendSeparatorIfDoesNotExist();
+	if(!m_pathDestinationPath.IsEmpty())
+		m_pathDestinationPath.AppendSeparatorIfDoesNotExist();
 
 	// type of the operation
 	int iOperation = eOperation_None;