add return value to virtual fn