first implementation, with simple tests for now