combinators now accept keys and values