First version where the provider is seperated from the listener