add ValueTimeModel, and do some refactor