added Virtual and Abstract