             target.lineTo(toX, toY);
             return;
         }
-        dx = toX - fromX;
-        dy = toY - fromY;
-        lineDistance = Math.sqrt(dx*dx + dy*dy);
-        ux = dx / lineDistance;
-        uy = dy / lineDistance;
-        cx = fromX;
-        cy = fromY;
-        target.moveTo(cx, cy);
+        deltaX = toX - fromX;
+        deltaY = toY - fromY;
+        lineDistance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
+        unitX = deltaX / lineDistance;
+        unitY = deltaY / lineDistance;
+        currentX = fromX;
+        currentY = fromY;
+        target.moveTo(currentX, currentY);
         while (sumDistance < lineDistance)
         {
-            sumDistance += dashIntervals[dash];
+            sumDistance += dashIntervals[dashIndex];
             if (sumDistance < lineDistance)
             {
-                cx += dashIntervals[dash] * ux;
-                cy += dashIntervals[dash] * uy;
+                currentX += dashIntervals[dashIndex] * unitX;
+                currentY += dashIntervals[dashIndex] * unitY;
             }
             else
             {
-                cx = toX;
-                cy = toY;
-            }
-            if (dash % 2)
-            {
-                target.moveTo(cx, cy);
+                currentX = toX;
+                currentY = toY;
+            }
+            if (dashIndex & 1)
+            {
+                target.moveTo(currentX, currentY);
             }
             else
             {
-                target.lineTo(cx, cy);
-            }
-            if (++dash >= dashIntervals.length)
-            {
-                dash = 0;
+                target.lineTo(currentX, currentY);
+            }
+            dashIndex++;
+            if (dashIndex >= dashIntervals.length)
+            {
+                dashIndex = 0;
             }
         }
     }


        for (i = 0; i < steps; i++)
        {
            secantAngle = currentAngle + halfStepAngle;
            nextAngle = secantAngle + halfStepAngle;

            target.curveTo(centreX + Math.cos(secantAngle) * secant,
                           centreY + Math.sin(secantAngle) * secant,
                           centreX + Math.cos(nextAngle) * radius,
                           centreY + Math.sin(nextAngle) * radius);


    drawCross(target:Graphics, centreX:Number, centreY:Number,
              halfWidth:Number, halfHeight:Number = Number.NaN):void
    {
        if (isNaN(halfHeight))
        {
            halfHeight = halfWidth;
        }

        target.moveTo(centreX - halfWidth, centreY - halfHeight);
        target.lineTo(centreX + halfWidth, centreY + halfHeight);
