semi-finished implementation details