initialization + main interface added with tests