@Override
 public Collection<Security> get(ExternalIdBundle bundle, VersionCorrection versionCorrection) {
   ArgumentChecker.notNull(bundle, "bundle");
   // best implementation is to return first matching result
   for (SecuritySource delegateSource : _delegator.getDelegates().values()) {
     Collection<Security> result = delegateSource.get(bundle, versionCorrection);
     if (!result.isEmpty()) {
       return result;
     }
   }
   return _delegator.getDefaultDelegate().get(bundle, versionCorrection);
 }
 @Override
 public Security getSingle(ExternalIdBundle bundle, VersionCorrection versionCorrection) {
   ArgumentChecker.notNull(bundle, "bundle");
   ArgumentChecker.notNull(versionCorrection, "versionCorrection");
   for (SecuritySource delegateSource : _delegator.getDelegates().values()) {
     Security result = delegateSource.getSingle(bundle, versionCorrection);
     if (result != null) {
       return result;
     }
   }
   return _delegator.getDefaultDelegate().getSingle(bundle, versionCorrection);
 }
 @Override
 public Security getSingle(ExternalIdBundle bundle) {
   ArgumentChecker.notNull(bundle, "bundle");
   // best implementation is to return first matching result
   for (SecuritySource delegateSource : _delegator.getDelegates().values()) {
     Security result = delegateSource.getSingle(bundle);
     if (result != null) {
       return result;
     }
   }
   return _delegator.getDefaultDelegate().getSingle(bundle);
 }
 @Override
 public Security get(ObjectId objectId, VersionCorrection versionCorrection) {
   ArgumentChecker.notNull(objectId, "objectId");
   ArgumentChecker.notNull(versionCorrection, "versionCorrection");
   return _delegator.chooseDelegate(objectId.getScheme()).get(objectId, versionCorrection);
 }
 // -------------------------------------------------------------------------
 @Override
 public Security get(UniqueId uniqueId) {
   ArgumentChecker.notNull(uniqueId, "uniqueId");
   return _delegator.chooseDelegate(uniqueId.getScheme()).get(uniqueId);
 }