Initially the Tree/Root/Approx variants of the kernels were not foreseen, which has lead to the current design. As a consequence these kernels now duplicate a considerable amount of code, which should be refactored. Something similar has occured in the implementation of the WL algorithm, the core of the WL algorithm is repeated a number of times among the different implementation, with the essential differences only being the rewrite step.