beginner implementation + tests