map now preserves keys