private void fireInferenceStatusChanged(final InferenceStatus oldStatus) throws RuntimeException {
    Object[] curListeners = getInferenceListeners();
    List<Exception> errors = new ArrayList<Exception>();
    for (int i = curListeners.length - 1; i >= 0; i -= 1) {
      try {
        ((InferenceWorkerListener) curListeners[i]).notifyInferenceStatusChanged(oldStatus, status, suspendReason, this);
      } catch (Exception e) {
        errors.add(e);
      }
    }
    if (errors.size() > 0) {
      throw new RuntimeException(errors.get(0)); // @hack
    }
  }