private void handleCommunication() 
	{
		try 
		{
			requestFromLeaderPacket = new DatagramPacket(buffer, buffer.length);
			aMulticastSocket.receive(requestFromLeaderPacket);
			messageArray = (new String(requestFromLeaderPacket.getData())).split(Parameters.UDP_PARSER);
			requestFromLeaderPacket.setLength(buffer.length);
			if(messageArray[0].equals(Parameters.LR_NAME))
			{
				messageArray[1] = messageArray[1].trim();
				aLog.info("Recieived request from replica leader : " + messageArray[1]);
				if(messageArray[1].equals(Parameters.METHOD_CODE.CREATE_ACCOUNT.name()))
				{
					messageArray[7] = messageArray[7].trim();
					setORBreference(messageArray[7]);
					if(aInterfaceIDL.createPlayerAccount(messageArray[2], messageArray[3], Integer.parseInt(messageArray[4]),
														 messageArray[5], messageArray[6], messageArray[7]))
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "1" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
					else
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "0" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
				}
				else if(messageArray[1].equals(Parameters.METHOD_CODE.PLAYER_SIGN_IN.name()))
				{
					messageArray[4] = messageArray[4].trim();
					setORBreference(messageArray[4]);
					if(aInterfaceIDL.playerSignIn(messageArray[2], messageArray[3], messageArray[4]))
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "1" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
					else
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "0" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
				}
				else if(messageArray[1].equals(Parameters.METHOD_CODE.PLAYER_SIGN_OUT.name()))
				{
					messageArray[3] = messageArray[3].trim();
					setORBreference(messageArray[3]);
					if(aInterfaceIDL.playerSignOut(messageArray[2], messageArray[3]))
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "1" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
					else
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "0" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
				}
				else if(messageArray[1].equals(Parameters.METHOD_CODE.TRANSFER_ACCOUNT.name()))
				{
					messageArray[5] = messageArray[5].trim();
					setORBreference(messageArray[4]);
					if(aInterfaceIDL.transferAccount(messageArray[2], messageArray[3], messageArray[4], messageArray[5]))
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "1" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
					else
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "0" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
				}
				else if(messageArray[1].equals(Parameters.METHOD_CODE.SUSPEND_ACCOUNT.name()))
				{
					messageArray[5] = messageArray[5].trim();
					setORBreference(messageArray[4]);
					if(aInterfaceIDL.suspendAccount(messageArray[2], messageArray[3], messageArray[4], messageArray[5]))
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "1" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
					else
						data = Parameters.RA_NAME + Parameters.UDP_PARSER + "0" + Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
				}
				else if(messageArray[1].equals(Parameters.METHOD_CODE.GET_PLAYER_STATUS.name()))
				{
					messageArray[4] = messageArray[4].trim();
					setORBreference(messageArray[4]);
					data = Parameters.RA_NAME + Parameters.UDP_PARSER + 
							aInterfaceIDL.getPlayerStatus(messageArray[2], messageArray[3], messageArray[4]) +
							Parameters.UDP_PARSER + Parameters.UDP_END_PARSE;
				}
				buffer = new byte [Parameters.UDP_BUFFER_SIZE];
				buffer = data.getBytes();
				replyToLeaderPacket = new DatagramPacket(buffer, data.length(),  InetAddress.getByName("localhost"), Parameters.UDP_PORT_REPLICA_LEAD);
				aSendSocket.send(replyToLeaderPacket);
				aLog.info("Sent back results to replica leader : " + data.toString());
				data = "";
			}
		}
		catch (IOException e)
		{
			aLog.info("UDP crashed, closing UDP Socket");
			aSendSocket.close();
			aLog.info("UDP crashed, creating new UDP Socket");
			try {
				aSendSocket = new DatagramSocket();
			} catch (SocketException e1) {
				aLog.info("UDP Socket creation failed");
			}
		}
	}