abstracting free even more