ready for template impl