code: public void delete() {
  		
  		if (pendingDelete = (ongoingClientTransactions != null && !ongoingClientTransactions.isEmpty())) {
  			// ongoing client txs, need those to end first
  			return;
  		}
  		
  		final DialogState currentState = wrappedDialog != null ? wrappedDialog.getState() : null;
  		boolean isServerFlag = wrappedDialog != null ? wrappedDialog.isServer() : false; // is false ok, here?
  		boolean stackDoesNotFiresDialogTerminatedEvent = !isEnding()
  			&& !isServerFlag && (currentState == null || currentState == DialogState.TERMINATED);
  
  		if (wrappedDialog != null) {
  			wrappedDialog.delete();
  		} else {
  			if (tracer.isFineEnabled()) {
  				tracer.fine("wrappedDialog is not set, skipping deletion.");
  			}
  		}
  		if (stackDoesNotFiresDialogTerminatedEvent) {
  			ra.processDialogTerminated(this);
  		}
  	}
docs: /*
  (non-Javadoc)
  @see javax.sip.Dialog#delete()