Thanks! These are all useful, but I wanted to implement them slightly differently, so I've added them in separate commits: @06023f3c6fb9079d3ab2ae1bcd70a0f87ec49d89, @06451bffb5daeb658b84bc1ab1a5c57e72489c7d, @5d09f3ad341d9badd302d21c2defdd5209de089e.
Thanks! These are all useful, but I wanted to implement them slightly differently, so I've added them in separate commits: @06023f3c6fb9079d3ab2ae1bcd70a0f87ec49d89, @06451bffb5daeb658b84bc1ab1a5c57e72489c7d, @5d09f3ad341d9badd302d21c2defdd5209de089e.