now using caches per dataset to speed up operation