First working draft of 28.

Works but needs cleanup.