added hookOnce() method