This class was more complicated and now it is basically delegating to `match`