screw this it's virtual function trickery time

again