prototype impl finish