diff --git a/release-notes/CREDITS-2.x b/release-notes/CREDITS-2.x
index d191f27..7af3dee 100644
--- a/release-notes/CREDITS-2.x
+++ b/release-notes/CREDITS-2.x
@@ -837,3 +837,8 @@
 Christoph (cfiehe@github.com)
   * Contributed #2299: Fix for using jackson-databind in an OSGi environment under Android
    (2.9.9)
+
+Cyril Martin (mcoolive@github.com)
+  * Reported #2303: Deserialize null, when java type is "TypeRef of TypeRef of T",
+    does not provide "Type(Type(null))"
+   (2.9.9)
diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x
index 54779ad..720082a 100644
--- a/release-notes/VERSION-2.x
+++ b/release-notes/VERSION-2.x
@@ -16,6 +16,8 @@
  (reported by Joffrey B)
 #2299: Fix for using jackson-databind in an OSGi environment under Android
  (contributed by Christoph F)
+#2303: Deserialize null, when java type is "TypeRef of TypeRef of T", does not provide "Type(Type(null))"
+ (reported by Cyril M)
 - Prevent String coercion of `null` in `WritableObjectId` when calling `JsonGenerator.writeObjectId()`,
   mostly relevant for formats like YAML that have native Object Ids
 
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/CreatorProperty.java b/src/main/java/com/fasterxml/jackson/databind/deser/CreatorProperty.java
index 2d42a81..f9badf8 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/CreatorProperty.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/CreatorProperty.java
@@ -131,7 +131,9 @@
         if (_valueDeserializer == deser) {
             return this;
         }
-        return new CreatorProperty(this, deser, _nullProvider);
+        // 07-May-2019, tatu: As per [databind#2303], must keep VD/NVP in-sync if they were
+        NullValueProvider nvp = (_valueDeserializer == _nullProvider) ? deser : _nullProvider;
+        return new CreatorProperty(this, deser, nvp);
     }
 
     @Override
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/impl/FieldProperty.java b/src/main/java/com/fasterxml/jackson/databind/deser/impl/FieldProperty.java
index d8b38bb..973c85b 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/impl/FieldProperty.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/impl/FieldProperty.java
@@ -89,7 +89,9 @@
         if (_valueDeserializer == deser) {
             return this;
         }
-        return new FieldProperty(this, deser, _nullProvider);
+        // 07-May-2019, tatu: As per [databind#2303], must keep VD/NVP in-sync if they were
+        NullValueProvider nvp = (_valueDeserializer == _nullProvider) ? deser : _nullProvider;
+        return new FieldProperty(this, deser, nvp);
     }
 
     @Override
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/impl/MethodProperty.java b/src/main/java/com/fasterxml/jackson/databind/deser/impl/MethodProperty.java
index aeeeba6..08111d4 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/impl/MethodProperty.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/impl/MethodProperty.java
@@ -80,7 +80,9 @@
         if (_valueDeserializer == deser) {
             return this;
         }
-        return new MethodProperty(this, deser, _nullProvider);
+        // 07-May-2019, tatu: As per [databind#2303], must keep VD/NVP in-sync if they were
+        NullValueProvider nvp = (_valueDeserializer == _nullProvider) ? deser : _nullProvider;
+        return new MethodProperty(this, deser, nvp);
     }
 
     @Override
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.java b/src/main/java/com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.java
index f1b62ab..449cc79 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.java
@@ -50,7 +50,9 @@
         if (_valueDeserializer == deser) {
             return this;
         }
-        return new ObjectIdReferenceProperty(this, deser, _nullProvider);
+        // 07-May-2019, tatu: As per [databind#2303], must keep VD/NVP in-sync if they were
+        NullValueProvider nvp = (_valueDeserializer == _nullProvider) ? deser : _nullProvider;
+        return new ObjectIdReferenceProperty(this, deser, nvp);
     }
 
     @Override
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.java b/src/main/java/com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.java
index 6316e28..7fe91fc 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.java
@@ -51,7 +51,9 @@
         if (_valueDeserializer == deser) {
             return this;
         }
-        return new ObjectIdValueProperty(this, deser, _nullProvider);
+        // 07-May-2019, tatu: As per [databind#2303], must keep VD/NVP in-sync if they were
+        NullValueProvider nvp = (_valueDeserializer == _nullProvider) ? deser : _nullProvider;
+        return new ObjectIdValueProperty(this, deser, nvp);
     }
 
     @Override
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.java b/src/main/java/com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.java
index 2ce045b..a901f07 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.java
@@ -64,7 +64,9 @@
         if (_valueDeserializer == deser) {
             return this;
         }
-        return new SetterlessProperty(this, deser, _nullProvider);
+        // 07-May-2019, tatu: As per [databind#2303], must keep VD/NVP in-sync if they were
+        NullValueProvider nvp = (_valueDeserializer == _nullProvider) ? deser : _nullProvider;
+        return new SetterlessProperty(this, deser, nvp);
     }
 
     @Override
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.java
index 916e266..486106c 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.java
@@ -37,9 +37,10 @@
         return new AtomicReferenceDeserializer(_fullType, _valueInstantiator,
                 typeDeser, valueDeser);
     }
+
     @Override
-    public AtomicReference<Object> getNullValue(DeserializationContext ctxt) {
-        return new AtomicReference<Object>();
+    public AtomicReference<Object> getNullValue(DeserializationContext ctxt) throws JsonMappingException {
+        return new AtomicReference<Object>(_valueDeserializer.getNullValue(ctxt));
     }
 
     @Override
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.java
index 56bf081..34e502d 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.java
@@ -118,10 +118,10 @@
             JsonDeserializer<?> valueDeser);
 
     @Override
-    public abstract T getNullValue(DeserializationContext ctxt);
+    public abstract T getNullValue(DeserializationContext ctxt) throws JsonMappingException;
 
     @Override
-    public Object getEmptyValue(DeserializationContext ctxt) {
+    public Object getEmptyValue(DeserializationContext ctxt) throws JsonMappingException {
         return getNullValue(ctxt);
     }
 
diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKAtomicTypesTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKAtomicTypesDeserTest.java
similarity index 91%
rename from src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKAtomicTypesTest.java
rename to src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKAtomicTypesDeserTest.java
index 5721556..40b5a45 100644
--- a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKAtomicTypesTest.java
+++ b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKAtomicTypesDeserTest.java
@@ -6,10 +6,11 @@
 
 import com.fasterxml.jackson.annotation.*;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
-public class JDKAtomicTypesTest
+public class JDKAtomicTypesDeserTest
     extends com.fasterxml.jackson.databind.BaseMapTest
 {
     @JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@@ -93,6 +94,11 @@
         public AtomicReference<Object> b = new AtomicReference<Object>();
     }
 
+    // [databind#2303]
+    static class MyBean2303 {
+        public AtomicReference<AtomicReference<Integer>> refRef;
+    }    
+
     /*
     /**********************************************************
     /* Test methods
@@ -271,11 +277,25 @@
     @SuppressWarnings("unchecked")
     public void testNullValueHandling() throws Exception
     {
-        ObjectMapper mapper = new ObjectMapper();
         AtomicReference<Double> inputData = new AtomicReference<Double>();
-        String json = mapper.writeValueAsString(inputData);
-        AtomicReference<Double> readData = (AtomicReference<Double>) mapper.readValue(json, AtomicReference.class);
+        String json = MAPPER.writeValueAsString(inputData);
+        AtomicReference<Double> readData = (AtomicReference<Double>) MAPPER.readValue(json, AtomicReference.class);
         assertNotNull(readData);
         assertNull(readData.get());
     }
+
+    // [databind#2303]
+    public void testNullWithinNested() throws Exception
+    {
+        final ObjectReader r = MAPPER.readerFor(MyBean2303.class);
+        MyBean2303 intRef = r.readValue(" {\"refRef\": 2 } ");
+        assertNotNull(intRef.refRef);
+        assertNotNull(intRef.refRef.get());
+        assertEquals(intRef.refRef.get().get(), new Integer(2));
+
+        MyBean2303 nullRef = r.readValue(" {\"refRef\": null } ");
+        assertNotNull(nullRef.refRef);
+        assertNotNull(nullRef.refRef.get());
+        assertNull(nullRef.refRef.get().get());
+    }
 }
