synchronized void delete() {
		log.info("Call object= " + this + " being deleted" + " for "
				+ this.provider);

		if (!this.delayVDNremoveCallFromDomain) {
			this.provider.removeCallFromDomain(this);
		}

		if (Tsapi.isEnableDelayInTermConnDropOnCstaFailed()) {
			this.waitingForConnectionsLock = null;
		}

		if (this.internalDeviceMonitor != null) {
			this.internalDeviceMonitor.removeInternalMonitor(this);
			this.internalDeviceMonitor = null;
		}

		if (this.nonCallID != -1) {
			this.provider.deleteNonCallFromHash(this.nonCallID);
		}

		if (this.callID != 0) {
			this.provider.deleteCallFromHash(this.callID);
			this.provider.addCallToSaveHash(this);
			synchronized (this.staleConnections) {
				for (int i = 0; i < this.staleConnections.size(); i++) {
					((TSConnection) this.staleConnections.elementAt(i))
							.delete();
				}
			}
		}
	}