private synchronized void handleReceiveNormalMessage(TimeStampedMessage message, boolean mustDuplicate) throws InterruptedException {
		// Deliver current message
		if (message.getKind().equals("replyAck")) {
			receivedAckNumber++;
			clockService.updateTime(message.getTimeStamp());
			Thread.sleep(110);
			System.out.println("Received ack from " + message.getSource());
			return;
		} else {
			receiveBuffer.add(message);
		}
		
		// Increment timestamp
		clockService.updateTime(message.getTimeStamp());
		printTimeStamp();
		// Duplicate the message and deliver it
		if (mustDuplicate) {
			TimeStampedMessage duplicateMessage = new TimeStampedMessage(message);
			duplicateMessage.setIsDuplicate(true);
			receiveBuffer.add(duplicateMessage);
			// Increment timestamp
			clockService.updateTime(message.getTimeStamp());
			printTimeStamp();
		}
		// Deliver delayed messages
		while (!receiveDelayedBuffer.isEmpty()) {
			receiveBuffer.add(receiveDelayedBuffer.poll());
			// Increment timestamp
			clockService.updateTime(message.getTimeStamp());
			printTimeStamp();
		}
		System.out.print(commandPrompt);
	}