shouldn't we use "IValueProvider", instead of Generic...?