Added failing test about defensive copying with object id.
diff --git a/src/test/java/com/fasterxml/jackson/databind/struct/TestObjectIdDeserialization.java b/src/test/java/com/fasterxml/jackson/databind/struct/TestObjectIdDeserialization.java
index ec7ed7e..4f39697 100644
--- a/src/test/java/com/fasterxml/jackson/databind/struct/TestObjectIdDeserialization.java
+++ b/src/test/java/com/fasterxml/jackson/databind/struct/TestObjectIdDeserialization.java
@@ -1,5 +1,6 @@
 package com.fasterxml.jackson.databind.struct;
 
+import java.util.ArrayList;
 import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -135,6 +136,18 @@
         }
     }
 
+    static class DefensiveCompany {
+        public List<DefensiveEmployee> employees;
+
+        static class DefensiveEmployee extends Employee {
+
+            public void setReports(List<DefensiveEmployee> reports)
+            {
+                this.reports = new ArrayList<TestObjectId.Employee>(reports);
+            }
+        }
+    }
+
     @JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
     static class AnySetterObjectId {
         private Map<String, AnySetterObjectId> values = new HashMap<String, AnySetterObjectId>();
@@ -304,10 +317,23 @@
         assertEmployees(firstEmployee, secondEmployee);
     }
 
+    public void testForwardReferenceWithDefensiveCopy()
+        throws Exception
+    {
+        String json = "{\"employees\":[" + "{\"id\":1,\"name\":\"First\",\"manager\":null,\"reports\":[2]},"
+                + "{\"id\":2,\"name\":\"Second\",\"manager\":1,\"reports\":[]}" + "]}";
+        DefensiveCompany company = mapper.readValue(json, DefensiveCompany.class);
+        assertEquals(2, company.employees.size());
+        Employee firstEmployee = company.employees.get(0);
+        Employee secondEmployee = company.employees.get(1);
+        assertEmployees(firstEmployee, secondEmployee);
+    }
+
     private void assertEmployees(Employee firstEmployee, Employee secondEmployee)
     {
         assertEquals(1, firstEmployee.id);
         assertEquals(2, secondEmployee.id);
+        assertEquals(1, firstEmployee.reports.size());
         assertSame(secondEmployee, firstEmployee.reports.get(0)); // Ensure that forward reference was properly resolved and in order.
         assertSame(firstEmployee, secondEmployee.manager); // And that back reference is also properly resolved.
     }