public void relateAcrossR805To(Variable_c target, boolean notifyChanges) {
    if (target == null) return;

    if (target == ReferencesVariable) return; // already related

    if (ReferencesVariable != target) {

      Object oldKey = getInstanceKey();

      if (ReferencesVariable != null) {

        ReferencesVariable.clearBackPointerR805To(this);

        if (Boolean.valueOf(System.getenv("PTC_MCC_ENABLED")) == true) { // $NON-NLS-1$
          Ooaofooa.log.println(
              ILogger.CONSISTENCY,
              "TransientValueReference_c.relateAcrossR805To(Variable_c target)",
              "Relate performed across R805 from Transient Value Reference to Variable without unrelate of prior instance.");
        }
      }

      ReferencesVariable = target;
      m_var_id = target.getVar_id();
      updateInstanceKey(oldKey, getInstanceKey());
      target.setBackPointerR805To(this);
      target.addRef();
    }
  }
  public void unrelateAcrossR805From(Variable_c target, boolean notifyChanges) {
    if (target == null) return;

    if (ReferencesVariable == null) return; // already unrelated

    if (target != ReferencesVariable) {
      Exception e = new Exception();
      e.fillInStackTrace();
      CorePlugin.logError("Tried to unrelate from non-related instance across R805", e);
      return;
    }

    if (target != null) {
      target.clearBackPointerR805To(this);
    }

    if (ReferencesVariable != null) {

      m_var_id = ReferencesVariable.getVar_id();
      ReferencesVariable = null;
      target.removeRef();
    }
  }