updated with details of implementation