probably we should be using templates though?