tidier template hierarchy