 <p>That's normal as your object is a <code>reference type</code>. You should make a <code>deep copy</code> in order to reflect the changments in your history list </p> <p>try something like this </p> <pre><code>private void Employee_PropertyChanged(object sender, PropertyChangedEventArgs e) { var empCloned = DeepClone(this); History.Add(empCloned); //throw new NotImplementedException(); } </code></pre> <p><strong>Deep Copy</strong> </p> <pre><code>private T DeepClone&lt;T&gt;(T obj) { using (var ms = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); ms.Position = 0; return (T) formatter.Deserialize(ms); } } </code></pre>