         
         // warning, these blocks introduce memory leaks! (because they reference self)
         
-        let demo1 = Demo(title: "new Bezier(...)",
+        let demo1 = DualDrawFuncDemo(title: "new Bezier(...)",
                          quadraticControlPoints: quadraticControlPoints,
                          quadraticDrawFunction: {[unowned self](context: CGContext, demo: Demo) in
                         let curve = self.draggableQuadraticCurve()

                                Draw.drawLine(context, from: pt, to: pt + dv );
                            }
        })
        let demo7 = Demo(title: ".normal(t)",
                         quadraticControlPoints: [],
                         quadraticDrawFunction: {[unowned self](context: CGContext, demo: Demo) in },
                         cubicControlPoints: controlPoints,

            Draw.drawCircle(context, center: curves[0].points[3], radius: 3, offset: offset)
            Draw.drawCircle(context, center: B, radius: 3, offset: offset)
        })
        let demo3 = SingleDrawFuncDemo(title: ".getLUT(steps)",
                         quadraticControlPoints: quadraticControlPoints,
                         cubicControlPoints: controlPoints,
                         drawFunction: {[unowned self](context: CGContext, demo: Demo, curve: BezierCurve) in
            Draw.drawSkeleton(context, curve: curve)
            let LUT = curve.generateLookupTable(withSteps: 16)
            for p in LUT {
                Draw.drawCircle(context, center: p, radius: 2)
            }
        })
        let demo4 = DualDrawFuncDemo(title: ".length()",
                         //TODO: you still haven't implemented length function or drawText
            quadraticControlPoints: [],
            quadraticDrawFunction: {[unowned self](context: CGContext, demo: Demo) in },
