Rewritten to use String, box. Caught up with master branch.