Spent two or three hours over the last couple of days implementing xsl:variable, xsl:param and xsl:with-param. In that order. Doing xsl:variable is easy, xsl:param is essentially the same except you're looking to see if something of the same name already exists, while xsl:with-param is putting that thing there beforehand (if you see what I mean).
Currently they all implement the @select behaviour. I haven't done child content yet, and that'll probably wait a while. There are more interesting things to do :)
[Anna - it's ok that this doesn't make any sense to you.]