TODO
a bit more documentation