Index: src/common/GTestMacros.h
===================================================================
diff -u -N
--- src/common/GTestMacros.h	(revision 0)
+++ src/common/GTestMacros.h	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -0,0 +1,16 @@
+#ifndef __GTESTMACROS_H__
+#define __GTESTMACROS_H__
+
+#define EXPECT_TIMEOUT(handle)\
+	{\
+		DWORD dwResult = WaitForSingleObject(handle, 0); \
+		EXPECT_EQ(WAIT_TIMEOUT, dwResult); \
+	}
+
+#define EXPECT_SIGNALED(handle)\
+	{\
+		DWORD dwResult = WaitForSingleObject(handle, 0); \
+		EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); \
+	}
+
+#endif
Index: src/libchcore/GTestMacros.h
===================================================================
diff -u -N
--- src/libchcore/GTestMacros.h	(revision bef894e38e5c1486824787cf8c47a87a0828b228)
+++ src/libchcore/GTestMacros.h	(revision 0)
@@ -1,16 +0,0 @@
-#ifndef __GTESTMACROS_H__
-#define __GTESTMACROS_H__
-
-#define EXPECT_TIMEOUT(handle)\
-	{\
-		DWORD dwResult = WaitForSingleObject(handle, 0); \
-		EXPECT_EQ(WAIT_TIMEOUT, dwResult); \
-	}
-
-#define EXPECT_SIGNALED(handle)\
-	{\
-		DWORD dwResult = WaitForSingleObject(handle, 0); \
-		EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); \
-	}
-
-#endif
Index: src/libchcore/libchcore.vc140.vcxproj
===================================================================
diff -u -N -r776c47d61a5a67d5e2541d58013e221c685460ec -r301444777085263aae7aff911dd56722f302597e
--- src/libchcore/libchcore.vc140.vcxproj	(.../libchcore.vc140.vcxproj)	(revision 776c47d61a5a67d5e2541d58013e221c685460ec)
+++ src/libchcore/libchcore.vc140.vcxproj	(.../libchcore.vc140.vcxproj)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -473,7 +473,7 @@
   <ItemGroup>
     <ClInclude Include="..\common\GenericTemplates\RandomAccessContainerWrapper.h" />
     <ClInclude Include="..\common\GenericTemplates\RandomAccessIterators.h" />
-    <ClInclude Include="GTestMacros.h" />
+    <ClInclude Include="..\common\GTestMacros.h" />
     <ClInclude Include="ITimestampProvider.h" />
     <ClInclude Include="MathFunctions.h" />
     <ClInclude Include="resource.h" />
Index: src/libchcore/libchcore.vc140.vcxproj.filters
===================================================================
diff -u -N -r776c47d61a5a67d5e2541d58013e221c685460ec -r301444777085263aae7aff911dd56722f302597e
--- src/libchcore/libchcore.vc140.vcxproj.filters	(.../libchcore.vc140.vcxproj.filters)	(revision 776c47d61a5a67d5e2541d58013e221c685460ec)
+++ src/libchcore/libchcore.vc140.vcxproj.filters	(.../libchcore.vc140.vcxproj.filters)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -77,9 +77,6 @@
     <ClInclude Include="StreamingHelpers.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="GTestMacros.h">
-      <Filter>Tests</Filter>
-    </ClInclude>
     <ClInclude Include="resource.h" />
     <ClInclude Include="ITimestampProvider.h">
       <Filter>Source Files\Tools\Timers</Filter>
@@ -105,6 +102,9 @@
     <ClInclude Include="..\common\GenericTemplates\RandomAccessContainerWrapper.h">
       <Filter>Source Files\Shared</Filter>
     </ClInclude>
+    <ClInclude Include="..\common\GTestMacros.h">
+      <Filter>Tests</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="dllmain.cpp">
Index: src/libchengine/GTestMacros.h
===================================================================
diff -u -N
--- src/libchengine/GTestMacros.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/GTestMacros.h	(revision 0)
@@ -1,16 +0,0 @@
-#ifndef __GTESTMACROS_H__
-#define __GTESTMACROS_H__
-
-#define EXPECT_TIMEOUT(handle)\
-	{\
-		DWORD dwResult = WaitForSingleObject(handle, 0); \
-		EXPECT_EQ(WAIT_TIMEOUT, dwResult); \
-	}
-
-#define EXPECT_SIGNALED(handle)\
-	{\
-		DWORD dwResult = WaitForSingleObject(handle, 0); \
-		EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); \
-	}
-
-#endif
Index: src/libchengine/TOverlappedThreadPool.cpp
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/TOverlappedThreadPool.cpp	(.../TOverlappedThreadPool.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TOverlappedThreadPool.cpp	(.../TOverlappedThreadPool.cpp)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -21,12 +21,6 @@
 
 namespace chengine
 {
-	TOverlappedThreadPool::TOverlappedThreadPool(HANDLE hKill) :
-		m_threadReader(hKill),
-		m_threadWriter(hKill)
-	{
-	}
-
 	TReaderThread& TOverlappedThreadPool::ReaderThread()
 	{
 		return m_threadReader;
Index: src/libchengine/TOverlappedThreadPool.h
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/TOverlappedThreadPool.h	(.../TOverlappedThreadPool.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TOverlappedThreadPool.h	(.../TOverlappedThreadPool.h)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -32,8 +32,6 @@
 	class TOverlappedThreadPool
 	{
 	public:
-		explicit TOverlappedThreadPool(HANDLE hKill);
-
 		TReaderThread& ReaderThread();
 		TWriterThread& WriterThread();
 
Index: src/libchengine/TPlainStringPool.cpp
===================================================================
diff -u -N
--- src/libchengine/TPlainStringPool.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TPlainStringPool.cpp	(revision 0)
@@ -1,96 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2014 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#include "stdafx.h"
-#include "TPlainStringPool.h"
-#include "../libchcore/TCoreException.h"
-
-using namespace chcore;
-
-namespace chengine
-{
-	TPlainStringPool::TPlainStringPool()
-	{
-	}
-
-	TPlainStringPool::~TPlainStringPool()
-	{
-		Clear();
-	}
-
-	wchar_t* TPlainStringPool::Alloc(size_t stCount)
-	{
-		if (stCount > BlockSize)
-			throw chcore::TCoreException(chcore::eErr_InvalidArgument, L"stCount", LOCATION);
-
-		// find block where the new string would fit
-		size_t stBlockCount = m_vBlocks.size();
-		for (size_t stIndex = 0; stIndex < stBlockCount; ++stIndex)
-		{
-			if (m_vBlocks[stIndex].second >= stCount)
-			{
-				wchar_t* pszResult = m_vBlocks[stIndex].first + BlockSize - m_vBlocks[stIndex].second;
-				m_vBlocks[stIndex].second -= stCount;
-				return pszResult;
-			}
-		}
-
-		wchar_t* pszBuffer = AllocNewBlock();
-		m_vBlocks.back().second -= stCount;
-
-		return pszBuffer;
-	}
-
-	wchar_t* TPlainStringPool::AllocForString(const wchar_t* pszString)
-	{
-		size_t stLen = wcslen(pszString) + 1;
-
-		wchar_t* pszBuffer = Alloc(stLen);
-		wmemcpy_s(pszBuffer, BlockSize, pszString, stLen);
-
-		return pszBuffer;
-	}
-
-	void TPlainStringPool::Clear(bool bLeaveSingleEmptyBlock)
-	{
-		size_t stBlockCount = m_vBlocks.size();
-		for (size_t stIndex = 0; stIndex < stBlockCount; ++stIndex)
-		{
-			if (!bLeaveSingleEmptyBlock || stIndex != 0)
-			{
-				delete[] m_vBlocks[stIndex].first;
-			}
-		}
-
-		if (bLeaveSingleEmptyBlock)
-		{
-			if (m_vBlocks.size() > 1)
-				m_vBlocks.erase(m_vBlocks.begin() + 1, m_vBlocks.end());
-		}
-		else
-			m_vBlocks.clear();
-	}
-
-	wchar_t* TPlainStringPool::AllocNewBlock()
-	{
-		wchar_t* pszBlock = new wchar_t[BlockSize];
-		m_vBlocks.push_back(std::make_pair(pszBlock, BlockSize));
-
-		return pszBlock;
-	}
-}
Index: src/libchengine/TPlainStringPool.h
===================================================================
diff -u -N
--- src/libchengine/TPlainStringPool.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TPlainStringPool.h	(revision 0)
@@ -1,54 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2014 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#ifndef __TPLAINSTRINGPOOL_H__
-#define __TPLAINSTRINGPOOL_H__
-
-#include "libchengine.h"
-
-namespace chengine
-{
-	class LIBCHENGINE_API TPlainStringPool
-	{
-	public:
-		static const size_t BlockSize = 256 * 1024;
-
-	public:
-		TPlainStringPool();
-		TPlainStringPool(const TPlainStringPool&) = delete;
-		~TPlainStringPool();
-
-		TPlainStringPool& operator=(const TPlainStringPool&) = delete;
-
-		wchar_t* Alloc(size_t stCount);
-		wchar_t* AllocForString(const wchar_t* pszString);
-
-		void Clear(bool bLeaveSingleEmptyBlock = true);
-
-	private:
-		wchar_t* AllocNewBlock();
-
-	private:
-#pragma warning(push)
-#pragma warning(disable: 4251)
-		std::vector<std::pair<wchar_t*, size_t> > m_vBlocks;	// memory blocks of size BlockSize => remaining size
-#pragma warning(pop)
-	};
-}
-
-#endif
Index: src/libchengine/TSQLiteDatabase.cpp
===================================================================
diff -u -N
--- src/libchengine/TSQLiteDatabase.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TSQLiteDatabase.cpp	(revision 0)
@@ -1,71 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2013 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#include "stdafx.h"
-#include "TSQLiteDatabase.h"
-#include "sqlite3/sqlite3.h"
-#include "../libchcore/ErrorCodes.h"
-#include "TSQLiteException.h"
-
-using namespace chcore;
-
-namespace chengine
-{
-	namespace sqlite
-	{
-		TSQLiteDatabase::TSQLiteDatabase(const TSmartPath& pathDatabase) :
-			m_pathDatabase(pathDatabase),
-			m_pDBHandle(nullptr),
-			m_bInTransaction(false)
-		{
-			int iResult = sqlite3_open16(m_pathDatabase.ToString(), &m_pDBHandle);
-			if (iResult != SQLITE_OK)
-			{
-				const wchar_t* pszMsg = (const wchar_t*)sqlite3_errmsg16(m_pDBHandle);
-				throw TSQLiteException(eErr_SQLiteCannotOpenDatabase, iResult, pszMsg, LOCATION);
-			}
-		}
-
-		TSQLiteDatabase::~TSQLiteDatabase()
-		{
-			int iResult = sqlite3_close_v2(m_pDBHandle);	// handles properly the nullptr DB Handle
-			iResult;
-			_ASSERTE(iResult == SQLITE_OK);
-		}
-
-		HANDLE TSQLiteDatabase::GetHandle()
-		{
-			return m_pDBHandle;
-		}
-
-		bool TSQLiteDatabase::GetInTransaction() const
-		{
-			return m_bInTransaction;
-		}
-
-		void TSQLiteDatabase::SetInTransaction(bool bInTransaction)
-		{
-			m_bInTransaction = bInTransaction;
-		}
-
-		TSmartPath TSQLiteDatabase::GetLocation() const
-		{
-			return m_pathDatabase;
-		}
-	}
-}
Index: src/libchengine/TSQLiteDatabase.h
===================================================================
diff -u -N
--- src/libchengine/TSQLiteDatabase.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TSQLiteDatabase.h	(revision 0)
@@ -1,60 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2013 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#ifndef __TSQLITEDATABASE_H__
-#define __TSQLITEDATABASE_H__
-
-#include "../libchcore/TPath.h"
-
-struct sqlite3;
-
-namespace chengine
-{
-	namespace sqlite
-	{
-		class TSQLiteDatabase
-		{
-		public:
-			explicit TSQLiteDatabase(const chcore::TSmartPath& strFilename);
-			TSQLiteDatabase(const TSQLiteDatabase&) = delete;
-			~TSQLiteDatabase();
-
-			TSQLiteDatabase& operator=(const TSQLiteDatabase&) = delete;
-
-			HANDLE GetHandle();
-
-			chcore::TSmartPath GetLocation() const;
-
-			bool GetInTransaction() const;
-
-		protected:
-			void SetInTransaction(bool bInTransaction);
-
-		private:
-			chcore::TSmartPath m_pathDatabase;
-			sqlite3* m_pDBHandle;
-			bool m_bInTransaction;		// global transaction state
-
-			friend class TSQLiteTransaction;
-		};
-
-		typedef std::shared_ptr<TSQLiteDatabase> TSQLiteDatabasePtr;
-	}
-}
-
-#endif
Index: src/libchengine/TSQLiteException.cpp
===================================================================
diff -u -N
--- src/libchengine/TSQLiteException.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TSQLiteException.cpp	(revision 0)
@@ -1,37 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2013 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#include "stdafx.h"
-#include "TSQLiteException.h"
-
-namespace chengine
-{
-	namespace sqlite
-	{
-		TSQLiteException::TSQLiteException(chcore::EGeneralErrors eErrorCode, int iSQLiteError, const wchar_t* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction) :
-			TBaseException(eErrorCode, pszMsg, pszFile, stLineNumber, pszFunction),
-			m_iSQLiteError(iSQLiteError)
-		{
-		}
-
-		int TSQLiteException::GetSQLiteError() const
-		{
-			return m_iSQLiteError;
-		}
-	}
-}
Index: src/libchengine/TSQLiteException.h
===================================================================
diff -u -N
--- src/libchengine/TSQLiteException.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TSQLiteException.h	(revision 0)
@@ -1,41 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2013 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#ifndef __TSQLITEEXCEPTION_H__
-#define __TSQLITEEXCEPTION_H__
-
-#include "../libchcore/TBaseException.h"
-
-namespace chengine
-{
-	namespace sqlite
-	{
-		class TSQLiteException : public chcore::TBaseException
-		{
-		public:
-			TSQLiteException(chcore::EGeneralErrors eErrorCode, int iSQLiteError, const wchar_t* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction);
-
-			int GetSQLiteError() const;
-
-		private:
-			int m_iSQLiteError;
-		};
-	}
-}
-
-#endif
Index: src/libchengine/TSQLiteStatement.cpp
===================================================================
diff -u -N
--- src/libchengine/TSQLiteStatement.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TSQLiteStatement.cpp	(revision 0)
@@ -1,348 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2013 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#include "stdafx.h"
-#include "TSQLiteStatement.h"
-#include "sqlite3/sqlite3.h"
-#include "TSQLiteException.h"
-#include <boost/numeric/conversion/cast.hpp>
-
-using namespace chcore;
-using namespace string;
-
-namespace chengine
-{
-	namespace sqlite
-	{
-		TSQLiteStatement::TSQLiteStatement(const TSQLiteDatabasePtr& spDatabase) :
-			m_pStatement(nullptr),
-			m_spDatabase(spDatabase),
-			m_bHasRow(false)
-		{
-			if (!m_spDatabase)
-				throw TSQLiteException(eErr_InvalidArgument, 0, _T("Invalid database provided"), LOCATION);
-		}
-
-		TSQLiteStatement::~TSQLiteStatement()
-		{
-			int iResult = sqlite3_finalize(m_pStatement);
-			_ASSERTE(iResult == SQLITE_OK); iResult;
-		}
-
-		void TSQLiteStatement::Close()
-		{
-			if (m_pStatement != nullptr)
-			{
-				int iResult = sqlite3_finalize(m_pStatement);
-				if (iResult != SQLITE_OK)
-					throw TSQLiteException(eErr_SQLiteFinalizeError, iResult, _T("Cannot finalize statement"), LOCATION);
-				m_pStatement = nullptr;
-			}
-			m_bHasRow = false;
-		}
-
-		void TSQLiteStatement::Prepare(PCWSTR pszQuery)
-		{
-			Close();
-
-			int iResult = sqlite3_prepare16_v2((sqlite3*)m_spDatabase->GetHandle(), pszQuery, -1, &m_pStatement, nullptr);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLitePrepareError, iResult, (PCTSTR)sqlite3_errmsg16((sqlite3*)m_spDatabase->GetHandle()), LOCATION);
-		}
-
-		TSQLiteStatement::EStepResult TSQLiteStatement::Step()
-		{
-			m_bHasRow = false;
-
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-
-			int iResult = sqlite3_step(m_pStatement);
-			switch (iResult)
-			{
-			case SQLITE_ROW:
-				m_bHasRow = true;
-				return eStep_HasRow;
-			case SQLITE_OK:
-			case SQLITE_DONE:
-				Reset();
-				return eStep_Finished;
-			default:
-			{
-				const wchar_t* pszErrMsg = (const wchar_t*)sqlite3_errmsg16((sqlite3*)m_spDatabase->GetHandle());
-				const size_t stMaxSize = 1024;
-				wchar_t szText[stMaxSize];
-				_snwprintf_s(szText, stMaxSize, _TRUNCATE, L"Cannot perform step on the statement. SQLite reported error: %s", pszErrMsg);
-				throw TSQLiteException(eErr_SQLiteStepError, iResult, szText, LOCATION);
-			}
-			}
-		}
-
-		int TSQLiteStatement::Changes()
-		{
-			return sqlite3_changes((sqlite3*)m_spDatabase->GetHandle());
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, bool bValue)
-		{
-			BindValue(iColumn, bValue ? 1 : 0);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, short siValue)
-		{
-			BindValue(iColumn, (int)siValue);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, unsigned short usiValue)
-		{
-			BindValue(iColumn, (unsigned int)usiValue);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, int iValue)
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-
-			int iResult = sqlite3_bind_int(m_pStatement, iColumn, iValue);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteBindError, iResult, _T("Cannot bind a parameter"), LOCATION);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, unsigned int uiValue)
-		{
-			BindValue(iColumn, *(int*)&uiValue);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, long lValue)
-		{
-			BindValue(iColumn, boost::numeric_cast<int>(lValue));
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, unsigned long ulValue)
-		{
-			BindValue(iColumn, boost::numeric_cast<unsigned int>(ulValue));
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, long long llValue)
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-
-			int iResult = sqlite3_bind_int64(m_pStatement, iColumn, llValue);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteBindError, iResult, _T("Cannot bind a parameter"), LOCATION);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, unsigned long long ullValue)
-		{
-			BindValue(iColumn, *(long long*)&ullValue);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, double dValue)
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-
-			int iResult = sqlite3_bind_double(m_pStatement, iColumn, dValue);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteBindError, iResult, _T("Cannot bind a parameter"), LOCATION);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, PCTSTR pszText)
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-
-			int iResult = sqlite3_bind_text16(m_pStatement, iColumn, pszText, -1, SQLITE_TRANSIENT);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteBindError, iResult, _T("Cannot bind a parameter"), LOCATION);
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, const TString& strText)
-		{
-			BindValue(iColumn, strText.c_str());
-		}
-
-		void TSQLiteStatement::BindValue(int iColumn, const TSmartPath& path)
-		{
-			BindValue(iColumn, path.ToString());
-		}
-
-		bool TSQLiteStatement::GetBool(int iCol)
-		{
-			return GetInt(iCol) != 0;
-		}
-
-		short TSQLiteStatement::GetShort(int iCol)
-		{
-			return boost::numeric_cast<short>(GetInt(iCol));
-		}
-
-		unsigned short TSQLiteStatement::GetUShort(int iCol)
-		{
-			return boost::numeric_cast<unsigned short>(GetUInt(iCol));
-		}
-
-		int TSQLiteStatement::GetInt(int iCol)
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-			if (!m_bHasRow)
-				throw TSQLiteException(eErr_SQLiteNoRowAvailable, 0, _T("No row available"), LOCATION);
-
-			return sqlite3_column_int(m_pStatement, iCol);
-		}
-
-		unsigned int TSQLiteStatement::GetUInt(int iCol)
-		{
-			int iVal = GetInt(iCol);
-			return *(unsigned int*)&iVal;
-		}
-
-		long TSQLiteStatement::GetLong(int iCol)
-		{
-			return boost::numeric_cast<long>(GetInt(iCol));
-		}
-
-		unsigned long TSQLiteStatement::GetULong(int iCol)
-		{
-			return boost::numeric_cast<unsigned long>(GetUInt(iCol));
-		}
-
-		long long TSQLiteStatement::GetInt64(int iCol)
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-			if (!m_bHasRow)
-				throw TSQLiteException(eErr_SQLiteNoRowAvailable, 0, _T("No row available"), LOCATION);
-
-			return sqlite3_column_int64(m_pStatement, iCol);
-		}
-
-		unsigned long long TSQLiteStatement::GetUInt64(int iCol)
-		{
-			long long llVal = GetInt64(iCol);
-			return *(unsigned long long*)&llVal;
-		}
-
-		double TSQLiteStatement::GetDouble(int iCol)
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-			if (!m_bHasRow)
-				throw TSQLiteException(eErr_SQLiteNoRowAvailable, 0, _T("No row available"), LOCATION);
-
-			return sqlite3_column_double(m_pStatement, iCol);
-		}
-
-		TString TSQLiteStatement::GetText(int iCol)
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-			if (!m_bHasRow)
-				throw TSQLiteException(eErr_SQLiteNoRowAvailable, 0, _T("No row available"), LOCATION);
-
-			return TString((const wchar_t*)sqlite3_column_text16(m_pStatement, iCol));
-		}
-
-		TSmartPath TSQLiteStatement::GetPath(int iCol)
-		{
-			return PathFromWString(GetText(iCol));
-		}
-
-		void TSQLiteStatement::ClearBindings()
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-
-			int iResult = sqlite3_clear_bindings(m_pStatement);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteBindError, iResult, _T("Cannot clear bindings"), LOCATION);
-		}
-
-		void TSQLiteStatement::Reset()
-		{
-			if (!m_pStatement)
-				throw TSQLiteException(eErr_SQLiteStatementNotPrepared, 0, _T("Tried to step on unprepared statement"), LOCATION);
-
-			int iResult = sqlite3_reset(m_pStatement);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteBindError, iResult, _T("Cannot reset statement"), LOCATION);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, bool& bValue)
-		{
-			bValue = GetBool(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, short& iValue)
-		{
-			iValue = GetShort(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, unsigned short& uiValue)
-		{
-			uiValue = GetUShort(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, int& iValue)
-		{
-			iValue = GetInt(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, unsigned int& uiValue)
-		{
-			uiValue = GetUInt(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, long& lValue)
-		{
-			lValue = GetLong(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, unsigned long& ulValue)
-		{
-			ulValue = GetULong(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, long long& llValue)
-		{
-			llValue = GetInt64(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, unsigned long long& ullValue)
-		{
-			ullValue = GetUInt64(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, double& dValue)
-		{
-			dValue = GetDouble(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, TString& strValue)
-		{
-			strValue = GetText(iCol);
-		}
-
-		void TSQLiteStatement::GetValue(int iCol, TSmartPath& pathValue)
-		{
-			pathValue = GetPath(iCol);
-		}
-	}
-}
Index: src/libchengine/TSQLiteStatement.h
===================================================================
diff -u -N
--- src/libchengine/TSQLiteStatement.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TSQLiteStatement.h	(revision 0)
@@ -1,108 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2013 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#ifndef __TSQLITESTATEMENT_H__
-#define __TSQLITESTATEMENT_H__
-
-#include "TSQLiteDatabase.h"
-
-struct sqlite3_stmt;
-
-namespace chengine
-{
-	namespace sqlite
-	{
-		typedef std::shared_ptr<sqlite3_stmt> SQLiteStatementHandle;
-
-		class TSQLiteStatement
-		{
-		public:
-			enum EStepResult
-			{
-				eStep_Finished,
-				eStep_HasRow
-			};
-
-		public:
-			explicit TSQLiteStatement(const TSQLiteDatabasePtr& spDatabase);
-			TSQLiteStatement(const TSQLiteStatement&) = delete;
-			~TSQLiteStatement();
-
-			TSQLiteStatement& operator=(const TSQLiteStatement&) = delete;
-
-			void Close();
-
-			void Prepare(PCWSTR pszQuery);
-
-			void BindValue(int iColumn, bool bValue);
-			void BindValue(int iColumn, short siValue);
-			void BindValue(int iColumn, unsigned short usiValue);
-			void BindValue(int iColumn, int iValue);
-			void BindValue(int iColumn, unsigned int uiValue);
-			void BindValue(int iColumn, long lValue);
-			void BindValue(int iColumn, unsigned long ulValue);
-			void BindValue(int iColumn, long long llValue);
-			void BindValue(int iColumn, unsigned long long ullValue);
-			void BindValue(int iColumn, double dValue);
-			void BindValue(int iColumn, PCTSTR pszText);
-			void BindValue(int iColumn, const string::TString& strText);
-			void BindValue(int iColumn, const chcore::TSmartPath& path);
-
-			void ClearBindings();
-
-			EStepResult Step();
-			int Changes();
-			void Reset();
-
-			bool GetBool(int iCol);
-			short GetShort(int iCol);
-			unsigned short GetUShort(int iCol);
-			int GetInt(int iCol);
-			unsigned int GetUInt(int iCol);
-			long GetLong(int iCol);
-			unsigned long GetULong(int iCol);
-			long long GetInt64(int iCol);
-			unsigned long long GetUInt64(int iCol);
-			double GetDouble(int iCol);
-			string::TString GetText(int iCol);
-			chcore::TSmartPath GetPath(int iCol);
-
-			void GetValue(int iCol, bool& bValue);
-			void GetValue(int iCol, short& iValue);
-			void GetValue(int iCol, unsigned short& uiValue);
-			void GetValue(int iCol, int& iValue);
-			void GetValue(int iCol, unsigned int& uiValue);
-			void GetValue(int iCol, long& lValue);
-			void GetValue(int iCol, unsigned long& ulValue);
-			void GetValue(int iCol, long long& llValue);
-			void GetValue(int iCol, unsigned long long& ullValue);
-			void GetValue(int iCol, double& dValue);
-			void GetValue(int iCol, string::TString& strValue);
-			void GetValue(int iCol, chcore::TSmartPath& pathValue);
-
-		private:
-			sqlite3_stmt* m_pStatement;
-			TSQLiteDatabasePtr m_spDatabase;
-			bool m_bHasRow;
-		};
-
-		typedef std::shared_ptr<TSQLiteStatement> TSQLiteStatementPtr;
-	}
-}
-
-#endif
Index: src/libchengine/TSQLiteTransaction.cpp
===================================================================
diff -u -N
--- src/libchengine/TSQLiteTransaction.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TSQLiteTransaction.cpp	(revision 0)
@@ -1,101 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2013 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#include "stdafx.h"
-#include "TSQLiteTransaction.h"
-#include "TSQLiteException.h"
-#include "sqlite3/sqlite3.h"
-
-using namespace chcore;
-
-namespace chengine
-{
-	namespace sqlite
-	{
-		TSQLiteTransaction::TSQLiteTransaction(const TSQLiteDatabasePtr& spDatabase) :
-			m_spDatabase(spDatabase),
-			m_bTransactionStarted(false)
-		{
-			if (!m_spDatabase)
-				throw TSQLiteException(eErr_InvalidArgument, 0, _T("Invalid database provided"), LOCATION);
-			Begin();
-		}
-
-		TSQLiteTransaction::~TSQLiteTransaction()
-		{
-			// try to rollback the transaction; this is the last resort
-			if (m_bTransactionStarted && m_spDatabase->GetInTransaction())
-			{
-				int iResult = sqlite3_exec((sqlite3*)m_spDatabase->GetHandle(), "ROLLBACK TRANSACTION;", nullptr, nullptr, nullptr);
-				iResult;
-				_ASSERTE(iResult == SQLITE_OK);
-				m_spDatabase->SetInTransaction(false);
-			}
-		}
-
-		void TSQLiteTransaction::Begin()
-		{
-			if (m_spDatabase->GetInTransaction())
-				return;
-
-			if (m_bTransactionStarted)
-				throw TSQLiteException(eErr_SQLiteCannotBeginTransaction, 0, _T("Transaction already started"), LOCATION);
-
-			int iResult = sqlite3_exec((sqlite3*)m_spDatabase->GetHandle(), "BEGIN TRANSACTION", nullptr, nullptr, nullptr);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteCannotBeginTransaction, iResult, _T("Cannot begin transaction"), LOCATION);
-
-			m_spDatabase->SetInTransaction(true);
-			m_bTransactionStarted = true;
-		}
-
-		void TSQLiteTransaction::Rollback()
-		{
-			// no transactions whatsoever (even on database)
-			if (!m_bTransactionStarted && !m_spDatabase->GetInTransaction())
-				throw TSQLiteException(eErr_SQLiteCannotRollbackTransaction, 0, _T("Transaction not started"), LOCATION);
-
-			// database has transaction started, but not by this object
-			if (!m_bTransactionStarted)
-				return;
-
-			int iResult = sqlite3_exec((sqlite3*)m_spDatabase->GetHandle(), "ROLLBACK TRANSACTION;", nullptr, nullptr, nullptr);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteCannotRollbackTransaction, iResult, _T("Cannot rollback transaction"), LOCATION);
-			m_spDatabase->SetInTransaction(false);
-			m_bTransactionStarted = false;
-		}
-
-		void TSQLiteTransaction::Commit()
-		{
-			// no transactions whatsoever (even on database)
-			if (!m_bTransactionStarted && !m_spDatabase->GetInTransaction())
-				throw TSQLiteException(eErr_SQLiteCannotRollbackTransaction, 0, _T("Transaction not started"), LOCATION);
-
-			// database has transaction started, but not by this object
-			if (!m_bTransactionStarted)
-				return;
-
-			int iResult = sqlite3_exec((sqlite3*)m_spDatabase->GetHandle(), "COMMIT TRANSACTION;", nullptr, nullptr, nullptr);
-			if (iResult != SQLITE_OK)
-				throw TSQLiteException(eErr_SQLiteCannotCommitTransaction, iResult, _T("Cannot commit transaction"), LOCATION);
-			m_spDatabase->SetInTransaction(false);
-			m_bTransactionStarted = false;
-		}
-	}
-}
Index: src/libchengine/TSQLiteTransaction.h
===================================================================
diff -u -N
--- src/libchengine/TSQLiteTransaction.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TSQLiteTransaction.h	(revision 0)
@@ -1,48 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2013 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#ifndef __TSQLITETRANSACTION_H__
-#define __TSQLITETRANSACTION_H__
-
-#include "TSQLiteDatabase.h"
-
-namespace chengine
-{
-	namespace sqlite
-	{
-		class TSQLiteTransaction
-		{
-		public:
-			explicit TSQLiteTransaction(const TSQLiteDatabasePtr& spDatabase);
-			TSQLiteTransaction(const TSQLiteTransaction&) = delete;
-			~TSQLiteTransaction();
-
-			TSQLiteTransaction& operator=(const TSQLiteTransaction&) = delete;
-
-			void Begin();
-			void Rollback();
-			void Commit();
-
-		private:
-			TSQLiteDatabasePtr m_spDatabase;
-			bool m_bTransactionStarted;		// states if transaction was started by this object
-		};
-	}
-}
-
-#endif
Index: src/libchengine/TSubTaskCopyMove.cpp
===================================================================
diff -u -N -r85b07e753393f661f7d8f528e4238ebb6e9e1204 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/TSubTaskCopyMove.cpp	(.../TSubTaskCopyMove.cpp)	(revision 85b07e753393f661f7d8f528e4238ebb6e9e1204)
+++ src/libchengine/TSubTaskCopyMove.cpp	(.../TSubTaskCopyMove.cpp)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -168,7 +168,7 @@
 
 		LOG_INFO(m_spLog) << strFormat.c_str();
 
-		TOverlappedThreadPool threadPool(rThreadController.GetKillThreadHandle());
+		TOverlappedThreadPool threadPool;
 
 		for(; fcIndex < fcSize; fcIndex++)
 		{
Index: src/libchengine/TThreadedQueueRunner.h
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/TThreadedQueueRunner.h	(.../TThreadedQueueRunner.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/TThreadedQueueRunner.h	(.../TThreadedQueueRunner.h)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -30,8 +30,7 @@
 	class TThreadedQueueRunner
 	{
 	public:
-		explicit TThreadedQueueRunner(HANDLE hKill) :
-			m_hKill(hKill),
+		explicit TThreadedQueueRunner() :
 			m_eventLocalKill(true, false)
 		{
 		}
@@ -107,7 +106,6 @@
 	private:
 		WaitableQueue<T> m_queue;
 		std::thread m_thread;
-		HANDLE m_hKill = nullptr;
 		TEvent m_eventLocalKill;
 	};
 }
Index: src/libchengine/Tests/TOrderedBufferQueueTests.cpp
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/Tests/TOrderedBufferQueueTests.cpp	(.../TOrderedBufferQueueTests.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/Tests/TOrderedBufferQueueTests.cpp	(.../TOrderedBufferQueueTests.cpp)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -2,7 +2,7 @@
 #include "gtest/gtest.h"
 #include "gmock/gmock.h"
 #include "../TOrderedBufferQueue.h"
-#include "../GTestMacros.h"
+#include "../../common/GTestMacros.h"
 
 class FallbackCollection : public std::vector<chengine::TOverlappedDataBuffer*>
 {
Index: src/libchengine/Tests/TOverlappedReaderTests.cpp
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/Tests/TOverlappedReaderTests.cpp	(.../TOverlappedReaderTests.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/Tests/TOverlappedReaderTests.cpp	(.../TOverlappedReaderTests.cpp)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -3,7 +3,7 @@
 #include "gmock/gmock.h"
 #include "../TOverlappedDataBuffer.h"
 #include "../../liblogger/TLogFileData.h"
-#include "../GTestMacros.h"
+#include "../../common/GTestMacros.h"
 #include "../TOverlappedMemoryPool.h"
 #include "../TOverlappedReader.h"
 
Index: src/libchengine/Tests/TOverlappedWriterTests.cpp
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/Tests/TOverlappedWriterTests.cpp	(.../TOverlappedWriterTests.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/Tests/TOverlappedWriterTests.cpp	(.../TOverlappedWriterTests.cpp)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -2,7 +2,7 @@
 #include "gtest/gtest.h"
 #include "gmock/gmock.h"
 #include "../TOverlappedWriter.h"
-#include "../GTestMacros.h"
+#include "../../common/GTestMacros.h"
 
 using namespace chengine;
 
Index: src/libchengine/Tests/TReadBufferQueueWrapperTests.cpp
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/Tests/TReadBufferQueueWrapperTests.cpp	(.../TReadBufferQueueWrapperTests.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/Tests/TReadBufferQueueWrapperTests.cpp	(.../TReadBufferQueueWrapperTests.cpp)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -3,7 +3,7 @@
 #include "gmock/gmock.h"
 #include "../TReadBufferQueueWrapper.h"
 #include <memory>
-#include "../GTestMacros.h"
+#include "../../common/GTestMacros.h"
 
 using namespace chengine;
 using namespace chcore;
Index: src/libchengine/Tests/TWriteBufferQueueWrapperTests.cpp
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/Tests/TWriteBufferQueueWrapperTests.cpp	(.../TWriteBufferQueueWrapperTests.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/Tests/TWriteBufferQueueWrapperTests.cpp	(.../TWriteBufferQueueWrapperTests.cpp)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -3,7 +3,7 @@
 #include "gmock/gmock.h"
 #include "../TWriteBufferQueueWrapper.h"
 #include <memory>
-#include "../GTestMacros.h"
+#include "../../common/GTestMacros.h"
 
 using namespace chengine;
 using namespace chcore;
Index: src/libchengine/Tests/TestsTThreadedQueueRunner.cpp
===================================================================
diff -u -N
--- src/libchengine/Tests/TestsTThreadedQueueRunner.cpp	(revision 0)
+++ src/libchengine/Tests/TestsTThreadedQueueRunner.cpp	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -0,0 +1,60 @@
+#include "stdafx.h"
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+#include "../TThreadedQueueRunner.h"
+#include "../TEvent.h"
+
+using namespace chengine;
+
+static void TestFunction(int& val)
+{
+	++val;
+}
+
+static void TestFunctionWithSleep(int& val)
+{
+	++val;
+	Sleep(50);
+}
+
+TEST(TestsTThreadedQueueRunner, PushSingleTask)
+{
+	TThreadedQueueRunner<std::function<void()>> runner;
+
+	int iValue = 0;
+	runner.PushTask(std::function<void()>(std::bind(&TestFunction, std::ref(iValue))));
+	runner.Stop();
+
+	EXPECT_EQ(1, iValue);
+}
+
+TEST(TestsTThreadedQueueRunner, PushMultipleTasks)
+{
+	TThreadedQueueRunner<std::function<void()>> runner;
+
+	int iValue = 0;
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.Stop();
+
+	EXPECT_EQ(5, iValue);
+}
+
+TEST(TestsTThreadedQueueRunner, PushMultipleTasksWithPreemptiveStart)
+{
+	TThreadedQueueRunner<std::function<void()>> runner;
+	runner.Start();
+
+	int iValue = 0;
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.PushTask(std::function<void()>(std::bind(&TestFunctionWithSleep, std::ref(iValue))));
+	runner.Stop();
+
+	EXPECT_EQ(5, iValue);
+}
Index: src/libchengine/Tests/TestsWaitableQueue.cpp
===================================================================
diff -u -N
--- src/libchengine/Tests/TestsWaitableQueue.cpp	(revision 0)
+++ src/libchengine/Tests/TestsWaitableQueue.cpp	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -0,0 +1,28 @@
+#include "stdafx.h"
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+#include "../WaitableQueue.h"
+#include "../../common/GTestMacros.h"
+
+using namespace chengine;
+
+TEST(TestsWaitableQueue, DefaultConstruction)
+{
+	WaitableQueue<int> queue;
+	EXPECT_TRUE(queue.GetWaitHandle() != INVALID_HANDLE_VALUE);
+	EXPECT_TIMEOUT(queue.GetWaitHandle());
+}
+
+TEST(TestsWaitableQueue, PopFrom_EmptyContainer)
+{
+	WaitableQueue<int> queue;
+	EXPECT_THROW(queue.PopFront(), std::exception);
+}
+
+TEST(TestsWaitableQueue, Push)
+{
+	WaitableQueue<int> queue;
+	queue.PushBack(5);
+	EXPECT_SIGNALED(queue.GetWaitHandle());
+	EXPECT_EQ(5, queue.PopFront());
+}
Index: src/libchengine/WaitableQueue.h
===================================================================
diff -u -N -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/WaitableQueue.h	(.../WaitableQueue.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libchengine/WaitableQueue.h	(.../WaitableQueue.h)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -23,6 +23,8 @@
 #include <mutex>
 #include <deque>
 #include "TEvent.h"
+#include "..\libchcore\ErrorCodes.h"
+#include "..\libchcore\TCoreException.h"
 
 namespace chengine
 {
@@ -46,6 +48,9 @@
 		{
 			std::lock_guard<std::mutex> lock(m_lock);
 
+			if (m_queue.empty())
+				throw chcore::TCoreException(chcore::eErr_BoundsExceeded, L"Tried to pop from empty container", LOCATION);
+
 			T value = std::move(m_queue.front());
 			m_queue.pop_front();
 
Index: src/libchengine/libchengine.vcxproj
===================================================================
diff -u -N -r85b07e753393f661f7d8f528e4238ebb6e9e1204 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/libchengine.vcxproj	(.../libchengine.vcxproj)	(revision 85b07e753393f661f7d8f528e4238ebb6e9e1204)
+++ src/libchengine/libchengine.vcxproj	(.../libchengine.vcxproj)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -471,6 +471,7 @@
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="..\common\GTestMacros.h" />
     <ClInclude Include="CommonDataTypes.h" />
     <ClInclude Include="ConfigNode.h" />
     <ClInclude Include="ConfigNodeContainer.h" />
@@ -480,7 +481,6 @@
     <ClInclude Include="EOperationTypes.h" />
     <ClInclude Include="ESubTaskTypes.h" />
     <ClInclude Include="ETaskCurrentState.h" />
-    <ClInclude Include="GTestMacros.h" />
     <ClInclude Include="IFeedbackHandler.h" />
     <ClInclude Include="IFeedbackHandlerFactory.h" />
     <ClInclude Include="IFilesystem.h" />
@@ -506,13 +506,13 @@
     <ClInclude Include="TFileInfoFwd.h" />
     <ClInclude Include="TFilesystemFileFeedbackWrapper.h" />
     <ClInclude Include="TFileException.h" />
+    <ClInclude Include="TObsoleteFiles.h" />
     <ClInclude Include="TOverlappedThreadPool.h" />
     <ClInclude Include="TSharedCount.h" />
     <ClInclude Include="TSharedCountMT.h" />
     <ClInclude Include="TThreadedQueueRunner.h" />
     <ClInclude Include="TLocalFilesystemFile.h" />
     <ClInclude Include="TLocalFilesystemFind.h" />
-    <ClInclude Include="TObsoleteFiles.h" />
     <ClInclude Include="TOrderedBufferQueue.h" />
     <ClInclude Include="TOverlappedMemoryPool.h" />
     <ClInclude Include="TOverlappedProcessorRange.h" />
@@ -521,16 +521,11 @@
     <ClInclude Include="TOverlappedReaderWriterFB.h" />
     <ClInclude Include="TOverlappedWriter.h" />
     <ClInclude Include="TOverlappedWriterFB.h" />
-    <ClInclude Include="TPlainStringPool.h" />
     <ClInclude Include="TScopedRunningTimeTracker.h" />
     <ClInclude Include="TScopedRunningTimeTrackerPause.h" />
     <ClInclude Include="TSimpleOrderedBufferQueue.h" />
     <ClInclude Include="TSizeFormatter.h" />
     <ClInclude Include="TSpeedTracker.h" />
-    <ClInclude Include="TSQLiteDatabase.h" />
-    <ClInclude Include="TSQLiteException.h" />
-    <ClInclude Include="TSQLiteStatement.h" />
-    <ClInclude Include="TSQLiteTransaction.h" />
     <ClInclude Include="TSubTaskArray.h" />
     <ClInclude Include="TSubTaskArrayStatsSnapshot.h" />
     <ClInclude Include="TSubTaskBase.h" />
@@ -643,6 +638,18 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="Tests\TestsTThreadedQueueRunner.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsWaitableQueue.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="Tests\TOrderedBufferQueueTests.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@@ -711,15 +718,10 @@
     <ClCompile Include="TOverlappedThreadPool.cpp" />
     <ClCompile Include="TOverlappedWriter.cpp" />
     <ClCompile Include="TOverlappedWriterFB.cpp" />
-    <ClCompile Include="TPlainStringPool.cpp" />
     <ClCompile Include="TScopedRunningTimeTracker.cpp" />
     <ClCompile Include="TScopedRunningTimeTrackerPause.cpp" />
     <ClCompile Include="TSizeFormatter.cpp" />
     <ClCompile Include="TSpeedTracker.cpp" />
-    <ClCompile Include="TSQLiteDatabase.cpp" />
-    <ClCompile Include="TSQLiteException.cpp" />
-    <ClCompile Include="TSQLiteStatement.cpp" />
-    <ClCompile Include="TSQLiteTransaction.cpp" />
     <ClCompile Include="TSubTaskArray.cpp" />
     <ClCompile Include="TSubTaskArrayStatsSnapshot.cpp" />
     <ClCompile Include="TSubTaskBase.cpp" />
Index: src/libchengine/libchengine.vcxproj.filters
===================================================================
diff -u -N -r85b07e753393f661f7d8f528e4238ebb6e9e1204 -r301444777085263aae7aff911dd56722f302597e
--- src/libchengine/libchengine.vcxproj.filters	(.../libchengine.vcxproj.filters)	(revision 85b07e753393f661f7d8f528e4238ebb6e9e1204)
+++ src/libchengine/libchengine.vcxproj.filters	(.../libchengine.vcxproj.filters)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -27,9 +27,6 @@
     <Filter Include="Source Files\Tools">
       <UniqueIdentifier>{1fddd996-c723-4b09-9c98-868df98fe204}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Source Files\Tools\SQLite">
-      <UniqueIdentifier>{e6da867d-b0bd-42d5-a0c8-43542984582f}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Source Files\Tools\Config">
       <UniqueIdentifier>{e4894f9f-1e1d-451a-9a02-60b9d682b60f}</UniqueIdentifier>
     </Filter>
@@ -194,18 +191,6 @@
     <ClInclude Include="TTaskInfo.h">
       <Filter>Source Files\Task Manager</Filter>
     </ClInclude>
-    <ClInclude Include="TSQLiteDatabase.h">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteException.h">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteStatement.h">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteTransaction.h">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClInclude>
     <ClInclude Include="TSpeedTracker.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
@@ -227,12 +212,6 @@
     <ClInclude Include="TTaskBaseData.h">
       <Filter>Source Files\Task</Filter>
     </ClInclude>
-    <ClInclude Include="TPlainStringPool.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TObsoleteFiles.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
     <ClInclude Include="TFeedbackHandlerWrapper.h">
       <Filter>Source Files\Feedback</Filter>
     </ClInclude>
@@ -311,9 +290,6 @@
     <ClInclude Include="TCoreEngine.h">
       <Filter>Source Files\Library files</Filter>
     </ClInclude>
-    <ClInclude Include="GTestMacros.h">
-      <Filter>Tests</Filter>
-    </ClInclude>
     <ClInclude Include="TOverlappedWriter.h">
       <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
     </ClInclude>
@@ -399,6 +375,12 @@
     <ClInclude Include="TBasePathDataContainer.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
+    <ClInclude Include="..\common\GTestMacros.h">
+      <Filter>Tests</Filter>
+    </ClInclude>
+    <ClInclude Include="TObsoleteFiles.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="TSubTaskArray.cpp">
@@ -485,18 +467,6 @@
     <ClCompile Include="TTaskInfo.cpp">
       <Filter>Source Files\Task Manager</Filter>
     </ClCompile>
-    <ClCompile Include="TSQLiteDatabase.cpp">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteException.cpp">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteStatement.cpp">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteTransaction.cpp">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClCompile>
     <ClCompile Include="TSpeedTracker.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
@@ -524,15 +494,9 @@
     <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
       <Filter>Tests</Filter>
     </ClCompile>
-    <ClCompile Include="TPlainStringPool.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
     <ClCompile Include="Tests\TestsTConfig.cpp">
       <Filter>Tests</Filter>
     </ClCompile>
-    <ClCompile Include="TObsoleteFiles.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
     <ClCompile Include="TFeedbackHandlerWrapper.cpp">
       <Filter>Source Files\Feedback</Filter>
     </ClCompile>
@@ -686,6 +650,15 @@
     <ClCompile Include="TBasePathDataContainer.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
+    <ClCompile Include="Tests\TestsWaitableQueue.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTThreadedQueueRunner.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="TObsoleteFiles.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="libchengine.rc">
Index: src/libserializer/TObsoleteFiles.cpp
===================================================================
diff -u -N
--- src/libserializer/TObsoleteFiles.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libserializer/TObsoleteFiles.cpp	(revision 0)
@@ -1,116 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2014 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#include "stdafx.h"
-#include "TObsoleteFiles.h"
-#include "ISerializerContainer.h"
-
-using namespace chcore;
-
-namespace serializer
-{
-	ObsoleteFileInfo::ObsoleteFileInfo(const TSmartPath& path, bool bAdded) :
-		m_path(path),
-		m_bAdded(bAdded)
-	{
-	}
-
-	ObsoleteFileInfo::ObsoleteFileInfo() :
-		m_bAdded(false)
-	{
-	}
-
-	TObsoleteFiles::TObsoleteFiles() :
-		m_oidLast(0)
-	{
-	}
-
-	TObsoleteFiles::~TObsoleteFiles()
-	{
-	}
-
-	void TObsoleteFiles::DeleteObsoleteFile(const TSmartPath& pathToDelete)
-	{
-		if (!DeleteFile(pathToDelete.ToString()) && GetLastError() != ERROR_FILE_NOT_FOUND)
-			m_mapPaths.insert(std::make_pair(++m_oidLast, ObsoleteFileInfo(pathToDelete, true)));
-	}
-
-	void TObsoleteFiles::Store(const ISerializerContainerPtr& spContainer) const
-	{
-		InitColumns(spContainer);
-
-		spContainer->DeleteRows(m_setRemovedObjects);
-		m_setRemovedObjects.Clear();
-
-		for (MapPaths::const_iterator iter = m_mapPaths.begin(); iter != m_mapPaths.end(); ++iter)
-		{
-			if (iter->second.m_bAdded)
-			{
-				ISerializerRowData& rRow = spContainer->GetRow(iter->first, true);
-				rRow.SetValue(_T("path"), iter->second.m_path);
-			}
-
-			iter->second.m_bAdded = false;
-		}
-	}
-
-	void TObsoleteFiles::Load(const ISerializerContainerPtr& spContainer)
-	{
-		InitColumns(spContainer);
-
-		ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader();
-
-		ObsoleteFileInfo tEntry;
-		object_id_t oid = 0;
-		while (spRowReader->Next())
-		{
-			spRowReader->GetValue(_T("id"), oid);
-			spRowReader->GetValue(_T("path"), tEntry.m_path);
-			tEntry.m_bAdded = false;
-
-			m_mapPaths.insert(std::make_pair(oid, tEntry));
-			m_oidLast = std::max(m_oidLast, oid);
-		}
-
-		m_setRemovedObjects.Clear();
-
-		// try to delete files
-		MapPaths::iterator iter = m_mapPaths.begin();
-		while (iter != m_mapPaths.end())
-		{
-			BOOL bDeleted = DeleteFile(iter->second.m_path.ToString());
-			if (bDeleted || GetLastError() == ERROR_FILE_NOT_FOUND)
-			{
-				m_setRemovedObjects.Add(iter->first);
-				iter = m_mapPaths.erase(iter);
-			}
-			else
-				++iter;
-		}
-	}
-
-	void TObsoleteFiles::InitColumns(const ISerializerContainerPtr& spContainer) const
-	{
-		IColumnsDefinition& rColumns = spContainer->GetColumnsDefinition();
-		if (rColumns.IsEmpty())
-		{
-			rColumns.AddColumn(_T("id"), ColumnType<object_id_t>::value);
-			rColumns.AddColumn(_T("path"), IColumnsDefinition::eType_path);
-		}
-	}
-}
Index: src/libserializer/TObsoleteFiles.h
===================================================================
diff -u -N
--- src/libserializer/TObsoleteFiles.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
+++ src/libserializer/TObsoleteFiles.h	(revision 0)
@@ -1,67 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2014 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#ifndef __TOBSOLETEFILES_H__
-#define __TOBSOLETEFILES_H__
-
-#include <map>
-#include "ISerializerRowData.h"
-#include "SerializerDataTypes.h"
-#include "../libchcore/TPath.h"
-#include "TRemovedObjects.h"
-
-namespace serializer
-{
-	struct ObsoleteFileInfo
-	{
-		ObsoleteFileInfo();
-		ObsoleteFileInfo(const chcore::TSmartPath& path, bool bAdded);
-
-		chcore::TSmartPath m_path;
-		mutable bool m_bAdded;
-	};
-
-	class LIBSERIALIZER_API TObsoleteFiles
-	{
-	public:
-		TObsoleteFiles();
-		TObsoleteFiles(const TObsoleteFiles&) = delete;
-		virtual ~TObsoleteFiles();
-
-		TObsoleteFiles& operator=(const TObsoleteFiles&) = delete;
-
-		void DeleteObsoleteFile(const chcore::TSmartPath& pathToDelete);
-
-		void Store(const ISerializerContainerPtr& spContainer) const;
-		void Load(const ISerializerContainerPtr& spContainer);
-
-		void InitColumns(const ISerializerContainerPtr& spContainer) const;
-
-	private:
-#pragma warning(push)
-#pragma warning(disable: 4251)
-		typedef std::map<object_id_t, ObsoleteFileInfo> MapPaths;
-		MapPaths m_mapPaths;
-#pragma warning(pop)
-
-		mutable TRemovedObjects m_setRemovedObjects;
-		object_id_t m_oidLast;
-	};
-}
-
-#endif
Index: src/libserializer/libserializer.vcxproj
===================================================================
diff -u -N -r898846e0eb46d5f8e3ccb8555d80458ee0e27751 -r301444777085263aae7aff911dd56722f302597e
--- src/libserializer/libserializer.vcxproj	(.../libserializer.vcxproj)	(revision 898846e0eb46d5f8e3ccb8555d80458ee0e27751)
+++ src/libserializer/libserializer.vcxproj	(.../libserializer.vcxproj)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -482,7 +482,6 @@
     <ClInclude Include="SerializerDataTypes.h" />
     <ClInclude Include="TFakeFileSerializer.h" />
     <ClInclude Include="TModificationTracker.h" />
-    <ClInclude Include="TObsoleteFiles.h" />
     <ClInclude Include="TPlainStringPool.h" />
     <ClInclude Include="TRemovedObjects.h" />
     <ClInclude Include="TSerializerException.h" />
@@ -556,7 +555,6 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="TFakeFileSerializer.cpp" />
-    <ClCompile Include="TObsoleteFiles.cpp" />
     <ClCompile Include="TPlainStringPool.cpp" />
     <ClCompile Include="TRemovedObjects.cpp" />
     <ClCompile Include="TSerializerException.cpp" />
Index: src/libserializer/libserializer.vcxproj.filters
===================================================================
diff -u -N -r898846e0eb46d5f8e3ccb8555d80458ee0e27751 -r301444777085263aae7aff911dd56722f302597e
--- src/libserializer/libserializer.vcxproj.filters	(.../libserializer.vcxproj.filters)	(revision 898846e0eb46d5f8e3ccb8555d80458ee0e27751)
+++ src/libserializer/libserializer.vcxproj.filters	(.../libserializer.vcxproj.filters)	(revision 301444777085263aae7aff911dd56722f302597e)
@@ -110,16 +110,12 @@
     <ClInclude Include="TPlainStringPool.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="TObsoleteFiles.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
     <ClInclude Include="TFakeFileSerializer.h">
       <Filter>Source Files\Serialization\Fake</Filter>
     </ClInclude>
     <ClInclude Include="SerializerDataTypes.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="resource.h" />
     <ClInclude Include="TRemovedObjects.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
@@ -129,6 +125,9 @@
     <ClInclude Include="TSharedModificationTracker.h">
       <Filter>Source Files\Tools\ModificationTrackers</Filter>
     </ClInclude>
+    <ClInclude Include="resource.h">
+      <Filter>Resource Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="dllmain.cpp">
@@ -215,9 +214,6 @@
     <ClCompile Include="TPlainStringPool.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
-    <ClCompile Include="TObsoleteFiles.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
     <ClCompile Include="TFakeFileSerializer.cpp">
       <Filter>Source Files\Serialization\Fake</Filter>
     </ClCompile>