add subscribe() method