         if (delayTimer)
             delayTimer.reset();
         stopRepeat = true;
+        // Dispatch STOP event in case listeners need to handle this situation
+        // The Effect class may hinge setting final state values on whether
+        // the effect was stopped or ended.
+        dispatchEvent(new EffectEvent(EffectEvent.EFFECT_STOP,
+                                     false, false, this));        
+        if (target && (target is IEventDispatcher))
+            target.dispatchEvent(new EffectEvent(EffectEvent.EFFECT_STOP,
+                                                 false, false, this));
         finishEffect();
     }
     

    //  playheadTime
    //----------------------------------
    
    /**
     *  @copy mx.effects.IEffectInstance#playheadTime
     */
    public function get playheadTime():Number 
    {

        if (repeatCount > 0)
        {
            value = duration * repeatCount +
                    (repeatDelay * (repeatCount - 1)) + startDelay;
        }
        
        return value;
