converted to use CanvasNode, see #4