             }
             _result[key] = val;
             if (val is IEventDispatcher) {
-                var ed :IEventDispatcher = IEventDispatcher(val);
-                _remaining++;
-                _targetsToKeys[ed] = key;
-                ed.addEventListener(completeType, handleComplete);
-                for each (var type :String in errorTypes) {
-                    ed.addEventListener(type, handleError);
+                if (isCompleteCheckFn == null || !val[isCompleteCheckFn]()) {
+                    var ed :IEventDispatcher = IEventDispatcher(val);
+                    _remaining++;
+                    _targetsToKeys[ed] = key;
+                    ed.addEventListener(completeType, handleComplete);
+                    for each (var type :String in errorTypes) {
+                        ed.addEventListener(type, handleError);
+                    }
                 }
             } else if (_forEach) {
                 checkReport(key);

            if (!Util.isPlainObject(sources)) {
                // stash the singleton source
                sources = { singleton_key: sources };
            }
        }


     * @param completeCallack the function to call when complete.
     * @param forEach whether to call the completeCallback for each source, or all-at-once at
     * the end. If forEach is used, keys will never be returned.
     * @param isCompleteCheckFn a function to attempt to call on the dispatcher to see if
     * it's already complete after generation.
     * @param errorTypes an Array of event types that will be dispatched by the loader.
     * If unspecifed, all the normal error event types are used.
     * @param completeType, the event complete type. If unspecifed @default Event.COMPLETE.
     */
    public function MultiLoader (
        sources :Object, generatorFn :Function, completeCallback :Function,
        forEach :Boolean = false, isCompleteCheckFn :String = null,
        errorTypes :Array = null, completeType :String = null)
    {
        if (errorTypes == null) {
            errorTypes = [ ErrorEvent.ERROR, AsyncErrorEvent.ASYNC_ERROR,
