first draft with tests