Factored out ControlPointNode, see #259