I don't know why but my wild guess is it has todo with drawing ovals at more extreme w, h ratios, when the points are on the extremes you will need a pushing point in the middle to nice curve back. @gferreira you method only works for circles... the drawBot RoboFont extension has points on the extremes, cause the context is type... see https://github.com/typemytype/drawBotRoboFontExtension/blob/master/DrawBot.roboFontExt/lib/glyphContext.py#L23 see the big difference when the oval is getting thinner... def straightOval(x, y, w, h): c = 0.55 hx = w * c * .5 hy = h * c * .5 path = BezierPath() path.moveTo((x + w * .5, y)) path.curveTo((x + w * .5 + hx, y), (x + w, y + h * .5 - hy), (x + w, y + h * .5)) path.curveTo((x + w, y + h * .5 + hy), (x + w * .5 + hx, y + h), (x + w * .5, y + h)) path.curveTo((x + w * .5 - hx, y + h), (x, y + h * .5 + hy), (x, y + h * .5)) path.curveTo((x, y + h * .5 - hy), (x + w * .5 - hx, y), (x + w * .5, y)) path.closePath() drawPath(path) x, y, w, h = 10, 10, 8.0, 146.0 oval(x, y, w, h) straightOval(x + w + 10, y, w, h)