better separation between virtual and dom methods