further refactoring toward first draft