hopefully it's okay that all our keys end up string-ified