first refactor to support annotation strategy