accept arbitrary hashes of variables and values