complete up until polymorphic dispatch