add allow_virtual parameter