Index: src/libchcore/TModificationTracker.h
===================================================================
diff -u -N -r73583f2ca01fa1b2eae49bbc63bce46b9ecff5db -r293e52b38d46653068006262172018a0f0d0a31c
--- src/libchcore/TModificationTracker.h	(.../TModificationTracker.h)	(revision 73583f2ca01fa1b2eae49bbc63bce46b9ecff5db)
+++ src/libchcore/TModificationTracker.h	(.../TModificationTracker.h)	(revision 293e52b38d46653068006262172018a0f0d0a31c)
@@ -57,8 +57,11 @@
 	template<class V>
 	TModificationTracker& operator=(const V& rValue)
 	{
-		m_tValue = rValue;
-		m_chModified |= eMod_Modified;
+		if(m_tValue != rValue)
+		{
+			m_tValue = rValue;
+			m_chModified |= eMod_Modified;
+		}
 
 		return *this;
 	}
@@ -68,25 +71,20 @@
 		return m_tValue;
 	}
 
-	T& Value()
+	T& Modify()
 	{
 		m_chModified |= eMod_Modified;
 		return m_tValue;
 	}
 
-	const T* operator->() const
+	void ClearModifications() const
 	{
-		return &m_tValue;
-	}
-
-	void ClearModifications()
-	{
 		m_chModified = eMod_None;
 	}
 
 	bool IsModified() const
 	{
-		return (m_chModified & eMod_Modified) != 0;
+		return m_chModified != 0;
 	}
 
 	bool IsAdded() const
@@ -103,7 +101,7 @@
 	};
 
 	T m_tValue;
-	char m_chModified;
+	mutable char m_chModified;
 };
 
 END_CHCORE_NAMESPACE