public synchronized boolean mergeIntoMemberList(Process process) {
		
		int index = process.getGlobalList().indexOf(getAlteredNode());
		MemberNode matchingNode = index == -1 ? null : process.getGlobalList().get(index);
		if (checkIsIntructionJoinVariant()) {
			if (matchingNode == null
					&&
					/* && checkHasJoinArrivedLate() */
					(process.getRecentLeftNode() == null
							|| !process.getRecentLeftNode()
									.equals(getAlteredNode()) || getAlteredNode()
							.getTimeStamp()
							.after(process
									.getRecentLeftNode().getTimeStamp()))) {
				process.getGlobalList().add(getAlteredNode());
				return true;
			} else if (matchingNode.getTimeStamp().before(
					getAlteredNode().getTimeStamp())) {
				matchingNode.setTimeStamp(getAlteredNode().getTimeStamp());
				return true;
			}
		} else {

			if (matchingNode != null
					&& matchingNode.getTimeStamp().before(
							getAlteredNode().getTimeStamp())) {
				process.getGlobalList().remove(getAlteredNode());
				process.setRecentLeftNode(getAlteredNode());
				return true;
			} else {
				process.setRecentLeftNode(getAlteredNode());
			}

		}
		return false;
	}