diff --git a/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java b/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
index f2231d2..6510373 100644
--- a/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
+++ b/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
@@ -21,7 +21,6 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.sling.api.scripting.LazyBindings;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Scriptable;
 import org.mozilla.javascript.WrapFactory;
@@ -68,11 +67,7 @@
         }
 
         if (result == null) {
-            if (javaObject instanceof LazyBindings.Supplier) {
-                result = super.wrapAsJavaObject(cx, scope, ((LazyBindings.Supplier) javaObject).get(), staticType);
-            } else {
-                result = super.wrapAsJavaObject(cx, scope, javaObject, staticType);
-            }
+            result = super.wrapAsJavaObject(cx, scope, javaObject, staticType);
         }
 
         return result;
diff --git a/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java b/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
index f49a661..fddce2b 100644
--- a/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
+++ b/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
@@ -32,6 +32,7 @@
 import javax.script.ScriptException;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.sling.api.scripting.LazyBindings;
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.commons.classloader.DynamicClassLoader;
@@ -169,6 +170,9 @@
             Entry<?, ?> entry = (Entry<?, ?>) entryObject;
             String name = (String) entry.getKey();
             Object value = entry.getValue();
+            if (value instanceof LazyBindings.Supplier) {
+                value = ((LazyBindings.Supplier) value).get();
+            }
 
             if (value != null) {
                 // get the current property value, if set
diff --git a/src/test/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineTest.java b/src/test/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineTest.java
index 7c68c5b..63fb572 100644
--- a/src/test/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineTest.java
+++ b/src/test/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineTest.java
@@ -23,6 +23,7 @@
 import javax.script.ScriptException;
 import javax.script.SimpleBindings;
 
+import org.apache.sling.api.scripting.LazyBindings;
 import org.apache.sling.scripting.api.ScriptCache;
 import org.apache.sling.scripting.javascript.helper.SlingWrapFactory;
 import org.mockito.Mockito;
@@ -51,6 +52,33 @@
         assertEquals(2.0, result);
     }
 
+    public void testNullSuppliedValue() throws ScriptException {
+        MockRhinoJavaScriptEngineFactory factory = new MockRhinoJavaScriptEngineFactory();
+        ScriptEngine engine = factory.getScriptEngine();
+        Bindings context = new LazyBindings();
+        context.put("suppliedNullValue", (LazyBindings.Supplier) () -> null);
+        Object result = engine.eval("1 + 1", context);
+        assertEquals(2, result);
+        Throwable throwable = null;
+        try {
+            engine.eval("suppliedNullValue === undefined", context);
+        } catch (ScriptException e) {
+            throwable = e;
+        }
+        assertNotNull(throwable);
+        assertTrue(throwable.getMessage().contains("\"suppliedNullValue\" is not defined"));
+    }
+
+    public void testNotNullSuppliedValue() throws ScriptException {
+        MockRhinoJavaScriptEngineFactory factory = new MockRhinoJavaScriptEngineFactory();
+        ScriptEngine engine = factory.getScriptEngine();
+        Bindings context = new LazyBindings();
+        context.put("suppliedNotNullValue", (LazyBindings.Supplier) () -> 42);
+        Object result = engine.eval("0 + suppliedNotNullValue", context);
+        // Java provided values will be wrapped and then unwrapped as Doubles
+        assertEquals(42.0, result);
+    }
+
     private static class MockRhinoJavaScriptEngineFactory extends RhinoJavaScriptEngineFactory {
 
         protected SlingWrapFactory wrapFactory;
