perfect method