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

                                Draw.drawCurve(context, curve: curve)
                            }
        })
        let demo15 = Demo(title: ".arcs() and .arcs(threshold)",
                          quadraticControlPoints: [],
                          quadraticDrawFunction: {[unowned self](context: CGContext, demo: Demo) in },
                          cubicControlPoints: controlPoints,

                                Draw.drawCircle(context, center: curve.compute(t), radius: 3);
                            }
        })
        let demo10 = DualDrawFuncDemo(title: ".bbox()",
                          quadraticControlPoints: [],
                          quadraticDrawFunction: {[unowned self](context: CGContext, demo: Demo) in },
                          cubicControlPoints: controlPoints,
