Switch to virtuals from abstracts

Most methods are repeated and do not need to be over-ridden