Index: src/ch/TTaskDefinition.cpp
===================================================================
diff -u -N -r1d7d79169d480a02e335b8b0a4919f9c78d58325 -rca046f75806db6693a4b2dc6ddb255f76d0bbc3f
--- src/ch/TTaskDefinition.cpp	(.../TTaskDefinition.cpp)	(revision 1d7d79169d480a02e335b8b0a4919f9c78d58325)
+++ src/ch/TTaskDefinition.cpp	(.../TTaskDefinition.cpp)	(revision ca046f75806db6693a4b2dc6ddb255f76d0bbc3f)
@@ -166,8 +166,7 @@
 
 	// get information from config file
 	// task unique id - use if provided, generate otherwise
-	tTaskInfo.GetValue(_T("TaskDefinition.UniqueID"), m_strTaskUniqueID, _T(""));
-	if(m_strTaskUniqueID.IsEmpty())
+	if(!tTaskInfo.GetValue(_T("TaskDefinition.UniqueID"), m_strTaskUniqueID) || m_strTaskUniqueID.IsEmpty())
 	{
 		boost::uuids::random_generator gen;
 		boost::uuids::uuid u = gen();
@@ -177,13 +176,19 @@
 	}
 
 	// basic information
-	tTaskInfo.GetValue(_T("TaskDefinition.SourcePaths"), m_vSourcePaths);
-	tTaskInfo.GetValue(_T("TaskDefinition.DestinationPath"), m_strDestinationPath, _T(""));
+	if(!tTaskInfo.GetValue(_T("TaskDefinition.SourcePaths"), m_vSourcePaths) || m_vSourcePaths.empty())
+       THROW(_T("Missing source paths"), 0, 0, 0);
+
+	if(!tTaskInfo.GetValue(_T("TaskDefinition.DestinationPath"), m_strDestinationPath) || m_strDestinationPath.IsEmpty())
+       THROW(_T("Missing destination path"), 0, 0, 0);
+
 	if(m_strDestinationPath.Right(1) != _T("\\"))
 		m_strDestinationPath += _T("\\");
 
 	int iOperation = eOperation_None;
-	tTaskInfo.GetValue(_T("TaskDefinition.OperationType"), iOperation, eOperation_None);
+	if(!tTaskInfo.GetValue(_T("TaskDefinition.OperationType"), iOperation))
+       THROW(_T("Missing operation type"), 0, 0, 0);
+
 	m_tOperationPlan.SetOperationType((EOperationType)iOperation);
 
 	tTaskInfo.ExtractSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration);