Index: src/libchcore/TTask.cpp
===================================================================
diff -u -N -rb7655a8f0721e5454befd29e3e067748eb0521e9 -r458af7bf8c35950fdeb4b906950437596324aea1
--- src/libchcore/TTask.cpp	(.../TTask.cpp)	(revision b7655a8f0721e5454befd29e3e067748eb0521e9)
+++ src/libchcore/TTask.cpp	(.../TTask.cpp)	(revision 458af7bf8c35950fdeb4b906950437596324aea1)
@@ -42,31 +42,29 @@
 ////////////////////////////////////////////////////////////////////////////
 // TTask members
 
-TTask::TTask(const ISerializerPtr& spSerializer, IFeedbackHandler* piFeedbackHandler) :
+TTask::TTask(const ISerializerPtr& spSerializer, const IFeedbackHandlerPtr& spFeedbackHandler) :
 	m_strTaskName(m_bBaseDataChanged),
 	m_eCurrentState(eTaskState_None, m_bBaseDataChanged),
 	m_pathLog(m_bBaseDataChanged),
 	m_pathDestinationPath(m_bBaseDataChanged),
 	m_log(),
-	m_piFeedbackHandler(piFeedbackHandler),
+	m_spFeedbackHandler(spFeedbackHandler),
 	m_arrSourcePathsInfo(m_vSourcePaths),
 	m_files(m_vSourcePaths),
 	m_bForce(false),
 	m_bContinue(false),
-	m_tSubTaskContext(m_tConfiguration, m_arrSourcePathsInfo, m_files, m_cfgTracker, m_log, piFeedbackHandler, m_workerThread, m_fsLocal),
+	m_tSubTaskContext(m_tConfiguration, m_arrSourcePathsInfo, m_files, m_cfgTracker, m_log, spFeedbackHandler, m_workerThread, m_fsLocal),
 	m_tSubTasksArray(),
 	m_spSerializer(spSerializer),
 	m_bWasSerialized(false)
 {
-	if(!piFeedbackHandler || !spSerializer)
+	if(!spFeedbackHandler || !spSerializer)
 		THROW_CORE_EXCEPTION(eErr_InvalidPointer);
 }
 
 TTask::~TTask()
 {
 	KillThread();
-	if(m_piFeedbackHandler)
-		m_piFeedbackHandler->Delete();
 }
 
 void TTask::SetTaskDefinition(const TTaskDefinition& rTaskDefinition)
@@ -456,7 +454,7 @@
 		switch(eResult)
 		{
 		case TSubTaskBase::eSubResult_Error:
-			m_piFeedbackHandler->RequestFeedback(IFeedbackHandler::eFT_OperationError, NULL);
+			m_spFeedbackHandler->RequestFeedback(IFeedbackHandler::eFT_OperationError, NULL);
 			SetTaskState(eTaskState_Error);
 			break;
 
@@ -475,7 +473,7 @@
 			break;
 
 		case TSubTaskBase::eSubResult_Continue:
-			m_piFeedbackHandler->RequestFeedback(IFeedbackHandler::eFT_OperationFinished, NULL);
+			m_spFeedbackHandler->RequestFeedback(IFeedbackHandler::eFT_OperationFinished, NULL);
 			SetTaskState(eTaskState_Finished);
 			break;
 
@@ -517,7 +515,7 @@
 	tProcessingGuard.PauseTimeTracking();
 
 	// let others know some error happened
-	m_piFeedbackHandler->RequestFeedback(IFeedbackHandler::eFT_OperationError, NULL);
+	m_spFeedbackHandler->RequestFeedback(IFeedbackHandler::eFT_OperationError, NULL);
 	SetTaskState(eTaskState_Error);
 
 	SetContinueFlag(false);