implement suspend operation