completes rest of implementation