 
         // If the callout still doesn't fit, then nudge it
         // so it is completely on the screen. Make sure to include scale.
+        var screenTop:Number = screen.top;
+        var screenBottom:Number = screen.bottom;
+        var screenLeft:Number = screen.left;
+        var screenRight:Number = screen.right;
+        
+        // Allow zero margin on the the side with the arrow
+        switch (arrowDirection)
+        {
+            case ArrowDirection.UP:
+            {
+                screenBottom -= margin;
+                screenLeft += margin;
+                screenRight -= margin
+                break;
+            }
+            case ArrowDirection.DOWN:
+            {
+                screenTop += margin;
+                screenLeft += margin;
+                screenRight -= margin
+                break;
+            }
+            case ArrowDirection.LEFT:
+            {
+                screenTop += margin;
+                screenBottom -= margin;
+                screenRight -= margin
+                break;
+            }
+            case ArrowDirection.RIGHT:
+            {
+                screenTop += margin;
+                screenBottom -= margin;
+                screenLeft += margin;
+                break;
+            }
+            default:
+            {
+                screenTop += margin;
+                screenBottom -= margin;
+                screenLeft += margin;
+                screenRight -= margin
+                break;
+            }
+        }
+        
         regPoint.y += nudgeToFit(calloutBounds.top, calloutBounds.bottom,
-            screen.top + margin, screen.bottom - margin, concatScaleY);
+            screenTop, screenBottom, concatScaleY);
         
         regPoint.x += nudgeToFit(calloutBounds.left, calloutBounds.right,
-            screen.left + margin, screen.right - margin, concatScaleX);
+            screenLeft, screenRight, concatScaleX);
 
         // Compute the stage coordinates of the upper,left corner of the PopUp, taking
         // the postTransformOffsets - which include mirroring - into account.

        if (screen)
        {
            adjustedHorizontalPosition = adjustCalloutPosition(
                horizontalPosition,
                calloutBounds.left, calloutBounds.right,
                screen.left, screen.right);

            adjustedVerticalPosition = adjustCalloutPosition(
                verticalPosition,
                calloutBounds.top, calloutBounds.bottom,
                screen.top, screen.bottom);
        }

                // Favor vertical before/after in portrait
                useVertical = canFitVertical;
            }
            
            var startPos:String = (useInterior) ? CalloutPosition.START : CalloutPosition.BEFORE;
            var endPos:String = (useInterior) ? CalloutPosition.END : CalloutPosition.AFTER;

            if (useVertical)
            {
                actualHorizontalPosition = CalloutPosition.MIDDLE;
                actualVerticalPosition = (spaceBottom > spaceTop) ? endPos : startPos;
            }
            else
            {
                actualHorizontalPosition = (spaceRight > spaceLeft) ? endPos : startPos;
                actualVerticalPosition = CalloutPosition.MIDDLE;
            }
        }
