synchronized void setCallID(int newCallID) {
		if (newCallID == 0) {
			int rc = this.provider.getNonCallID();
			if (rc != -1) {
				this.nonCallID = rc;
				this.provider.addNonCallToHash(this);
			}
		} else if (this.callID == 0) {
			this.callID = newCallID;
			if (this.nonCallID != -1) {
				this.provider.deleteNonCallFromHash(this.nonCallID);
				this.provider.releaseNonCallID(this.nonCallID);
				this.nonCallID = -1;
			}

			TSCall tmpCall = this.provider.addCallToHash(this);
			if (tmpCall != null) {
				if ((this.ucid != null) && (tmpCall.ucid != null)
						&& (this.ucid.compareTo(tmpCall.ucid) == 0)) {
					this.handOffCall = tmpCall;

					this.provider.addCallToHash(this.handOffCall);

					synchronized (this.connections) {
						for (int i = 0; i < this.connections.size(); i++) {
							TSConnection conn = (TSConnection) this.connections
									.elementAt(i);
							conn.setCall(this.handOffCall);
							this.handOffCall.addConnection(conn, null);
						}
					}

					this.handOffCall.moveInternalStuff(this);
				} else {
					tmpCall.setState(34, null);
					this.provider.dumpCall(tmpCall.getCallID());
					this.handOffCall = null;

					log.info("Mismatched UCID for setCallID removing stale call obj "
							+ tmpCall);
					log.info("UCID for setCallID for the new call is "
							+ this.ucid);

					this.provider.addCallToHash(this);
				}
			}
		} else if (newCallID != this.callID) {
			this.provider.changeCallIDInDomain(this.callID, newCallID);

			this.provider.deleteCallFromHash(this.callID);

			int saveCallID = this.callID;
			this.callID = newCallID;

			TSCall saveCall = this.provider.addCallToHash(this);

			if (saveCall != null) {
				saveCall.callID = saveCallID;
				this.provider.addCallToHash(saveCall);

				Vector<?> conns = new Vector<Object>(saveCall.connections);
				for (int i = 0; i < conns.size(); i++) {
					TSConnection conn = (TSConnection) conns.elementAt(i);
					Vector<?> cv = conn.getTermConns();
					if ((cv != null) && (cv.size() > 0)) {
						Vector<?> termConns = new Vector<Object>(cv);
						for (int j = 0; j < termConns.size(); j++) {
							TSConnection tc = (TSConnection) termConns
									.elementAt(j);
							CSTAConnectionID connID = tc.getConnID();
							connID.setCallID(saveCallID);
							tc.setConnID(connID);
						}
					} else {
						CSTAConnectionID connID = conn.getConnID();
						connID.setCallID(saveCallID);
						conn.setConnID(connID);
					}
				}
				moveInternalStuff(saveCall);
			}
		}
	}