The Query.hashCode call might be somewhat expensive? Can/should we call it up front outside of the sync block?