resolve #14 with dynamic dispatch link function