Index: src/libchcore/TSQLiteSerializerFactory.cpp
===================================================================
diff -u -N -rd32a79f0e9220bad2c6eeb5e8a986228b6e832fb -r30297d6aab17483da8e7b8323b4d17ff1a9f78d6
--- src/libchcore/TSQLiteSerializerFactory.cpp	(.../TSQLiteSerializerFactory.cpp)	(revision d32a79f0e9220bad2c6eeb5e8a986228b6e832fb)
+++ src/libchcore/TSQLiteSerializerFactory.cpp	(.../TSQLiteSerializerFactory.cpp)	(revision 30297d6aab17483da8e7b8323b4d17ff1a9f78d6)
@@ -39,7 +39,7 @@
 {
 }
 
-ISerializerPtr TSQLiteSerializerFactory::CreateSerializer(EObjectType eObjType, const TString& strNameHint)
+ISerializerPtr TSQLiteSerializerFactory::CreateSerializer(EObjectType eObjType, const TString& strNameHint, bool bForceRecreate)
 {
 	switch(eObjType)
 	{
@@ -53,28 +53,54 @@
 				strName = boost::lexical_cast<std::wstring>(u).c_str();
 			}
 
-			if(!strName.EndsWithNoCase(_T(".sqlite")))
-				strName += _T(".sqlite");
+			TSmartPath pathTask = PathFromString(strNameHint);
+			if(!pathTask.HasFileRoot())
+			{
+				if(!strName.EndsWithNoCase(_T(".sqlite")))
+					strName += _T(".sqlite");
 
-			TSmartPath pathTask(m_pathSerializeDir);
-			pathTask += PathFromString(strName);
+				TSmartPath pathTask(m_pathSerializeDir);
+				pathTask += PathFromString(strName);
+			}
 
+			if(bForceRecreate)
+			{
+				if(!DeleteFile(pathTask.ToString()))
+				{
+					DWORD dwLastError = GetLastError();
+					if(dwLastError != ERROR_FILE_NOT_FOUND)
+						THROW_CORE_EXCEPTION_WIN32(eErr_CannotDeleteFile, dwLastError);
+				}
+			}
+
 			TSQLiteSerializerPtr spSerializer(new TSQLiteSerializer(
 				pathTask,
 				TSQLiteTaskSchemaPtr(new TSQLiteTaskSchema)));
 
 			return spSerializer;
 		}
+
 	case ISerializerFactory::eObj_TaskManager:
 		{
 			TSmartPath pathTaskManager = m_pathSerializeDir + PathFromString(_T("tasks.sqlite"));
 
+			if(bForceRecreate)
+			{
+				if(!DeleteFile(pathTaskManager.ToString()))
+				{
+					DWORD dwLastError = GetLastError();
+					if(dwLastError != ERROR_FILE_NOT_FOUND)
+						THROW_CORE_EXCEPTION_WIN32(eErr_CannotDeleteFile, dwLastError);
+				}
+			}
+
 			TSQLiteSerializerPtr spSerializer(new TSQLiteSerializer(
 				pathTaskManager,
 				TTaskManagerSchemaPtr(new TSQLiteTaskManagerSchema)));
 
 			return spSerializer;
 		}
+
 	default:
 		THROW_CORE_EXCEPTION(eErr_InvalidArgument);
 	}