fully functional, may require more templates