void doCallbackSnapshots(Vector<TSEvent> eventList, int cause) {
		CallbackAndType cbAndType = null;
		synchronized (this.callbackAndTypeVector) {
			try {
				for (int i = 0; i < this.callbackAndTypeVector.size(); i++) {
					cbAndType = (CallbackAndType) this.callbackAndTypeVector
							.elementAt(i);
					if (cbAndType.devWithType == null) {
						synchronized (this.monitorThreads) {
							if (!this.monitorThreads
									.contains(cbAndType.callback)) {
								this.monitorThreads
										.addElement(cbAndType.callback);
								cbAndType.callback.addReference();
								sendSnapshot(cbAndType.callback, eventList,
										false, cause);
							}
						}
					} else {
						boolean found = false;
						DeviceObs devObs = null;
						synchronized (this.deviceObsVector) {
							for (int j = 0; j < this.deviceObsVector.size(); j++) {
								devObs = (DeviceObs) this.deviceObsVector
										.elementAt(j);
								if (devObs.callback == cbAndType.callback) {
									found = true;
									break;
								}
							}
							if (!found) {
								devObs = new DeviceObs(cbAndType.callback);
								devObs.devWithTypeVector
										.addElement(cbAndType.devWithType);
								this.deviceObsVector.addElement(devObs);
								cbAndType.callback.addReference();
								sendSnapshot(cbAndType.callback, eventList,
										false, cause);
							}
						}

					}

				}

			} finally {
				this.callbackAndTypeVector.removeAllElements();
			}
		}
		if (checkForMonitors()) {
			this.needSnapshot = false;
		}
	}