Index: src/libchcore/TSharedModificationTracker.h
===================================================================
diff -u -N -ra44714d5c7ec0f50a376f4d0ea919ee5a224f834 -r95a466ca0a4f95851dcacf2b80e2084e0168b7e4
--- src/libchcore/TSharedModificationTracker.h	(.../TSharedModificationTracker.h)	(revision a44714d5c7ec0f50a376f4d0ea919ee5a224f834)
+++ src/libchcore/TSharedModificationTracker.h	(.../TSharedModificationTracker.h)	(revision 95a466ca0a4f95851dcacf2b80e2084e0168b7e4)
@@ -34,70 +34,49 @@
 		m_tValue(),
 		m_rBitset(rBitset)
 	{
-		m_rBitset[ChangeBit] = true;
+		MarkAsModified();
 	}
 
-	TSharedModificationTracker(const TSharedModificationTracker<T, Bitset, ChangeBit>& rSrc) :
-		m_tValue(rSrc.m_tValue),
-		m_rBitset(rSrc.m_rBitset)
-	{
-	}
+	TSharedModificationTracker(const TSharedModificationTracker<T, Bitset, ChangeBit>& rSrc) = delete;
 
 	TSharedModificationTracker(const TSharedModificationTracker<T, Bitset, ChangeBit>& rSrc, Bitset& rBitset) :
 		m_tValue(rSrc.m_tValue),
 		m_rBitset(rBitset)
 	{
-		m_rBitset[ChangeBit] = rBitset[ChangeBit];
+		m_rBitset[ChangeBit] = rSrc.m_rBitset[ChangeBit];
 	}
 
-	template<class V>
-	TSharedModificationTracker(Bitset& rBitset, const V& rValue) :
-		m_tValue(rValue),
+	template<class... V>
+	TSharedModificationTracker(Bitset& rBitset, const V&... rValues) :
+		m_tValue(rValues...),
 		m_rBitset(rBitset)
 	{
-		m_rBitset[ChangeBit] = true;
+		MarkAsModified();
 	}
 
-	template<class V1, class V2>
-	TSharedModificationTracker(Bitset& rBitset, const V1& rValue1, const V2& rValue2) :
-		m_tValue(rValue1, rValue2),
-		m_rBitset(rBitset)
-	{
-		m_rBitset[ChangeBit] = true;
-	}
-
 	TSharedModificationTracker& operator=(const TSharedModificationTracker<T, Bitset, ChangeBit>& rValue)
 	{
 		if(this != &rValue)
 		{
 			m_tValue = rValue.m_tValue;
-			if(m_tValue != rValue.m_tValue)
-				m_rBitset[ChangeBit] = true;
+			m_rBitset[ChangeBit] = rValue.m_rBitset[ChangeBit];
 		}
 
 		return *this;
 	}
 
-	TSharedModificationTracker& operator=(const T& rValue)
+	template<class V>
+	TSharedModificationTracker& operator=(const V& rValue)
 	{
 		if(m_tValue != rValue)
 		{
 			m_tValue = rValue;
-			m_rBitset[ChangeBit] = true;
+			MarkAsModified();
 		}
 
 		return *this;
 	}
 
-	template<class V>
-	TSharedModificationTracker& operator=(const V& rValue)
-	{
-		m_tValue = rValue;
-		m_rBitset[ChangeBit] = true;
-
-		return *this;
-	}
-
 	operator const T&() const
 	{
 		return m_tValue;
@@ -110,7 +89,7 @@
 
 	T& Modify()
 	{
-		m_rBitset[ChangeBit] = true;
+		MarkAsModified();
 		return m_tValue;
 	}
 
@@ -119,6 +98,16 @@
 		return m_rBitset[ChangeBit];
 	}
 
+	void MarkAsModified()
+	{
+		m_rBitset[ChangeBit] = true;
+	}
+
+	void MarkAsUnmodified()
+	{
+		m_rBitset[ChangeBit] = false;
+	}
+
 private:
 	T m_tValue;
 	Bitset& m_rBitset;