modified:   vm func