there are lots of non-trivial lines not covered in this function