Track Factories

This replaces #115. My attempts to rebase were so disastrous that I just wrote the thing again. Now we have one nice commit instead of the previous mess too. :)