add subscribe function