    public synchronized void all(ServerSession remote, Message message) {
        if (message != null) {
        	if (messages.containsKey(message.getChannel())) {
        		messages.put(message.getChannel(), messages.get(message.getChannel())+1);
        	} else {
        		messages.put(message.getChannel(), 1);
        	}
        	if (log_messages) {
        		System.err.println(message.getJSON());
        	}
        	Object pageObj = message.get("page");
    		if (pageObj instanceof String) {
    			String page = (String)pageObj;
    			page = page.startsWith("http://") ? page.substring(7) : page;
    			page = page.startsWith("www") ? page.substring(3) : page;
    			page = page.startsWith("kabbalahgroup.info/internet/") ? page.substring(28) : page;
    			page = page.startsWith("localhost:3000/") ? page.substring(15) : page;
    			String language = page.substring(0, 2);
    			page = page.substring(2, page.length());
    			page = page.startsWith("#") ? page.substring(1) : page;
    			Map<String, Set<ServerSession>> page_data = null;
    			Set<ServerSession> sessions = null;
    			page_data = pages.get(page);
    			if (page_data == null) {
    				page_data = new TreeMap<String, Set<ServerSession>>();
    			}
    			sessions = page_data.get(language);
    			if (sessions == null) {
    				sessions = new HashSet<ServerSession>();			
    			}
    			sessions.add(remote);
    			page_data.put(language, sessions);
    			pages.put(page, page_data);
        		if (users.containsKey(remote)) {
        			String[] lang_page = users.get(remote);
        			if (lang_page == null || lang_page.length < 2 ||
        				lang_page[0].compareTo(language) != 0 ||
        				lang_page[1].compareTo(page) != 0) {
		                Map<String, Set<ServerSession>> pages_page_data = pages.get(users.get(remote)[1]);
		                Set<ServerSession> pages_sessions = pages_page_data.get(language); 
		                pages_sessions.remove(remote);
		            	if (pages_sessions.size() == 0) {
		            		pages_page_data.remove(language);
		            		if (pages_page_data.size() == 0) {
		            			pages.remove(users.get(remote));
		            		}
		            	}
        			}            		
        		}
    			users.put(remote, new String[] {language, page});
        	}
        }
        update();
    }

    public synchronized void all(ServerSession remote, Message message) {
        if (message != null) {
        	if (messages.containsKey(message.getChannel())) {
        		messages.put(message.getChannel(), messages.get(message.getChannel())+1);
        	} else {
        		messages.put(message.getChannel(), 1);
        	}
        	if (log_messages) {
        		System.err.println(message.getJSON());
        	}
        	Object pageObj = message.get("page");
    		if (pageObj instanceof String) {
    			String page = (String)pageObj;
    			page = page.startsWith("http://") ? page.substring(7) : page;
    			page = page.startsWith("www") ? page.substring(3) : page;
    			page = page.startsWith("kabbalahgroup.info/internet/") ? page.substring(28) : page;
    			page = page.startsWith("localhost:3000/") ? page.substring(15) : page;
    			String language = page.substring(0, 2);
    			page = page.substring(2, page.length());
    			page = page.startsWith("#") ? page.substring(1) : page;
    			Map<String, Set<ServerSession>> page_data = null;
    			Set<ServerSession> sessions = null;
    			page_data = pages.get(page);
    			if (page_data == null) {
    				page_data = new TreeMap<String, Set<ServerSession>>();
    			}
    			sessions = page_data.get(language);
    			if (sessions == null) {
    				sessions = new HashSet<ServerSession>();			
    			}
    			sessions.add(remote);
    			page_data.put(language, sessions);
    			pages.put(page, page_data);
        		if (users.containsKey(remote)) {
        			String[] lang_page = users.get(remote);
        			if (lang_page == null || lang_page.length < 2 ||
        				lang_page[0].compareTo(language) != 0 ||
        				lang_page[1].compareTo(page) != 0) {
		                Map<String, Set<ServerSession>> pages_page_data = pages.get(users.get(remote)[1]);
		                Set<ServerSession> pages_sessions = pages_page_data.get(users.get(remote)[0]); 
		                pages_sessions.remove(remote);
		            	if (pages_sessions.size() == 0) {
		            		pages_page_data.remove(language);
		            		if (pages_page_data.size() == 0) {
		            			pages.remove(users.get(remote));
		            		}
		            	}
        			}            		
        		}
    			users.put(remote, new String[] {language, page});
        	}
        }
        update();
    }
