final for use as submodule