Index: src/NHibernate.Test/NHSpecificTest/Futures/Fixture.cs
===================================================================
--- src/NHibernate.Test/NHSpecificTest/Futures/Fixture.cs	(revision 3999)
+++ src/NHibernate.Test/NHSpecificTest/Futures/Fixture.cs	(working copy)
@@ -1,3 +1,4 @@
+using NHibernate.Criterion;
 using NHibernate.Impl;
 using NUnit.Framework;
 
@@ -85,5 +86,39 @@
                 }
             }
         }
+
+		[Test]
+		public void CanCombineSingleFutureValueWithEnumerableFutures()
+		{
+			using (var s = sessions.OpenSession())
+			{
+				if (((SessionFactoryImpl)sessions)
+					.ConnectionProvider.Driver.SupportsMultipleQueries == false)
+				{
+					Assert.Ignore("Not applicable for dialects that do not support multiple queries");
+				}
+
+				var persons = s.CreateCriteria(typeof(Person))
+					.SetMaxResults(10)
+					.Future<Person>();
+
+				var personCount = s.CreateCriteria(typeof(Person))
+					.SetProjection(Projections.RowCount())
+					.FutureValue<int>();
+
+				using (var logSpy = new SqlLogSpy())
+				{
+					int count = personCount.Value;
+
+					foreach (var person in persons)
+					{
+
+					}
+
+					var events = logSpy.Appender.GetEvents();
+					Assert.AreEqual(1, events.Length);
+				}
+			}
+		}
     }
 }
Index: src/NHibernate/ICriteria.cs
===================================================================
--- src/NHibernate/ICriteria.cs	(revision 3999)
+++ src/NHibernate/ICriteria.cs	(working copy)
@@ -301,5 +301,7 @@
 		System.Type GetRootEntityTypeIfAvailable();
 
 		#endregion
+
+		IFutureValue<T> FutureValue<T>();
 	}
 }
Index: src/NHibernate/IFutureValue.cs
===================================================================
--- src/NHibernate/IFutureValue.cs	(revision 0)
+++ src/NHibernate/IFutureValue.cs	(revision 0)
@@ -0,0 +1,7 @@
+namespace NHibernate
+{
+	public interface IFutureValue<T>
+	{
+		T Value { get; }
+	}
+}
\ No newline at end of file
Index: src/NHibernate/Impl/CriteriaImpl.cs
===================================================================
--- src/NHibernate/Impl/CriteriaImpl.cs	(revision 3999)
+++ src/NHibernate/Impl/CriteriaImpl.cs	(working copy)
@@ -371,6 +371,12 @@
 			return new Subcriteria(this, this, associationPath, alias, joinType);
 		}
 
+		public IFutureValue<T> FutureValue<T>()
+		{
+			session.FutureCriteriaBatch.Add(this);
+			return session.FutureCriteriaBatch.GetFutureValue<T>();
+		}
+
 	    public IEnumerable<T> Future<T>()
 	    {
             session.FutureCriteriaBatch.Add(this);
@@ -687,6 +693,11 @@
 				return root.List();
 			}
 
+			public IFutureValue<T> FutureValue<T>()
+			{
+				return root.FutureValue<T>();
+			}
+
 		    public IEnumerable<T> Future<T>()
 		    {
 		        return root.Future<T>();
Index: src/NHibernate/Impl/FutureCriteriaBatch.cs
===================================================================
--- src/NHibernate/Impl/FutureCriteriaBatch.cs	(revision 3999)
+++ src/NHibernate/Impl/FutureCriteriaBatch.cs	(working copy)
@@ -39,15 +39,52 @@
             index = criterias.Count - 1;
         }
 
+		public IFutureValue<T> GetFutureValue<T>()
+		{
+			int currentIndex = index;
+			return new FutureValue<T>(() => (IList)Results[currentIndex]);
+		}
+
         public IEnumerable<T> GetEnumerator<T>()
         {
             int currentIndex = index;
             return new DelayedEnumerator<T>(() => (IList)Results[currentIndex]);
-        }
+		}
 
-        #region Nested type: DelayedEnumerator
+		#region Nested type: FutureValue
 
-        private class DelayedEnumerator<T> : IEnumerable<T>
+		private class FutureValue<T> : IFutureValue<T>
+		{
+			public delegate IList GetResult();
+
+			private readonly GetResult getResult;
+
+			public FutureValue(GetResult result)
+			{
+				getResult = result;
+			}
+
+			public T Value
+			{
+				get
+				{
+					var result = getResult();
+
+					if (result.Count == 0)
+					{
+						return default(T);
+					}
+
+					return (T)result[0];
+				}
+			}
+		}
+
+		#endregion
+
+		#region Nested type: DelayedEnumerator
+
+		private class DelayedEnumerator<T> : IEnumerable<T>
         {
             public delegate IList GetResult();
 
Index: src/NHibernate/NHibernate.csproj
===================================================================
--- src/NHibernate/NHibernate.csproj	(revision 3999)
+++ src/NHibernate/NHibernate.csproj	(working copy)
@@ -456,6 +456,7 @@
     <Compile Include="Exceptions\SqlStateExtracter.cs" />
     <Compile Include="Exceptions\TemplatedViolatedConstraintNameExtracter.cs" />
     <Compile Include="Id\SelectGenerator.cs" />
+    <Compile Include="IFutureValue.cs" />
     <Compile Include="Impl\FutureCriteriaBatch.cs" />
     <Compile Include="Properties\BackFieldStrategy.cs" />
     <Compile Include="Bytecode\CodeDom\BytecodeProviderImpl.cs" />
