add ValueProvider, close #40
mini refactoring