refactor towards extensible records