updated with design refinement