lazy will store all in memory, so add caching = true | false to give user control whether to store in pool or not