Index: src/libchcore/ErrorCodes.h
===================================================================
diff -u -r633a533cb6e741d44fe28aa56339e1d2709b1b27 -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/ErrorCodes.h	(.../ErrorCodes.h)	(revision 633a533cb6e741d44fe28aa56339e1d2709b1b27)
+++ src/libchcore/ErrorCodes.h	(.../ErrorCodes.h)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -25,22 +25,27 @@
 
 enum EGeneralErrors
 {
-	eNoError = 0,
-	eBoundsExceeded = 1,
-	eInvalidArgument = 2,
-	eUnhandledCase = 3,
-	eMissingData = 4,
-	eUnsupportedVersion = 5,
+	// general errors
+	eErr_Success = 0,
+	eErr_BoundsExceeded = 1,
+	eErr_InvalidArgument = 2,
+	eErr_UnhandledCase = 3,
+	eErr_InternalProblem = 4,
 
-   // shared memory
-   eCannotOpenSharedMemory = 6,
-   eSharedMemoryNotOpen = 7,
-   eSharedMemoryInvalidFormat = 8,
-   eSharedMemoryAlreadyExists = 9,
+	// shared memory (500+)
+	eErr_CannotOpenSharedMemory = 500,
+	eErr_SharedMemoryNotOpen = 501,
+	eErr_SharedMemoryInvalidFormat = 502,
+	eErr_SharedMemoryAlreadyExists = 503,
 
-   // threads
-   eMutexTimedOut = 10,
+	// threading (1000+)
+	eErr_MutexTimedOut = 1000,
 
+	// string errors (1500+)
+
+	// Task definition errors (2000+)
+	eErr_UnsupportedVersion = 2000,
+	eErr_MissingXmlData = 2001,
 };
 
 END_CHCORE_NAMESPACE
Index: src/libchcore/TCoreException.cpp
===================================================================
diff -u -r6dc950d4d76107421ff6eb62069b70f20bcc450e -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TCoreException.cpp	(.../TCoreException.cpp)	(revision 6dc950d4d76107421ff6eb62069b70f20bcc450e)
+++ src/libchcore/TCoreException.cpp	(.../TCoreException.cpp)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -29,13 +29,6 @@
 // ============================================================================
 BEGIN_CHCORE_NAMESPACE
 
-TCoreException::TCoreException(EGeneralErrors eErrorCode, const tchar_t* pszInternalError) :
-	m_eErrorCode(eErrorCode),
-	m_strInternalMessage(pszInternalError ? pszInternalError : _t(""))
-{
-	BOOST_ASSERT(false);
-}
-
 // ============================================================================
 /// chcore::TCoreException::TCoreException
 /// @date 2009/11/30
@@ -47,12 +40,11 @@
 /// @param[in] stLineNumber -      source line number
 /// @param[in] pszFunction -       function name in which the problem occured.
 // ============================================================================
-TCoreException::TCoreException(EGeneralErrors eErrorCode, const tchar_t* pszInternalError, const tchar_t* pszFile, size_t stLineNumber, const tchar_t* pszFunction) :
+TCoreException::TCoreException(EGeneralErrors eErrorCode, const tchar_t* pszFile, size_t stLineNumber, const tchar_t* pszFunction) :
 	m_eErrorCode(eErrorCode),
-	m_strInternalMessage(pszInternalError ? pszInternalError : _t("")),
-	m_strFile(pszFile ? pszFile : _t("")),
+	m_pszFile(pszFile),
 	m_strLineNumber(stLineNumber),
-	m_strFunction(pszFunction ? pszFunction : _t(""))
+	m_pszFunction(pszFunction)
 {
 	BOOST_ASSERT(false);
 }
Index: src/libchcore/TCoreException.h
===================================================================
diff -u -r39db7f4bffdd185122d8dab0772bd6fc49a0b675 -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TCoreException.h	(.../TCoreException.h)	(revision 39db7f4bffdd185122d8dab0772bd6fc49a0b675)
+++ src/libchcore/TCoreException.h	(.../TCoreException.h)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -25,37 +25,33 @@
 
 // throws core exception object
 #define THROW_CORE_EXCEPTION(error_code)\
-	throw TCoreException(error_code, _t(""), __FILEW__, __LINE__, __FUNCTIONW__)
-#define THROW_CORE_EXCEPTION_STR(error_code, error_string)\
-	throw TCoreException(error_code, error_string, __FILEW__, __LINE__, __FUNCTIONW__)
+	throw TCoreException(error_code, __FILEW__, __LINE__, __FUNCTIONW__)
 
 class LIBCHCORE_API TCoreException
 {
 public:
-	TCoreException(EGeneralErrors eErrorCode, const tchar_t* pszInternalError);
-	TCoreException(EGeneralErrors eErrorCode, const tchar_t* pszInternalError, const tchar_t* pszFile, size_t stLineNumber, const tchar_t* pszFunction);
+	TCoreException(EGeneralErrors eErrorCode);
+	TCoreException(EGeneralErrors eErrorCode, const tchar_t* pszFile, size_t stLineNumber, const tchar_t* pszFunction);
 
 	// error information
 	EGeneralErrors GetErrorCode() const { return m_eErrorCode; }
-	tstring_t GetInternalErrorString() const { return m_strInternalMessage; }
 
 	// location info
-	tstring_t GetSourceFile() const { return m_strFile; }
+	const wchar_t* GetSourceFile() const { return m_pszFile; }
 	size_t GetSourceLineNumber() const { return m_strLineNumber; }
-	tstring_t GetFunctionName() const { return m_strFunction; }
+	const wchar_t* GetFunctionName() const { return m_pszFunction; }
 
 private:
 	TCoreException() {}
 
 protected:
 	// what happened?
-	tstring_t m_strInternalMessage;
 	EGeneralErrors m_eErrorCode;
 
 	// where it happened?
-	tstring_t m_strFile;
+	const wchar_t* m_pszFile;
+	const wchar_t* m_pszFunction;
 	size_t m_strLineNumber;
-	tstring_t m_strFunction;
 };
 
 END_CHCORE_NAMESPACE
Index: src/libchcore/TPath.cpp
===================================================================
diff -u -r7d56dc81daaf09b67f8036b5c3c997335c2994ae -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TPath.cpp	(.../TPath.cpp)	(revision 7d56dc81daaf09b67f8036b5c3c997335c2994ae)
+++ src/libchcore/TPath.cpp	(.../TPath.cpp)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -1193,7 +1193,7 @@
 const TSmartPath& TPathContainer::GetAt(size_t stIndex) const
 {
 	if(stIndex > m_vPaths.size())
-		THROW_CORE_EXCEPTION(eBoundsExceeded);
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
 
 	return m_vPaths.at(stIndex);
 }
@@ -1209,7 +1209,7 @@
 TSmartPath& TPathContainer::GetAt(size_t stIndex)
 {
 	if(stIndex > m_vPaths.size())
-		THROW_CORE_EXCEPTION(eBoundsExceeded);
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
 
 	return m_vPaths.at(stIndex);
 }
@@ -1225,7 +1225,7 @@
 void TPathContainer::SetAt(size_t stIndex, const TSmartPath& spPath)
 {
 	if(stIndex > m_vPaths.size())
-		THROW_CORE_EXCEPTION(eBoundsExceeded);
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
 
 	m_vPaths[stIndex] = spPath;
 }
@@ -1240,7 +1240,7 @@
 void TPathContainer::DeleteAt(size_t stIndex)
 {
 	if(stIndex > m_vPaths.size())
-		THROW_CORE_EXCEPTION(eBoundsExceeded);
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
 
 	m_vPaths.erase(m_vPaths.begin() + stIndex);
 }
Index: src/libchcore/TSharedMemory.cpp
===================================================================
diff -u -rbe5d5dfa17e79a1db8e64ad2d2ed5faea30399cb -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TSharedMemory.cpp	(.../TSharedMemory.cpp)	(revision be5d5dfa17e79a1db8e64ad2d2ed5faea30399cb)
+++ src/libchcore/TSharedMemory.cpp	(.../TSharedMemory.cpp)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -39,7 +39,7 @@
 		{
 			DWORD dwRes = WaitForSingleObject(hMutex, 10000);
 			if(dwRes != WAIT_OBJECT_0)
-				THROW_CORE_EXCEPTION(eMutexTimedOut);
+				THROW_CORE_EXCEPTION(eErr_MutexTimedOut);
 		}
 	}
 
@@ -72,7 +72,7 @@
 void TSharedMemory::Create(const wchar_t* pszName, size_t stSize)
 {
 	if(!pszName || pszName[0] == _T('\0') || stSize == 0)
-		THROW_CORE_EXCEPTION(eInvalidArgument);
+		THROW_CORE_EXCEPTION(eErr_InvalidArgument);
 
 	Close();
 
@@ -83,30 +83,30 @@
 
 		SECURITY_DESCRIPTOR secDesc;
 		if(!InitializeSecurityDescriptor(&secDesc, SECURITY_DESCRIPTOR_REVISION))
-			THROW_CORE_EXCEPTION(eCannotOpenSharedMemory);
+			THROW_CORE_EXCEPTION(eErr_CannotOpenSharedMemory);
 
 		SECURITY_ATTRIBUTES secAttr;
 		secAttr.nLength = sizeof(secAttr);
 		secAttr.bInheritHandle = FALSE;
 		secAttr.lpSecurityDescriptor = &secDesc;
 
 		if(!SetSecurityDescriptorDacl(secAttr.lpSecurityDescriptor, TRUE, 0, FALSE))
-			THROW_CORE_EXCEPTION(eCannotOpenSharedMemory);
+			THROW_CORE_EXCEPTION(eErr_CannotOpenSharedMemory);
 
 		m_hMutex = ::CreateMutex(&secAttr, FALSE, wstrMutexName.c_str());
 		if(!m_hMutex)
-			THROW_CORE_EXCEPTION(eCannotOpenSharedMemory);
+			THROW_CORE_EXCEPTION(eErr_CannotOpenSharedMemory);
 
 		m_hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, &secAttr, PAGE_READWRITE, 0, boost::numeric_cast<DWORD>(stSize + sizeof(size_t)), pszName);
 		if(!m_hFileMapping) 
-			THROW_CORE_EXCEPTION(eCannotOpenSharedMemory);
+			THROW_CORE_EXCEPTION(eErr_CannotOpenSharedMemory);
 		else if(GetLastError() == ERROR_ALREADY_EXISTS)
-			THROW_CORE_EXCEPTION(eSharedMemoryAlreadyExists);		// shared memory already exists - cannot guarantee that the size is correct
+			THROW_CORE_EXCEPTION(eErr_SharedMemoryAlreadyExists);		// shared memory already exists - cannot guarantee that the size is correct
 
 		// Get a pointer to the file-mapped shared memory.
 		m_pMappedMemory = (BYTE*)MapViewOfFile(m_hFileMapping, FILE_MAP_WRITE, 0, 0, 0);
 		if(!m_pMappedMemory)
-			THROW_CORE_EXCEPTION(eCannotOpenSharedMemory);
+			THROW_CORE_EXCEPTION(eErr_CannotOpenSharedMemory);
 	}
 	catch(...)
 	{
@@ -143,12 +143,12 @@
 	{
 		m_hFileMapping = OpenFileMapping(FILE_MAP_READ, FALSE, pszName);
 		if(!m_hFileMapping) 
-			THROW_CORE_EXCEPTION(eCannotOpenSharedMemory);
+			THROW_CORE_EXCEPTION(eErr_CannotOpenSharedMemory);
 
 		// Get a pointer to the file-mapped shared memory.
 		m_pMappedMemory = (BYTE*)MapViewOfFile(m_hFileMapping, FILE_MAP_READ, 0, 0, 0);
 		if(!m_pMappedMemory)
-			THROW_CORE_EXCEPTION(eCannotOpenSharedMemory);
+			THROW_CORE_EXCEPTION(eErr_CannotOpenSharedMemory);
 	}
 	catch(...)
 	{
@@ -192,19 +192,19 @@
 void TSharedMemory::Read(TString& wstrData) const
 {
 	if(!m_hFileMapping || !m_pMappedMemory || m_stSize <= sizeof(size_t))
-		THROW_CORE_EXCEPTION(eSharedMemoryNotOpen);
+		THROW_CORE_EXCEPTION(eErr_SharedMemoryNotOpen);
 
 	TMutexLock lock(m_hMutex);
 
 	size_t stByteSize = *(size_t*)m_pMappedMemory;
 	if((stByteSize % 2) != 0)
-		THROW_CORE_EXCEPTION(eSharedMemoryInvalidFormat);
+		THROW_CORE_EXCEPTION(eErr_SharedMemoryInvalidFormat);
 
 	const wchar_t* pszRealData = (const wchar_t*)(m_pMappedMemory + sizeof(size_t));
 	size_t stCharCount = stByteSize / 2;
 
 	if(pszRealData[stCharCount - 1] != _T('\0'))
-		THROW_CORE_EXCEPTION(eSharedMemoryInvalidFormat);
+		THROW_CORE_EXCEPTION(eErr_SharedMemoryInvalidFormat);
 
 	wstrData = pszRealData;
 }
@@ -217,7 +217,7 @@
 void TSharedMemory::Write(const BYTE* pbyData, size_t stSize)
 {
 	if(stSize + sizeof(size_t) > m_stSize)
-		THROW_CORE_EXCEPTION(eBoundsExceeded);
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
 
 	TMutexLock lock(m_hMutex);
 
Index: src/libchcore/TString.cpp
===================================================================
diff -u -r3bc27cd61d57077aba80189b2fdde1500a2367a4 -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TString.cpp	(.../TString.cpp)	(revision 3bc27cd61d57077aba80189b2fdde1500a2367a4)
+++ src/libchcore/TString.cpp	(.../TString.cpp)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -74,6 +74,8 @@
 	{
 		TInternalStringData* pStringData = TInternalStringData::Allocate(m_stBufferSize);
 		BOOST_ASSERT(m_stBufferSize == pStringData->m_stBufferSize);
+		if(m_stBufferSize != pStringData->m_stBufferSize)
+			THROW_CORE_EXCEPTION(eErr_InternalProblem);
 
 		wcsncpy_s(pStringData->GetData(), pStringData->m_stBufferSize, GetData(), m_stStringLength + 1);
 		pStringData->m_stStringLength = m_stStringLength;
@@ -445,24 +447,30 @@
 	}
 }
 
-void TString::DeleteChar(size_t stIndex)
+bool TString::DeleteChar(size_t stIndex)
 {
 	size_t stCurrentLength = GetLength();
 	if(stIndex >= stCurrentLength)
-		return;
+		return false;
 
 	EnsureWritable(1);
 	wmemmove(m_pszStringData + stIndex, m_pszStringData + stIndex + 1, stCurrentLength - stIndex);
 	m_pszStringData[stCurrentLength - 1] = _T('\0');
 	GetInternalStringData()->SetStringLength(stCurrentLength - 1);
+
+	return true;
 }
 
-void TString::Delete(size_t stIndex, size_t stCount)
+bool TString::Delete(size_t stIndex, size_t stCount)
 {
 	size_t stCurrentLength = GetLength();
-	if(stIndex >= stCurrentLength)
-		return;
+	if(stIndex >= stCurrentLength || stCount == 0)
+		return false;
 
+	bool bResult = true; // by default we assume that the entire operation will be executed as planned
+	if(stIndex + stCount > stCurrentLength)   // but in case there is not enough data to delete, then we want to delete what we can, but return false
+		bResult = false;
+
 	EnsureWritable(stCurrentLength + 1);
 
 	size_t stCountToDelete = min(stCurrentLength - stIndex, stCount);
@@ -471,6 +479,8 @@
 	m_pszStringData[stCurrentLength - stCountToDelete] = _T('\0');
 
 	GetInternalStringData()->SetStringLength(stCurrentLength - stCountToDelete);
+
+	return bResult;
 }
 
 void TString::Split(const wchar_t* pszSeparators, TStringArray& rStrings) const
@@ -645,7 +655,10 @@
 		return m_pszStringData[tPos];
 	else
 	{
-		BOOST_ASSERT(tPos >= tSize);
+		BOOST_ASSERT(tPos < tSize);
+		if(tPos >= tSize)
+			THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
+
 		// would be nice to throw an exception here
 		return L'\0';
 	}
@@ -722,6 +735,8 @@
 
 		size_t stMaxBufSize = GetCurrentBufferSize();
 		BOOST_ASSERT(stCount + 1 <= stMaxBufSize);
+		if(stCount + 1 > stMaxBufSize)
+			THROW_CORE_EXCEPTION(eErr_InternalProblem);
 
 		wcsncpy_s(m_pszStringData, stMaxBufSize, pszStart, stCount);
 		m_pszStringData[stCount] = _T('\0');
Index: src/libchcore/TString.h
===================================================================
diff -u -r633a533cb6e741d44fe28aa56339e1d2709b1b27 -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TString.h	(.../TString.h)	(revision 633a533cb6e741d44fe28aa56339e1d2709b1b27)
+++ src/libchcore/TString.h	(.../TString.h)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -179,8 +179,8 @@
 	void RightSelf(size_t tLen);	///< Makes this TString it's Right part
 	void MidSelf(size_t tStart, size_t tLen = (size_t)-1);	///< Makes this TString it's middle part
 	
-	void DeleteChar(size_t stIndex);
-	void Delete(size_t stIndex, size_t stCount);
+	bool DeleteChar(size_t stIndex);
+	bool Delete(size_t stIndex, size_t stCount);
 
 	void Split(const wchar_t* pszSeparators, TStringArray& rStrings) const;
 
Index: src/libchcore/TStringArray.cpp
===================================================================
diff -u -r633a533cb6e741d44fe28aa56339e1d2709b1b27 -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TStringArray.cpp	(.../TStringArray.cpp)	(revision 633a533cb6e741d44fe28aa56339e1d2709b1b27)
+++ src/libchcore/TStringArray.cpp	(.../TStringArray.cpp)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -75,6 +75,55 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////////
+// class TStringArrayConstIterator
+
+TStringArrayConstIterator::TStringArrayConstIterator(std::vector<TString>::const_iterator iterArray) :
+	m_iterArray(iterArray)
+{
+}
+
+TStringArrayConstIterator::TStringArrayConstIterator()
+{
+}
+
+TStringArrayConstIterator::~TStringArrayConstIterator()
+{
+}
+
+TStringArrayConstIterator TStringArrayConstIterator::operator++(int)
+{
+	TStringArrayConstIterator iterCurrent = *this;
+	++m_iterArray;
+	return iterCurrent;
+}
+
+TStringArrayConstIterator& TStringArrayConstIterator::operator++()
+{
+	++m_iterArray;
+	return *this;
+}
+
+bool TStringArrayConstIterator::operator==(const TStringArrayConstIterator& rSrc) const
+{
+	return m_iterArray == rSrc.m_iterArray;
+}
+
+bool TStringArrayConstIterator::operator!=(const TStringArrayConstIterator& rSrc) const
+{
+	return m_iterArray != rSrc.m_iterArray;
+}
+
+const TString& TStringArrayConstIterator::operator*()
+{
+	return *m_iterArray;
+}
+
+const TString& TStringArrayConstIterator::operator*() const
+{
+	return *m_iterArray;
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////
 // class TStringArray
 TStringArray::TStringArray()
 {
@@ -91,16 +140,25 @@
 
 void TStringArray::InsertAt(size_t stIndex, const TString& str)
 {
+	if(stIndex >= m_vItems.size())
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
+
 	m_vItems.insert(m_vItems.begin() + stIndex, str);
 }
 
 void TStringArray::SetAt(size_t stIndex, const TString& str)
 {
+	if(stIndex >= m_vItems.size())
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
+
 	m_vItems[stIndex] = str;
 }
 
 void TStringArray::RemoveAt(size_t stIndex)
 {
+	if(stIndex >= m_vItems.size())
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
+
 	m_vItems.erase(m_vItems.begin() + stIndex);
 }
 
@@ -111,6 +169,9 @@
 
 const TString& TStringArray::GetAt(size_t stIndex) const
 {
+	if(stIndex >= m_vItems.size())
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
+
 	return m_vItems.at(stIndex);
 }
 
@@ -129,4 +190,14 @@
 	return TStringArrayIterator(m_vItems.end());
 }
 
+TStringArrayConstIterator TStringArray::Begin() const
+{
+	return TStringArrayConstIterator(m_vItems.begin());
+}
+
+TStringArrayConstIterator TStringArray::End() const
+{
+	return TStringArrayConstIterator(m_vItems.end());
+}
+
 END_CHCORE_NAMESPACE
Index: src/libchcore/TStringArray.h
===================================================================
diff -u -r633a533cb6e741d44fe28aa56339e1d2709b1b27 -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TStringArray.h	(.../TStringArray.h)	(revision 633a533cb6e741d44fe28aa56339e1d2709b1b27)
+++ src/libchcore/TStringArray.h	(.../TStringArray.h)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -55,10 +55,38 @@
 	friend class TStringArray;
 };
 
+class LIBCHCORE_API TStringArrayConstIterator
+{
+protected:
+	TStringArrayConstIterator(std::vector<TString>::const_iterator iterArray);
+
+public:
+	TStringArrayConstIterator();
+	~TStringArrayConstIterator();
+
+	TStringArrayConstIterator operator++(int);
+	TStringArrayConstIterator& operator++();
+
+	bool operator==(const TStringArrayConstIterator& rSrc) const;
+	bool operator!=(const TStringArrayConstIterator& rSrc) const;
+
+	const TString& operator*();
+	const TString& operator*() const;
+
+private:
+#pragma warning(push)
+#pragma warning(disable: 4251)
+	std::vector<TString>::const_iterator m_iterArray;
+#pragma warning(pop)
+
+	friend class TStringArray;
+};
+
 class LIBCHCORE_API TStringArray
 {
 public:
 	typedef TStringArrayIterator iterator;
+	typedef TStringArrayConstIterator const_iterator;
 
 public:
 	TStringArray();
@@ -75,6 +103,8 @@
 
 	TStringArrayIterator Begin();
 	TStringArrayIterator End();
+	TStringArrayConstIterator Begin() const;
+	TStringArrayConstIterator End() const;
 
 private:
 #pragma warning(push)
Index: src/libchcore/TTaskDefinition.cpp
===================================================================
diff -u -r0cd863a6e51b221c4f7bf6e7b83ddfc43a5d433f -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TTaskDefinition.cpp	(.../TTaskDefinition.cpp)	(revision 0cd863a6e51b221c4f7bf6e7b83ddfc43a5d433f)
+++ src/libchcore/TTaskDefinition.cpp	(.../TTaskDefinition.cpp)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -190,24 +190,24 @@
 	// basic information
 	// source paths to be processed
 	if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.SourcePaths.Path"), m_vSourcePaths) || m_vSourcePaths.IsEmpty())
-		THROW_CORE_EXCEPTION_STR(eMissingData, _T("Missing source paths"));
+		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
 	// destination path
 	if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath) || m_pathDestinationPath.IsEmpty())
-		THROW_CORE_EXCEPTION_STR(eMissingData, _T("Missing destination path"));
+		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
 	m_pathDestinationPath.AppendSeparatorIfDoesNotExist();
 
 	// type of the operation
 	int iOperation = eOperation_None;
 	if(!tTaskInfo.GetValue(_T("TaskDefinition.OperationType"), iOperation))
-		THROW_CORE_EXCEPTION_STR(eMissingData, _T("Missing operation type"));
+		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
 	m_tOperationPlan.SetOperationType((EOperationType)iOperation);
 
 	// and version of the task
 	if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.Version"), m_ullTaskVersion))
-		THROW_CORE_EXCEPTION_STR(eMissingData, _T("Missing task definition version"));
+		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
 	if(m_ullTaskVersion < CURRENT_TASK_VERSION)
 	{
@@ -219,7 +219,7 @@
 		m_bModified = true;
 	}
 	else if(m_ullTaskVersion > CURRENT_TASK_VERSION)
-		THROW_CORE_EXCEPTION_STR(eUnsupportedVersion, _T("Unsupported task version"));
+		THROW_CORE_EXCEPTION(eErr_UnsupportedVersion);
 
 	tTaskInfo.ExtractSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration);
 }
@@ -305,24 +305,24 @@
 	// basic information
 	// source paths to be processed
 	if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.SourcePaths.Path"), m_vSourcePaths) || m_vSourcePaths.IsEmpty())
-		THROW_CORE_EXCEPTION_STR(eMissingData, _T("Missing source paths"));
+		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
 	// destination path
 	if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath) || m_pathDestinationPath.IsEmpty())
-		THROW_CORE_EXCEPTION_STR(eMissingData, _T("Missing destination path"));
+		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
 	m_pathDestinationPath.AppendSeparatorIfDoesNotExist();
 
 	// type of the operation
 	int iOperation = eOperation_None;
 	if(!tTaskInfo.GetValue(_T("TaskDefinition.OperationType"), iOperation))
-		THROW_CORE_EXCEPTION_STR(eMissingData, _T("Missing operation type"));
+		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
 	m_tOperationPlan.SetOperationType((EOperationType)iOperation);
 
 	// and version of the task
 	if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.Version"), m_ullTaskVersion))
-		THROW_CORE_EXCEPTION_STR(eMissingData, _T("Missing task definition version"));
+		THROW_CORE_EXCEPTION(eErr_MissingXmlData);
 
 	if(m_ullTaskVersion < CURRENT_TASK_VERSION)
 	{
@@ -334,7 +334,7 @@
 		m_bModified = true;
 	}
 	else if(m_ullTaskVersion > CURRENT_TASK_VERSION)
-		THROW_CORE_EXCEPTION_STR(eUnsupportedVersion, _T("Unsupported task version"));
+		THROW_CORE_EXCEPTION(eErr_UnsupportedVersion);
 
 	tTaskInfo.ExtractSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration);
 }
Index: src/libchcore/TTaskOperationPlan.cpp
===================================================================
diff -u -r6dc950d4d76107421ff6eb62069b70f20bcc450e -re9926b6e83984d0f30bf2008b93874c7c483d95c
--- src/libchcore/TTaskOperationPlan.cpp	(.../TTaskOperationPlan.cpp)	(revision 6dc950d4d76107421ff6eb62069b70f20bcc450e)
+++ src/libchcore/TTaskOperationPlan.cpp	(.../TTaskOperationPlan.cpp)	(revision e9926b6e83984d0f30bf2008b93874c7c483d95c)
@@ -66,7 +66,7 @@
 	switch(eOperation)
 	{
 	case eOperation_None:
-		THROW_CORE_EXCEPTION_STR(eInvalidArgument, _T("Cannot set operation type 'none'"));
+		THROW_CORE_EXCEPTION(eErr_InvalidArgument);
 		break;
 
 	case eOperation_Copy:
@@ -91,7 +91,7 @@
 	BOOST_STATIC_ASSERT(eOperation_Move == eOperation_Max - 1);
 
 	default:
-		THROW_CORE_EXCEPTION_STR(eUnhandledCase, _T("Unhandled case"));
+		THROW_CORE_EXCEPTION(eErr_UnhandledCase);
 	}
 
 	m_eOperation = eOperation;
@@ -113,7 +113,7 @@
 {
 	boost::shared_lock<boost::shared_mutex> lock(m_lock);
 	if(stIndex >= m_vSubOperations.size())
-		THROW_CORE_EXCEPTION_STR(eBoundsExceeded, _T("Index out of bounds"));
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
 	else
 		return m_vSubOperations[stIndex].first;
 }
@@ -122,7 +122,7 @@
 {
 	boost::shared_lock<boost::shared_mutex> lock(m_lock);
 	if(stIndex >= m_vSubOperations.size())
-		THROW_CORE_EXCEPTION_STR(eBoundsExceeded, _T("Index out of bounds"));
+		THROW_CORE_EXCEPTION(eErr_BoundsExceeded);
 	else
 		return m_vSubOperations[stIndex].second;
 }