diff --git a/src/integration-test/java/de/danielbechler/diff/ObjectDifferIT.groovy b/src/integration-test/java/de/danielbechler/diff/ObjectDifferIT.groovy
index 37e853f7..159379d8 100644
--- a/src/integration-test/java/de/danielbechler/diff/ObjectDifferIT.groovy
+++ b/src/integration-test/java/de/danielbechler/diff/ObjectDifferIT.groovy
@@ -16,8 +16,12 @@
 
 package de.danielbechler.diff
 
+import de.danielbechler.diff.comparison.PrimitiveDefaultValueMode;
 import de.danielbechler.diff.mock.*
 import de.danielbechler.diff.node.DiffNode
+import de.danielbechler.diff.node.DiffNode.State
+import de.danielbechler.diff.node.Visit
+import de.danielbechler.diff.node.DiffNode.Visitor
 import de.danielbechler.diff.path.NodePath
 import de.danielbechler.diff.selector.CollectionItemElementSelector
 import de.danielbechler.diff.selector.MapKeyElementSelector
@@ -362,4 +366,33 @@ public class ObjectDifferIT extends Specification {
 		  node.changed
 		  node.getChild('map').changed
 	}
+	
+	def "node should resolve State.REMOVED instead of State.ADDED"() {
+		given:
+			def differ = ObjectDifferBuilder.startBuilding().build()
+			def working = new ObjectWithCollectionOfComplexTypes()
+			def base = new ObjectWithCollectionOfComplexTypes()
+			def o = new ObjectWithPrimitivePropertyAndHashCodeAndEquals()
+			def visitor = new Visitor(){
+				def List<DiffNode> nodes = new ArrayList<>();
+				public void node(DiffNode node, Visit visit) {
+					if(node.hasChanges()){
+						nodes.add(node);
+					}
+				}
+			}		
+			base.getList().add(o)
+		when:
+			def node = differ.compare(working,base)
+			node.visit(visitor)
+			def list = visitor.getNodes();
+		then:
+		   node.hasChanges()
+		   !list.empty
+		   list.size() == 4
+		   list[0].state == State.CHANGED
+		   list[1].state == State.CHANGED
+		   list[2].state == State.REMOVED
+		   list[3].state == State.REMOVED					
+	}	
 }
diff --git a/src/test/java/de/danielbechler/diff/mock/ObjectWithCollectionOfComplexTypes.java b/src/test/java/de/danielbechler/diff/mock/ObjectWithCollectionOfComplexTypes.java
new file mode 100644
index 00000000..c203e78a
--- /dev/null
+++ b/src/test/java/de/danielbechler/diff/mock/ObjectWithCollectionOfComplexTypes.java
@@ -0,0 +1,13 @@
+package de.danielbechler.diff.mock;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ObjectWithCollectionOfComplexTypes {
+	
+	private List<ObjectWithPrimitivePropertyAndHashCodeAndEquals> list = new ArrayList<ObjectWithPrimitivePropertyAndHashCodeAndEquals>();
+
+	public List<ObjectWithPrimitivePropertyAndHashCodeAndEquals> getList() {
+		return list;
+	}
+}
diff --git a/src/test/java/de/danielbechler/diff/mock/ObjectWithPrimitivePropertyAndHashCodeAndEquals.java b/src/test/java/de/danielbechler/diff/mock/ObjectWithPrimitivePropertyAndHashCodeAndEquals.java
new file mode 100644
index 00000000..34eabbc5
--- /dev/null
+++ b/src/test/java/de/danielbechler/diff/mock/ObjectWithPrimitivePropertyAndHashCodeAndEquals.java
@@ -0,0 +1,38 @@
+package de.danielbechler.diff.mock;
+
+public class ObjectWithPrimitivePropertyAndHashCodeAndEquals {
+	
+	private int primitive;
+
+	public int getPrimitive() {
+		return primitive;
+	}
+
+	public void setPrimitive(int primitive) {
+		this.primitive = primitive;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + primitive;
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		ObjectWithPrimitivePropertyAndHashCodeAndEquals other = (ObjectWithPrimitivePropertyAndHashCodeAndEquals) obj;
+		if (primitive != other.primitive)
+			return false;
+		return true;
+	}
+	
+	
+}