Index: src/libchcore/TOverlappedWriter.cpp
===================================================================
diff -u -N -r593ca68706f3a3c7c2a3820b02a56fc24d5bea11 -rb941384e121190b6107f1c99b3233667e3daf4ce
--- src/libchcore/TOverlappedWriter.cpp	(.../TOverlappedWriter.cpp)	(revision 593ca68706f3a3c7c2a3820b02a56fc24d5bea11)
+++ src/libchcore/TOverlappedWriter.cpp	(.../TOverlappedWriter.cpp)	(revision b941384e121190b6107f1c99b3233667e3daf4ce)
@@ -49,7 +49,11 @@
 		if(m_bReleaseMode)
 			return nullptr;
 
-		return m_tBuffersToWrite.Pop();
+		TOverlappedDataBuffer* pBuffer = m_tBuffersToWrite.Pop();
+		if (pBuffer)
+			pBuffer->SetParam(this);
+
+		return pBuffer;
 	}
 
 	void TOverlappedWriter::AddFailedWriteBuffer(TOverlappedDataBuffer* pBuffer)
@@ -61,7 +65,7 @@
 			m_spEmptyBuffers->Push(pBuffer);
 		else
 		{
-			LOG_TRACE(m_spLog) << L"Queuing buffer as full (failed); buffer-order: " << pBuffer->GetFilePosition() <<
+			LOG_TRACE(m_spLog) << L"Queuing buffer " << pBuffer << L" as failed-write; buffer-order: " << pBuffer->GetFilePosition() <<
 				L", requested-data-size: " << pBuffer->GetRequestedDataSize() <<
 				L", real-data-size: " << pBuffer->GetRealDataSize() <<
 				L", file-position: " << pBuffer->GetFilePosition() <<
@@ -81,7 +85,11 @@
 		if(m_bReleaseMode)
 			return nullptr;
 
-		return m_tFinishedBuffers.PopError();
+		TOverlappedDataBuffer* pBuffer = m_tFinishedBuffers.PopError();
+		if (pBuffer)
+			pBuffer->SetParam(this);
+
+		return pBuffer;
 	}
 
 	TOverlappedDataBuffer* TOverlappedWriter::GetFinishedBuffer()
@@ -91,11 +99,16 @@
 
 		TOverlappedDataBuffer* pBuffer = m_tFinishedBuffers.Pop();
 
-		if (pBuffer && pBuffer->IsLastPart())
+		if (pBuffer)
 		{
-			if (m_pLastPartBuffer != nullptr)
-				throw TCoreException(eErr_InternalProblem, L"Encountered another 'last-part' finished buffer", LOCATION);
-			m_pLastPartBuffer = pBuffer;
+			if(pBuffer->IsLastPart())
+			{
+				if (m_pLastPartBuffer != nullptr)
+					throw TCoreException(eErr_InternalProblem, L"Encountered another 'last-part' finished buffer", LOCATION);
+				m_pLastPartBuffer = pBuffer;
+			}
+
+			pBuffer->SetParam(this);
 		}
 
 		return pBuffer;
@@ -112,6 +125,14 @@
 		if (pBuffer != m_pLastPartBuffer)
 			throw TCoreException(eErr_InvalidArgument, L"Trying to mark different buffer as finalized", LOCATION);
 
+		LOG_TRACE(m_spLog) << L"Marking buffer " << pBuffer << L" as finalized-write; buffer-order: " << pBuffer->GetFilePosition() <<
+			L", requested-data-size: " << pBuffer->GetRequestedDataSize() <<
+			L", real-data-size: " << pBuffer->GetRealDataSize() <<
+			L", file-position: " << pBuffer->GetFilePosition() <<
+			L", error-code: " << pBuffer->GetErrorCode() <<
+			L", status-code: " << pBuffer->GetStatusCode() <<
+			L", is-last-part: " << pBuffer->IsLastPart();
+
 		m_pLastPartBuffer = nullptr;
 	}
 
@@ -124,7 +145,7 @@
 			m_spEmptyBuffers->Push(pBuffer);
 		else
 		{
-			LOG_TRACE(m_spLog) << L"Queuing buffer as finished; buffer-order: " << pBuffer->GetFilePosition() <<
+			LOG_TRACE(m_spLog) << L"Queuing buffer " << pBuffer << L" as finished-write; buffer-order: " << pBuffer->GetFilePosition() <<
 				L", requested-data-size: " << pBuffer->GetRequestedDataSize() <<
 				L", real-data-size: " << pBuffer->GetRealDataSize() <<
 				L", file-position: " << pBuffer->GetFilePosition() <<