refactoring: using FreeMarker to generate holders