implement run() method