private void handleButton1Request(CachedPolicy cachedPolicy) throws ModelControlException {
    Referral deleted = null;
    String origName = (String) getPageSessionAttribute(EDIT_REFERRAL_NAME);
    Policy policy = cachedPolicy.getPolicy();

    try {
      Referral referral = createReferral();
      if (referral != null) {
        String name = (String) propertySheetModel.getValue(REFERRAL_NAME);

        if (origName.equals(name)) {
          policy.replaceReferral(name, referral);
        } else {
          deleted = policy.removeReferral(origName);
          policy.addReferral(name, referral);
        }

        deleted = null;
        setInlineAlertMessage(CCAlert.TYPE_INFO, "message.information", "policy.referral.updated");
        cachedPolicy.setPolicyModified(true);
      }
    } catch (NameAlreadyExistsException e) {
      setInlineAlertMessage(CCAlert.TYPE_ERROR, "message.error", getModel().getErrorString(e));
    } catch (InvalidNameException e) {
      setInlineAlertMessage(CCAlert.TYPE_ERROR, "message.error", getModel().getErrorString(e));
    } catch (NameNotFoundException e) {
      setInlineAlertMessage(CCAlert.TYPE_ERROR, "message.error", getModel().getErrorString(e));
    } catch (AMConsoleException e) {
      setInlineAlertMessage(CCAlert.TYPE_ERROR, "message.error", e.getMessage());
    } finally {
      if (deleted != null) {
        try {
          policy.addReferral(origName, deleted);
        } catch (NameAlreadyExistsException e) {
          debug.warning("ReferralEditViewBean.handleButton1Request", e);
        } catch (InvalidNameException e) {
          debug.warning("ReferralEditViewBean.handleButton1Request", e);
        }
      }
    }
    forwardTo();
  }