add node.subscribe/unsubscribe, with tests