Index: src/libchcore/TOverlappedWriterFB.cpp
===================================================================
diff -u -N -ra0de3c317cb73a42ed4efbdf29b3a87243b03df4 -rc0d9a798f9fbbeda239b84721ed864f9727e1ddc
--- src/libchcore/TOverlappedWriterFB.cpp	(.../TOverlappedWriterFB.cpp)	(revision a0de3c317cb73a42ed4efbdf29b3a87243b03df4)
+++ src/libchcore/TOverlappedWriterFB.cpp	(.../TOverlappedWriterFB.cpp)	(revision c0d9a798f9fbbeda239b84721ed864f9727e1ddc)
@@ -50,7 +50,7 @@
 	{
 	}
 
-	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::OnWritePossible(bool& bStopProcessing, bool& bProcessedFlag)
+	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::OnWritePossible()
 	{
 		TOverlappedDataBuffer* pBuffer = m_spWriter->GetWriteBuffer();
 		if(!pBuffer)
@@ -62,27 +62,14 @@
 			return TSubTaskBase::eSubResult_Continue;
 		}
 
-		bool bSkip = false;
-		TSubTaskBase::ESubOperationResult eResult = m_spDstFile->WriteFileFB(*pBuffer, bSkip);
+		TSubTaskBase::ESubOperationResult eResult = m_spDstFile->WriteFileFB(*pBuffer);
 		if(eResult != TSubTaskBase::eSubResult_Continue)
-		{
 			m_spEmptyBuffers->Push(pBuffer);
-			bStopProcessing = true;
-		}
-		else if(bSkip)
-		{
-			m_spEmptyBuffers->Push(pBuffer);
 
-			m_spStats->AdjustProcessedSize(m_spStats->GetCurrentItemProcessedSize(), m_spSrcFileInfo->GetLength64());
-
-			bProcessedFlag = false;
-			bStopProcessing = true;
-		}
-
 		return eResult;
 	}
 
-	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::OnWriteFailed(bool& bStopProcessing, bool& bProcessedFlag)
+	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::OnWriteFailed()
 	{
 		TOverlappedDataBuffer* pBuffer = m_spWriter->GetFailedWriteBuffer();
 		if(!pBuffer)
@@ -94,32 +81,20 @@
 			return TSubTaskBase::eSubResult_Continue;
 		}
 
-		bool bSkip = false;
-		TSubTaskBase::ESubOperationResult eResult = m_spDstFile->HandleWriteError(*pBuffer, bSkip);
+		TSubTaskBase::ESubOperationResult eResult = m_spDstFile->HandleWriteError(*pBuffer);
 		if(eResult == TSubTaskBase::eSubResult_Retry)
 		{
 			m_spDstFile->Close();
 			m_spWriter->AddRetryBuffer(pBuffer);
+			eResult = TSubTaskBase::eSubResult_Continue;
 		}
 		else if(eResult != TSubTaskBase::eSubResult_Continue)
-		{
 			m_spEmptyBuffers->Push(pBuffer);
-			bStopProcessing = true;
-		}
-		else if(bSkip)
-		{
-			m_spEmptyBuffers->Push(pBuffer);
 
-			m_spStats->AdjustProcessedSize(m_spStats->GetCurrentItemProcessedSize(), m_spSrcFileInfo->GetLength64());
-
-			bProcessedFlag = false;
-			bStopProcessing = true;
-		}
-
 		return eResult;
 	}
 
-	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::OnWriteFinished(bool& bStopProcessing, bool& bProcessedFlag)
+	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::OnWriteFinished(bool& bStopProcessing)
 	{
 		TOverlappedDataBuffer* pBuffer = m_spWriter->GetFinishedBuffer();
 		if(!pBuffer)
@@ -129,97 +104,63 @@
 
 		if(m_bReleaseMode)
 		{
-			bool bSkip = false;
-			AdjustProcessedSize(fsWritten, bSkip);	// ignore return value as we're already in release mode
+			AdjustProcessedSize(fsWritten);	// ignore return value as we're already in release mode
 
 			m_spEmptyBuffers->Push(pBuffer);
-			bProcessedFlag = pBuffer->IsLastPart() && (pBuffer->GetBytesTransferred() == fsWritten);
 
 			return TSubTaskBase::eSubResult_Continue;
 		}
 
 		TSubTaskBase::ESubOperationResult eResult = TSubTaskBase::eSubResult_Continue;
 		if(pBuffer->IsLastPart())
 		{
-			bool bSkip = false;
-			eResult = m_spDstFile->FinalizeFileFB(*pBuffer, bSkip);
-			if(eResult != TSubTaskBase::eSubResult_Continue)
+			eResult = m_spDstFile->FinalizeFileFB(*pBuffer);
+			if (eResult != TSubTaskBase::eSubResult_Continue)
 			{
 				m_spEmptyBuffers->Push(pBuffer);
-				bStopProcessing = true;
 				return eResult;
 			}
-			else if(bSkip)
-			{
-				m_spEmptyBuffers->Push(pBuffer);
-
-				m_spStats->AdjustProcessedSize(m_spStats->GetCurrentItemProcessedSize(), m_spSrcFileInfo->GetLength64());
-
-				bProcessedFlag = false;
-				bStopProcessing = true;
-				return eResult;
-			}
 		}
 
 		// in case we read past the original eof, try to get new file size from filesystem
-		bool bSkip = false;
-		eResult = AdjustProcessedSize(fsWritten, bSkip);
+		eResult = AdjustProcessedSize(fsWritten);
 		if(eResult != TSubTaskBase::eSubResult_Continue)
 		{
 			m_spEmptyBuffers->Push(pBuffer);
-			bStopProcessing = true;
 			return eResult;
 		}
-		else if(bSkip)
-		{
-			m_spEmptyBuffers->Push(pBuffer);
 
-			bProcessedFlag = false;
-			bStopProcessing = true;
-			return eResult;
-		}
-
 		// stop iterating through file
 		bStopProcessing = pBuffer->IsLastPart();
 		if(bStopProcessing)
 		{
 			m_spWriter->MarkAsFinalized(pBuffer);
 
 			// this is the end of copying of src file - in case it is smaller than expected fix the stats so that difference is accounted for
-			eResult = AdjustFinalSize(bSkip);
+			eResult = AdjustFinalSize();
 			if(eResult != TSubTaskBase::eSubResult_Continue)
 			{
 				m_spEmptyBuffers->Push(pBuffer);
-				bStopProcessing = true;
 				return eResult;
 			}
-			else if(bSkip)
-			{
-				m_spEmptyBuffers->Push(pBuffer);
 
-				bProcessedFlag = false;
-				bStopProcessing = true;
-				return eResult;
-			}
-
-			bProcessedFlag = true;
 			m_spStats->ResetCurrentItemProcessedSize();
 		}
 
 		m_spEmptyBuffers->Push(pBuffer);
 		return eResult;
 	}
 
-	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::AdjustProcessedSize(file_size_t fsWritten, bool& bSkip)
+	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::AdjustProcessedSize(file_size_t fsWritten)
 	{
 		TSubTaskBase::ESubOperationResult eResult = TSubTaskBase::eSubResult_Continue;
 
 		// in case we read past the original eof, try to get new file size from filesystem
 		if(m_spStats->WillAdjustProcessedSizeExceedTotalSize(0, fsWritten))
 		{
 			file_size_t fsNewSize = 0;
-			eResult = m_spSrcFile->GetFileSize(fsNewSize, bSkip);
-			if(eResult != TSubTaskBase::eSubResult_Continue || bSkip)
+			eResult = m_spSrcFile->GetFileSize(fsNewSize);
+			if(eResult != TSubTaskBase::eSubResult_Continue)
 				return eResult;
 
 			if(fsNewSize == m_spSrcFileInfo->GetLength64())
@@ -234,7 +175,7 @@
 		return eResult;
 	}
 
-	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::AdjustFinalSize(bool& bSkip)
+	TSubTaskBase::ESubOperationResult TOverlappedWriterFB::AdjustFinalSize()
 	{
 		TSubTaskBase::ESubOperationResult eResult = TSubTaskBase::eSubResult_Continue;
 
@@ -243,8 +184,8 @@
 		if(ullCIProcessedSize < ullCITotalSize)
 		{
 			file_size_t fsNewSize = 0;
-			eResult = m_spSrcFile->GetFileSize(fsNewSize, bSkip);
-			if(eResult != TSubTaskBase::eSubResult_Continue || bSkip)
+			eResult = m_spSrcFile->GetFileSize(fsNewSize);
+			if(eResult != TSubTaskBase::eSubResult_Continue)
 				return eResult;
 
 			if(fsNewSize == m_spSrcFileInfo->GetLength64())