This will allow us to use subclasses.
That way we can hide the struct in the source file.
The functionality of it is supposed to grow, so better put it in a custom file early. This is just a naive split so far, the next patches will split things further.