Fixed [JACKSON-806]
diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.java b/src/main/java/com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.java
index d3f67e7..145d163 100644
--- a/src/main/java/com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.java
+++ b/src/main/java/com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.java
@@ -50,6 +50,17 @@
      */
     public abstract String getInternalName();
 
+    /**
+     * Accessor that can be called to check whether property was included
+     * due to an explicit marker (usually annotation), or just by naming
+     * convention.
+     * 
+     * @return True if property was explicitly included (usually by having
+     *   one of components being annotated); false if inclusion was purely
+     *   due to naming or visibility definitions (that is, implicit)
+     */
+    public abstract boolean isExplicitlyIncluded();
+    
     /*
     /*****************************************************
     /* Capabilities
diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java
index 61da205..e9c720d 100644
--- a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java
+++ b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java
@@ -583,7 +583,7 @@
             // Otherwise, check ignorals
             if (prop.anyIgnorals()) {
                 // first: if one or more ignorals, and no explicit markers, remove the whole thing
-                if (!prop.anyExplicitNames()) {
+                if (!prop.isExplicitlyIncluded()) {
                     it.remove();
                     _addIgnored(prop.getName());
                     continue;
diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.java b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.java
index 5244eb8..6a783b6 100644
--- a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.java
+++ b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.java
@@ -107,6 +107,16 @@
 
     @Override
     public String getInternalName() { return _internalName; }
+
+    @Override
+    public boolean isExplicitlyIncluded() {
+        return _anyExplicitNames(_fields)
+                || _anyExplicitNames(_getters)
+                || _anyExplicitNames(_setters)
+                || _anyExplicitNames(_ctorParameters)
+                ;
+    }
+
     
     @Override
     public boolean hasGetter() { return _getters != null; }
@@ -477,14 +487,6 @@
     /**********************************************************
      */
 
-    public boolean anyExplicitNames() {
-        return _anyExplicitNames(_fields)
-                || _anyExplicitNames(_getters)
-                || _anyExplicitNames(_setters)
-                || _anyExplicitNames(_ctorParameters)
-                ;
-    }
-
     private <T> boolean _anyExplicitNames(Linked<T> n)
     {
         for (; n != null; n = n.next) {
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java
index f031a22..ff00f65 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java
@@ -632,7 +632,9 @@
         Iterator<BeanPropertyDefinition> it = properties.iterator();
         while (it.hasNext()) {
             BeanPropertyDefinition property = it.next();
-            if (!property.couldDeserialize()) {
+            // one caveat: as per [JACKSON-806], only remove implicit properties;
+            // explicitly annotated ones should remain
+            if (!property.couldDeserialize() && !property.isExplicitlyIncluded()) {
                 it.remove();
             }
         }
diff --git a/src/main/java/com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.java b/src/main/java/com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.java
index 93c06e2..d5dd92c 100644
--- a/src/main/java/com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.java
+++ b/src/main/java/com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.java
@@ -64,6 +64,10 @@
 
     @Override
     public String getInternalName() { return getName(); }
+
+    // hmmh. what should we claim here?
+    @Override
+    public boolean isExplicitlyIncluded() { return false; }
     
     /*
     /*****************************************************