Index: src/ch/task.cpp
===================================================================
diff -u -N -r6e8aa26e2428e3bc71099255c5911f57bc722100 -r8dd3566d66a35a662872eaaa45eef5049e71c3dc
--- src/ch/task.cpp	(.../task.cpp)	(revision 6e8aa26e2428e3bc71099255c5911f57bc722100)
+++ src/ch/task.cpp	(.../task.cpp)	(revision 8dd3566d66a35a662872eaaa45eef5049e71c3dc)
@@ -31,14 +31,14 @@
 #include "TTaskConfiguration.h"
 #include "TSubTaskContext.h"
 
-#include "Device IO.h"
 #include "TLocalFilesystem.h"
 #include "TSubTaskScanDirectory.h"
 #include "TSubTaskCopyMove.h"
 #include "TSubTaskDelete.h"
 
 ////////////////////////////////////////////////////////////////////////////
 // CTask members
+
 CTask::CTask(chcore::IFeedbackHandler* piFeedbackHandler, size_t stSessionUniqueID) :
 m_log(),
 m_piFeedbackHandler(piFeedbackHandler),
@@ -943,8 +943,30 @@
 	m_piFeedbackFactory = piFeedbackHandlerFactory;
 }
 
-CTaskPtr CTaskArray::CreateTask()
+CTaskPtr CTaskArray::CreateTask(const TTaskDefinition& tTaskDefinition)
 {
+	CTaskPtr spTask = CreateEmptyTask();
+	if(spTask)
+	{
+		spTask->SetTaskDefinition(tTaskDefinition);
+		Add(spTask);
+		spTask->Store();
+	}
+
+	return spTask;
+}
+
+CTaskPtr CTaskArray::ImportTask(const CString& strTaskPath)
+{
+	// load task definition from the new location
+	TTaskDefinition tTaskDefinition;
+	tTaskDefinition.Load(strTaskPath);
+
+	return CreateTask(tTaskDefinition);
+}
+
+CTaskPtr CTaskArray::CreateEmptyTask()
+{
 	BOOST_ASSERT(m_piFeedbackFactory);
 	if(!m_piFeedbackFactory)
 		return CTaskPtr();
@@ -954,7 +976,7 @@
 		return CTaskPtr();
 
 	BOOST_ASSERT(m_stNextSessionUniqueID != NO_TASK_SESSION_UNIQUE_ID);
-	CTaskPtr spTask(boost::make_shared<CTask>(piHandler, m_stNextSessionUniqueID++));
+	CTaskPtr spTask(new CTask(piHandler, m_stNextSessionUniqueID++));
 
 	// NO_TASK_SESSION_UNIQUE_ID is a special value so it should not be used to identify tasks
 	if(m_stNextSessionUniqueID == NO_TASK_SESSION_UNIQUE_ID)
@@ -1151,7 +1173,7 @@
 		bWorking = finder.FindNextFile();
 
 		// load data
-		spTask = CreateTask();
+		spTask = CreateEmptyTask();
 		try
 		{
 			spTask->Load(finder.GetFilePath());