diff --git a/release-notes/VERSION b/release-notes/VERSION
index cfffe0e..36db279 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -8,6 +8,7 @@
 * [JACKSON-887]: StackOverflow with parameterized sub-class field
  (reported by Alexander M)
 * [JACKSON-889]: Parsing error in 'nextFieldName()'
+* ???: Add support for updating values of polymorphic types.
 
 ------------------------------------------------------------------------
 === History: ===
diff --git a/src/mapper/java/org/codehaus/jackson/map/JsonDeserializer.java b/src/mapper/java/org/codehaus/jackson/map/JsonDeserializer.java
index fe71740..b986b71 100644
--- a/src/mapper/java/org/codehaus/jackson/map/JsonDeserializer.java
+++ b/src/mapper/java/org/codehaus/jackson/map/JsonDeserializer.java
@@ -61,7 +61,8 @@
                          T intoValue)
         throws IOException, JsonProcessingException
     {
-        throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException("Can not update object of type "
+                +intoValue.getClass().getName()+" (by deserializer of type "+getClass().getName()+")");
     }
 
     /**
diff --git a/src/mapper/java/org/codehaus/jackson/map/deser/StdDeserializerProvider.java b/src/mapper/java/org/codehaus/jackson/map/deser/StdDeserializerProvider.java
index 6fc6c2c..c59b99d 100644
--- a/src/mapper/java/org/codehaus/jackson/map/deser/StdDeserializerProvider.java
+++ b/src/mapper/java/org/codehaus/jackson/map/deser/StdDeserializerProvider.java
@@ -469,6 +469,16 @@
             // should never happen? (if it can, could call on that object)
             throw new IllegalStateException("Type-wrapped deserializer's deserializeWithType should never get called");
         }
-    }
 
+        @Override
+        public Object deserialize(JsonParser jp, DeserializationContext ctxt,
+                Object intoValue)
+            throws IOException, JsonProcessingException
+        {
+            /* 01-Mar-2013, tatu: Hmmh. Tough call as to what to do... need
+             *   to delegate, but will this work reliably? Let's just hope so:
+             */
+            return _deserializer.deserialize(jp,  ctxt, intoValue);
+        }
+    }
 }
diff --git a/src/test/org/codehaus/jackson/map/convert/TestPolymorphicUpdateValue.java b/src/test/org/codehaus/jackson/map/convert/TestPolymorphicUpdateValue.java
new file mode 100644
index 0000000..7201f85
--- /dev/null
+++ b/src/test/org/codehaus/jackson/map/convert/TestPolymorphicUpdateValue.java
@@ -0,0 +1,45 @@
+package org.codehaus.jackson.map.convert;
+
+import org.codehaus.jackson.annotate.*;
+
+import org.codehaus.jackson.map.*;
+
+/**
+ * Unit tests for verifying handling of update value on polymorphic
+ * objects.
+ */
+public class TestPolymorphicUpdateValue extends BaseMapTest
+{
+    @JsonTypeInfo(include=JsonTypeInfo.As.WRAPPER_ARRAY //PROPERTY
+            ,use=JsonTypeInfo.Id.NAME, property="type")
+    @JsonSubTypes(value={ @JsonSubTypes.Type(value=Child.class)})
+    abstract static class Parent {
+        public int x;
+        public int y;
+    }
+
+    @JsonTypeName("child")
+    public static class Child extends Parent {
+        public int w;
+        public int h;
+    }    
+    
+    /*
+    /********************************************************
+    /* Unit tests
+    /********************************************************
+     */
+
+    private final ObjectMapper MAPPER = new ObjectMapper();
+
+    public void testPolymorphicTest() throws Exception
+    {
+         Child c = new Child();
+         c.w = 10;
+         c.h = 11;
+         MAPPER.readerForUpdating(c).readValue("{\"x\":3,\"y\":4,\"w\":111}");
+         assertEquals(3, c.x);
+         assertEquals(4, c.y);
+         assertEquals(111, c.w);
+    }
+}
