private void signalObservers(String from,String method,String url) {
		String ourl = url;		
		int pos = url.lastIndexOf("/");
		while (pos!=-1) { // we need to walk up the tree to check
			// only works for one entry now, daniel (no dubs in urls)
			
			// check for direct matches
			Object obs = observers.get(url);
			if (obs!=null) {
				ArrayList<MargeObserver> list = (ArrayList<MargeObserver>)obs;
				for(MargeObserver caller: list){
					caller.remoteSignal(from, method, url);
				}
			}			

			url = url.substring(0,pos);
			pos = url.lastIndexOf("/");
		}
		
		// more complex matches won't be found so we have to check them one by one
		for (Iterator<String> i = observers.keySet().iterator(); i.hasNext();) {
			String key = i.next();
			if (key.indexOf("*")!=-1) { // its a complex one so check
				if (isObserverMatch(key,ourl)) {
					Object obs = observers.get(key);
					if (obs!=null) {
						ArrayList<MargeObserver> list = (ArrayList<MargeObserver>)obs;
						for(MargeObserver caller: list){
							caller.remoteSignal(from, method, ourl+","+key);
						}
					}
				}
			}
		}
		
	}