implementing requirements #8, #9, #7:dfsdofisdfnsdfsd