class MarshlandPool implements Pool<T> {

    @SuppressWarnings( "unchecked" )
    @Override
    public T acquire()
    {
        // Try and get it from the thread local
        LocalSlot<T> localSlot = puddle.get();

        T obj = localSlot.localSlotObject;
        if ( obj != null )
        {
            localSlot.set( null );
            return obj;
        }

        // Try the reference queue, containing objects from dead threads
        LocalSlotReference<T> slotReference = (LocalSlotReference<T>) objectsFromDeadThreads.poll();
        if ( slotReference != null && slotReference.localSlotReferenceObject != null )
        {
            slotReferences.remove( slotReference ); // remove from old threads
            return slotReference.localSlotReferenceObject;
        }

        // Fall back to the delegate pool
        return delegate.acquire();
    }

    public  MarshlandPool( Pool<T> delegatePool );

}