                 tempVerticalPosition);
 
             // invalidate the skin if the arrow direction changed
-            if (_arrowDirection != adjustedArrowDirection)
-            {
-                _arrowDirection = adjustedArrowDirection;
+            if (arrowDirection != adjustedArrowDirection)
+            {
+                setArrowDirection(adjustedArrowDirection);
 
                 if (arrow)
                     arrow.visible = (arrowDirection != ArrowDirection.NONE);

                // center the arrow on the owner
                arrowX = (ownerVisibleWidth - arrowWidth) / 2;
                
                if (ownerX > 0)
                    arrowX += Math.abs(ownerX - getLayoutBoundsX());

                // arrow should not extend past the callout bounds
                arrowX = Math.max(Math.min(maxArrowX, arrowX), 0);
            }

            // move the arrow to the bottom of the callout
            if (isEndOfCallout)

     *
     *  <p>Subclasses may override this method to update the arrow's size,
     *  position, and visibility, based on the computed
     *  <code>arrowDirection</code>.</p>
     *
     *  <p>By default, this method aligns the arrow on the shorter of either
     *  the <code>arrow</code> bounds or the <code>owner</code> bounds. This
     *  implementation assumes that the <code>arrow</code> and the Callout skin
     *  share the same coordinate space.</p>
     *
     *  @langversion 3.0
     *  @playerversion AIR 3
