diff --git a/release-notes/CREDITS b/release-notes/CREDITS
index 4cc71eb..43f3e57 100644
--- a/release-notes/CREDITS
+++ b/release-notes/CREDITS
@@ -900,14 +900,18 @@
     properties, @JsonSerialize(contentUsing)
    [1.9.7]
 
+Laurent Pireyn:
+  * Reported [JACKSON-831] External type id, explicit property do not work well together
+   [1.9.7]
+
 Jan Jan:   
   * Reported [JACKSON-832] (partial) Fix numeric range check for Longs (was not working)
    [1.9.7]
 
-Stuart Dootson:
-  * Reported [Issue-13] Runtime error passing multiple injected values to a constructor
+Klaus Reimer:   
+  * [JACKSON-834] Could not use @JsonFactory with non-String argument with Enums
    [1.9.7]
 
-Klaus Reimer:   
-  * [JACKSON-834] Could	not use	@JsonFactory with non-String argument with Enums
+Stuart Dootson:
+  * Reported [Issue-13] Runtime error passing multiple injected values to a constructor
    [1.9.7]
diff --git a/release-notes/VERSION b/release-notes/VERSION
index 70f8fbb..39deab3 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -24,6 +24,8 @@
   * [JACKSON-829] Custom serializers not working for List<String> properties,
     @JsonSerialize(contentUsing)
    (reported by James R)
+  * [JACKSON-831] External type id, explicit property do not work well together
+   (reported by Laurent P)
   * [JACKSON-832] (partial) Fix numeric range check for Longs (was not working)
    (reported by Jan J)
   * [JACKSON-834] Could not use @JsonFactory with non-String argument with Enums
diff --git a/src/mapper/java/org/codehaus/jackson/map/deser/BeanDeserializer.java b/src/mapper/java/org/codehaus/jackson/map/deser/BeanDeserializer.java
index bcd197a..3e9630a 100644
--- a/src/mapper/java/org/codehaus/jackson/map/deser/BeanDeserializer.java
+++ b/src/mapper/java/org/codehaus/jackson/map/deser/BeanDeserializer.java
@@ -1213,6 +1213,10 @@
             jp.nextToken();
             SettableBeanProperty prop = _beanProperties.find(propName);
             if (prop != null) { // normal case
+                // [JACKSON-831]: may have property AND be used as external type id:
+                if (jp.getCurrentToken().isScalarValue()) {
+                    ext.handleTypePropertyValue(jp, ctxt, propName, bean);
+                }
                 try {
                     prop.deserializeAndSet(jp, ctxt, bean);
                 } catch (Exception e) {
diff --git a/src/mapper/java/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java b/src/mapper/java/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java
index 38b7df1..335ff2c 100644
--- a/src/mapper/java/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java
+++ b/src/mapper/java/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java
@@ -50,6 +50,38 @@
     }
 
     /**
+     * Method called to see if given property/value pair is an external type
+     * id; and if so handle it. This is <b>only</b> to be called in case
+     * containing POJO has similarly named property as the external type id;
+     * otherwise {@link #handleToken} should be called instead.
+     */
+    public boolean handleTypePropertyValue(JsonParser jp, DeserializationContext ctxt,
+            String propName, Object bean)
+        throws IOException, JsonProcessingException
+    {
+        Integer I = _nameToPropertyIndex.get(propName);
+        if (I == null) {
+            return false;
+        }
+        int index = I.intValue();
+        ExtTypedProperty prop = _properties[index];
+        if (!prop.hasTypePropertyName(propName)) {
+            return false;
+        }
+        _typeIds[index] = jp.getText();
+        // note: can NOT skip child values (should always be String anyway)
+        boolean canDeserialize = (bean != null) && (_tokens[index] != null);
+        // Minor optimization: deserialize properties as soon as we have all we need:
+        if (canDeserialize) {
+            _deserialize(jp, ctxt, bean, index);
+            // clear stored data, to avoid deserializing+setting twice:
+            _typeIds[index] = null;
+            _tokens[index] = null;
+        }
+        return true;
+    }
+    
+    /**
      * Method called to ask handler to handle 
      */
     public boolean handleToken(JsonParser jp, DeserializationContext ctxt,
diff --git a/src/test/org/codehaus/jackson/map/jsontype/TestExternalId.java b/src/test/org/codehaus/jackson/map/jsontype/TestExternalId.java
index efbefa7..44c3698 100644
--- a/src/test/org/codehaus/jackson/map/jsontype/TestExternalId.java
+++ b/src/test/org/codehaus/jackson/map/jsontype/TestExternalId.java
@@ -204,5 +204,6 @@
         assertNotNull(result);
         assertNotNull(result.pet);
         assertSame(Dog.class, result.pet.getClass());
+        assertEquals("dog", result.petType);
     }
 }
