@Override
		public void action() {
			ACLMessage msg = myAgent.receive();
			if(msg != null) {
				//Log the history of the message
				
				//Create a response to the message
				ACLMessage reply = msg.createReply();
				//We received a request
				if(msg.getPerformative() == ACLMessage.REQUEST) {
					//Check for the content
					String content = msg.getContent();

					//Update Local History
					CommunicationHistory history = new CommunicationHistory(msg.getSender().toString(), ACLMessage.getPerformative(msg.getPerformative()), msg.getContent());
					agent.domain_knowledge.updateHistory(gson.toJson(history));
					
					//Check to see if the content has specified one or more goals: G={}
					if(content != null && ((content.toLowerCase().indexOf("g={") != -1) || (content.indexOf("g=") != -1)) ) {
						//Update the Communication Knowledge
						agent.domain_knowledge.updateCommunication(reply);
						//Goal is provided - update the Goal Domain Knowledge
						agent.domain_knowledge.updateGoals(content);
						
						beginCIRProcess();
						
						//Inform the Requester that the CIR Agent is trying to fulfill the request
						reply.setPerformative(ACLMessage.INFORM);
						//reply.setContent("Working on fulfilling your request!");
						reply.setContent("sent");
					} else {
						//No content - respond that we cannot deal with blank request (REFUSE)
						myLogger.log(Logger.INFO, "Agent "+ myAgent.getLocalName()+" - Unexpected request ["+content+"] received from "+msg.getSender().getLocalName());
						reply.setPerformative(ACLMessage.REFUSE);
						reply.setContent("( UnexpectedContent ("+content+"))");
					}
				} else {
					//Cannot understand the Performative
					myLogger.log(Logger.INFO, "Agent "+ myAgent.getLocalName() +" - Unexpected message ["+ACLMessage.getPerformative(msg.getPerformative())+"] received from "+msg.getSender().getLocalName());
					reply.setPerformative(ACLMessage.NOT_UNDERSTOOD);
					reply.setContent("( (Unexpected-act "+ACLMessage.getPerformative(msg.getPerformative())+") )");
				}
				//Send the reply
				myAgent.send(reply);
			} else {
				//Null message - block until message received
				block();
			}
			
		}