I've replaced the extra logic here with another semaphore, moved the logic to a new class, and kept the 2 extended classes here to keep the logic encapsulated rather than moving it directly into Pool.