void deleteInstanceOfDeviceFromHash(TSDevice _soughtObj) {
		int keys_not_in_hash = 0;
		int keys_pointing_elsewhere = 0;
		Hashtable<String, Object> keys_pointing_at = new Hashtable<String, Object>();

		StringBuffer alias_names = new StringBuffer();

		StringBuffer elsewhere_names = new StringBuffer();

		StringBuffer not_in_hash_names = new StringBuffer();

		synchronized (this.devHash) {
			Vector<?> keys = _soughtObj.getKeys();
			for (int i = 0; i < keys.size(); i++) {
				String key = ((CSTAExtendedDeviceID) keys.elementAt(i))
						.getDeviceID();
				Object foundObj = this.devHash.get(key);
				boolean foundAny = foundObj != null;
				boolean foundThatOne = foundObj == _soughtObj;

				if (foundThatOne) {
					this.devHash.remove(key);
				}

				if (foundThatOne) {
					addDeviceNameToPrintingBuffer(alias_names, key);
				} else if (foundAny) {
					keys_pointing_elsewhere++;
					keys_pointing_at.put(key, foundObj);
					addDeviceNameToPrintingBuffer(elsewhere_names, key);
				} else {
					keys_not_in_hash++;
					addDeviceNameToPrintingBuffer(not_in_hash_names, key);
				}

			}

		}

		if (keys_pointing_elsewhere + keys_not_in_hash == 0) {
			log.info("NOTICE: devHash.remove() expected, found and removed "
					+ _soughtObj + " by device name(s) [" + alias_names + "]");
		} else {
			if (keys_pointing_elsewhere > 0) {
				Iterator<String> key_iter = keys_pointing_at.keySet().iterator();

				while (key_iter.hasNext()) {
					String d = (String) key_iter.next();
					TSDevice t = (TSDevice) keys_pointing_at.get(d);
					log.info("NOTICE: devHash.remove() expected "
							+ _soughtObj
							+ " but found "
							+ t
							+ " by device name "
							+ d
							+ " - race condition - left latter TSDevice in hash");
				}

			}

			if (keys_not_in_hash > 0)
				log.info("NOTICE: attempted to devHash.remove() " + _soughtObj
						+ " by device name(s) [" + not_in_hash_names
						+ "] but no TSDevice there by those name(s)");
		}
	}