diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3424/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3424/Fixture.cs
new file mode 100644
index 00000000000..ef60ff14aac
--- /dev/null
+++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3424/Fixture.cs
@@ -0,0 +1,60 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by AsyncGenerator.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+using System.Collections.Generic;
+using System.Linq;
+using NHibernate.Linq;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.GH3424
+{
+ using System.Threading.Tasks;
+ [TestFixture]
+ public class FixtureAsync : BugTestCase
+ {
+ protected override void OnSetUp()
+ {
+ using var session = OpenSession();
+ using var transaction = session.BeginTransaction();
+
+ var c1 = new Child { Name = "Rob" };
+ session.Save(c1);
+ var e1 = new Entity { Name = "Bob", Children = new HashSet { c1 } };
+ session.Save(e1);
+
+ transaction.Commit();
+ }
+
+ protected override void OnTearDown()
+ {
+ using var session = OpenSession();
+ using var transaction = session.BeginTransaction();
+ session.CreateQuery("delete Child").ExecuteUpdate();
+ session.CreateQuery("delete from System.Object").ExecuteUpdate();
+
+ transaction.Commit();
+ }
+
+ [Test]
+ public async Task QueryingAfterFutureThenClearAsync()
+ {
+ using var session = OpenSession();
+ using var transaction = session.BeginTransaction();
+ var futureBob = session.Query().Where(e => e.Name == "Bob").ToFutureValue(q => q.FirstOrDefault());
+ var bob = await (futureBob.GetValueAsync());
+ Assert.That(bob, Is.Not.Null);
+ session.Clear();
+
+ var allQuery = session.Query();
+ Assert.That(() => allQuery.ToListAsync(), Has.Count.EqualTo(1));
+ await (transaction.CommitAsync());
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3424/Entities.cs b/src/NHibernate.Test/NHSpecificTest/GH3424/Entities.cs
new file mode 100644
index 00000000000..e72fe68c43c
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3424/Entities.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.GH3424
+{
+ class Entity
+ {
+ public virtual Guid Id { get; set; }
+ public virtual string Name { get; set; }
+ public virtual ISet Children { get; set; }
+ }
+
+ class Child
+ {
+ public virtual Guid Id { get; set; }
+ public virtual string Name { get; set; }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3424/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3424/Fixture.cs
new file mode 100644
index 00000000000..5c829ce5c2d
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3424/Fixture.cs
@@ -0,0 +1,49 @@
+using System.Collections.Generic;
+using System.Linq;
+using NHibernate.Linq;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.GH3424
+{
+ [TestFixture]
+ public class Fixture : BugTestCase
+ {
+ protected override void OnSetUp()
+ {
+ using var session = OpenSession();
+ using var transaction = session.BeginTransaction();
+
+ var c1 = new Child { Name = "Rob" };
+ session.Save(c1);
+ var e1 = new Entity { Name = "Bob", Children = new HashSet { c1 } };
+ session.Save(e1);
+
+ transaction.Commit();
+ }
+
+ protected override void OnTearDown()
+ {
+ using var session = OpenSession();
+ using var transaction = session.BeginTransaction();
+ session.CreateQuery("delete Child").ExecuteUpdate();
+ session.CreateQuery("delete from System.Object").ExecuteUpdate();
+
+ transaction.Commit();
+ }
+
+ [Test]
+ public void QueryingAfterFutureThenClear()
+ {
+ using var session = OpenSession();
+ using var transaction = session.BeginTransaction();
+ var futureBob = session.Query().Where(e => e.Name == "Bob").ToFutureValue(q => q.FirstOrDefault());
+ var bob = futureBob.Value;
+ Assert.That(bob, Is.Not.Null);
+ session.Clear();
+
+ var allQuery = session.Query();
+ Assert.That(() => allQuery.ToList(), Has.Count.EqualTo(1));
+ transaction.Commit();
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3424/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3424/Mappings.hbm.xml
new file mode 100644
index 00000000000..e692e287c11
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3424/Mappings.hbm.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/NHibernate/Engine/StatefulPersistenceContext.cs b/src/NHibernate/Engine/StatefulPersistenceContext.cs
index 7819a59989b..f912c9b8bdc 100644
--- a/src/NHibernate/Engine/StatefulPersistenceContext.cs
+++ b/src/NHibernate/Engine/StatefulPersistenceContext.cs
@@ -264,6 +264,7 @@ public void Clear()
entityEntries.Clear();
entitySnapshotsByKey.Clear();
collectionsByKey.Clear();
+ nonlazyCollections.Clear();
collectionEntries.Clear();
if (unownedCollections != null)
{