Attached are files and tests that would allow users of commons-pool to interact with a proxy to the pooled object rather than the pooled object itself. This provides two benefits: detection of leaked pooled objects (when returnObject() isn't called) with a stack trace and detection of using pooled objects after they have been returned to the pool. The system provides a delegate which can be placed in front of any ObjectPool, similar to calling Collections.unmodifiableCollection(). Callers do not know that they're working with a proxy rather than the pooled object itself. Implementations are provided to use Java proxies or CGLib (useful when the pooled object doesn't implement an interface). Unit tests are also provided.