Implement free
Note some improvements we'd like to make.