improved HashWithKeys