to avoid static initialization issues, extract extension point interface to top level