protected synchronized void deliverObserverEvents(
			Vector<TSEvent> _eventList, boolean snapshot) {
		String tsEventLog = null;
		if (_eventList == null)
			return;
		int metaCode;
		int cause;
		if (snapshot) {
			metaCode = 135;
			cause = 110;
		} else {
			metaCode = 136;
			cause = 100;
		}

		int nextMetaEventIndex = this.observerEventList.size();

		Object privateData = null;

		log.debug("meta event BEGIN: cause (" + cause + ") metaCode ("
				+ metaCode + ")" + " for " + this.observer);

		for (int i = 0; i < _eventList.size(); i++) {
			TSEvent ev = (TSEvent) _eventList.elementAt(i);

			privateData = ev.getPrivateData();

			switch (ev.getEventType()) {
			case 1:
				tsEventLog = "PROVIDERINSERVICEEVENT for "
						+ (TSProvider) ev.getEventTarget();

				addEv(new TsapiProviderInServiceEvent(
						createProvider((TSProviderImpl) ev.getEventTarget()),
						cause, metaCode, privateData), tsEventLog);

				break;
			case 2:
				tsEventLog = "PROVIDEROUTOFSERVICEEVENT for "
						+ (TSProvider) ev.getEventTarget();

				addEv(new TsapiProviderOutOfServiceEvent(
						createProvider((TSProviderImpl) ev.getEventTarget()),
						cause, metaCode, privateData), tsEventLog);

				break;
			case 3:
				tsEventLog = "PROVIDERSHUTDOWNEVENT for "
						+ (TSProvider) ev.getEventTarget();

				addEv(new TsapiProviderShutdownEvent(
						createProvider((TSProviderImpl) ev.getEventTarget()),
						cause, metaCode, privateData), tsEventLog);

				break;
			case 9999:
				tsEventLog = "PRIVATEEVENT for "
						+ (TSProvider) ev.getEventTarget();

				addEv(new TsapiPrivateProviderEvent(
						createProvider((TSProviderImpl) ev.getEventTarget()),
						cause, metaCode, privateData), tsEventLog);
			}

		}

		synchronized (this.observerEventList) {
			log.debug("meta event END for " + this.observer
					+ " eventList size=" + this.observerEventList.size());

			if (this.observerEventList.size() == 0) {
				log.debug("no events to send to " + this.observer);
				return;
			}

			if (nextMetaEventIndex < this.observerEventList.size()) {
				((TsapiObserverEvent) this.observerEventList
						.elementAt(nextMetaEventIndex)).setNewMetaEventFlag();
			}
		}
	}