initial implementaion + tests
add usage pointer