Implementation and spec cleanup for #578