Index: src/libchcore/TSubTaskStatsInfo.h
===================================================================
diff -u -re96806b7f8ff7ca7e9f4afbea603e6351a3dc3e3 -rdb818324a61602e118506ca8b3973e44d997c8de
--- src/libchcore/TSubTaskStatsInfo.h	(.../TSubTaskStatsInfo.h)	(revision e96806b7f8ff7ca7e9f4afbea603e6351a3dc3e3)
+++ src/libchcore/TSubTaskStatsInfo.h	(.../TSubTaskStatsInfo.h)	(revision db818324a61602e118506ca8b3973e44d997c8de)
@@ -74,17 +74,16 @@
 		void SetTotalSize(unsigned long long ullTotalSize);
 
 		// current item
-		void IncreaseCurrentItemProcessedSize(unsigned long long ullIncreaseBy);
-		void DecreaseCurrentItemProcessedSize(unsigned long long ullDecreaseBy);
-		void SetCurrentItemProcessedSize(unsigned long long ullProcessedSize);
-
-		void IncreaseCurrentItemTotalSize(unsigned long long ullIncreaseBy);
-		void DecreaseCurrentItemTotalSize(unsigned long long ullDecreaseBy);
-		void SetCurrentItemTotalSize(unsigned long long ullTotalSize);
-
+		void SetCurrentItemSizes(unsigned long long ullProcessedSize, unsigned long long ullTotalSize);
+		void ResetCurrentItemProcessedSize();
 		unsigned long long GetCurrentItemProcessedSize() const;
 		unsigned long long GetCurrentItemTotalSize() const;
 
+		// current item processed and overall processed
+		bool WillAdjustProcessedSizeExceedTotalSize(file_size_t fsIncludedProcessedSize, file_size_t fsNewProcessedSize);
+		void AdjustProcessedSize(file_size_t fsIncludedProcessedSize, file_size_t fsNewProcessedSize);
+		void AdjustTotalSize(file_size_t fsIncludedSize, file_size_t fsNewSize);
+
 		bool CanCurrentItemSilentResume() const;
 		void SetCurrentItemSilentResume(bool bEnableSilentResume);
 
@@ -119,6 +118,8 @@
 
 		void UpdateTime(boost::upgrade_lock<boost::shared_mutex>& lock) const;
 
+		void VerifyProcessedVsTotal();
+
 	private:
 		enum EModifications
 		{