Merge branch 'upstream' into spectator
NOTE: I have not yet considered how to support spectators with the new hash URLs; it's likely something will go funny with the current implementation.
Merge branch 'spectator'