diff --git a/src/CodeProject.ObjectPool/Core/PooledObjectInfo.cs b/src/CodeProject.ObjectPool/Core/PooledObjectInfo.cs
index 7f499e0..6518559 100644
--- a/src/CodeProject.ObjectPool/Core/PooledObjectInfo.cs
+++ b/src/CodeProject.ObjectPool/Core/PooledObjectInfo.cs
@@ -34,6 +34,11 @@ public sealed class PooledObjectInfo
///
public int Id { get; internal set; }
+ ///
+ /// Payload which can be used to add custom information to a pooled object.
+ ///
+ public object Payload { get; set; }
+
///
/// Enumeration that is being managed by the pool to describe the object state - primary
/// used to void cases where the resources are being releases twice.
diff --git a/src/CodeProject.ObjectPool/ObjectPool.cs b/src/CodeProject.ObjectPool/ObjectPool.cs
index 7360468..014be3f 100644
--- a/src/CodeProject.ObjectPool/ObjectPool.cs
+++ b/src/CodeProject.ObjectPool/ObjectPool.cs
@@ -11,6 +11,7 @@
using CodeProject.ObjectPool.Core;
using PommaLabs.Thrower;
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Threading;
@@ -240,6 +241,28 @@ void IObjectPoolHandle.ReturnObjectToPool(PooledObject objectToReturnToPool, boo
#endregion Pool Operations
+ #region Extensibility
+
+ ///
+ /// All objects currently stored inside the pool.
+ ///
+ protected IEnumerable PooledObjects
+ {
+ get
+ {
+ for (var i = 0; i <= _pooledObjects.Length; ++i)
+ {
+ var item = _pooledObjects[i];
+ if (item != null)
+ {
+ yield return item;
+ }
+ }
+ }
+ }
+
+ #endregion Extensibility
+
#region Low-level Pooling
///