provide transaction as arguments on datastructure methods, to allow for lazy evaluation