first draft of design and impl done