public synchronized void relayToOthers(RMIMessageWithSource msg)
			throws RemoteException {
//		TracerInfo.newInfo("relayToOthers", this);
//		TracerInfo.newInfo("From: " + msg.getSource(), this);
		if(!msg.getType().equals("point"))
			aListener.appendMsg("relayToOthers" + " From: " + msg.getSource() + " " + msg.getType() + ":" + " " + msg.getMessage());
		
		new AMessageWithSource(msg);
		
		ArrayList<OperationalTransformation> otList = null;
		if(msg.getType().toLowerCase().equals("topic")) {
			otList = listTopicOT;
		}
		else if(!msg.getType().toLowerCase().equals("point")) {
			otList = listMsgOT;
		}
	
		if(otList != null)
			operationTransformation(msg,otList);
		
		int index = 0;
		ArrayList<RMIClientInterface> clientList = sessionServer.listClients();
		for (Iterator i = clientList.iterator(); i.hasNext();) {

			RMIClientInterface client = (RMIClientInterface) i.next();

			if (!client.getName().equals(msg.getSource())) {
				
				if (!msg.getType().toLowerCase().equals("point")) {
					Operation op = otList.get(index).getNewOperation(true);
					aMessageWithSource.setMessageWithSource(msg);
					aMessageWithSource.setOperation(op);
					client.newMessage(aMessageWithSource);
				}
				else
					client.newMessage(msg);
			}
			index++;
		}
		
		addToHistory(msg);
	}