new subscription model and  better error handling