#35 added documentation and unit tests