require ID as argument; added cache