necessary method