modified and complete