Rewrite a lot of the implementation to make dynamic recipes work nicely