internal add virtual