@Override
  public org.dcm4che3.net.service.BasicCStoreSCUResp cstore(
      final java.util.List<ArchiveInstanceLocator> instances,
      final Association storeas,
      final int priority) {

    ArrayList<ArchiveInstanceLocator> localyAvailable =
        (ArrayList<ArchiveInstanceLocator>) filterLocalOrExternalMatches(instances, true);
    ArrayList<ArchiveInstanceLocator> externallyAvailable =
        (ArrayList<ArchiveInstanceLocator>) filterLocalOrExternalMatches(instances, false);
    BasicCStoreSCUResp responseForLocalyAvailable = null;

    if (!localyAvailable.isEmpty())
      responseForLocalyAvailable = super.cstore(localyAvailable, storeas, priority);
    // initialize remaining response
    BasicCStoreSCUResp finalResponse = extendResponse(responseForLocalyAvailable);

    if (!externallyAvailable.isEmpty()) {
      FetchForwardCallBack moveCallBack =
          new FetchForwardCallBack() {

            @Override
            public void onFetch(
                Collection<ArchiveInstanceLocator> instances, BasicCStoreSCUResp resp) {
              pushInstances((ArrayList<ArchiveInstanceLocator>) instances, storeas, priority);
            }
          };
      FetchForwardCallBack wadoCallBack =
          new FetchForwardCallBack() {

            @Override
            public void onFetch(
                Collection<ArchiveInstanceLocator> instances, BasicCStoreSCUResp resp) {
              pushInstances((ArrayList<ArchiveInstanceLocator>) instances, storeas, priority);
            }
          };
      finalResponse =
          service
              .getFetchForwardService()
              .fetchForward(
                  instances.size(),
                  finalResponse,
                  externallyAvailable,
                  storeas,
                  priority,
                  wadoCallBack,
                  moveCallBack);
      if (failed.size() > 0) {
        if (failed.size() == nr_instances) status = Status.UnableToPerformSubOperations;
        else status = Status.OneOrMoreFailures;
      } else {
        status = Status.Success;
      }
      setChanged();
      notifyObservers();
    }
    return finalResponse;
  }