bi-directional mapping (almost done)