more general cache