complete - alpha version - tests needed