we can abuse type dispatch instead of having 3 kw with a hierarchy