Right now the implementation is generic and works for arbitrary types, but does not allow for much customization, which means that optimizations cannot easily be used when they are applicable. A design that allows feature injection would enable, for instance, the use of jump point search when the state is known to be a grid with uniform costs. Such an implementation should provide reasonable defaults in order that the user is able to specify as little as possible but as much as desired.