private boolean updateSession(Response re) {
		byte[] token = re.getSessionToken();

		try {
			if (token == null || token.length == 0) {
				throw new NotLoggedInException("Your session has expired. Please log in again to continue.");
			}
			
			if (userProfile != null) {
				if (!Arrays.equals(token, userProfile.getSessionToken())) {
					userProfile.setSessionToken(token);
				} else {
					// If the new token is the same as the old one, something went wrong
					throw new NotLoggedInException("Your session appears to be invalid. You have been logged out for security reasons. Please log in again to continue");
				}
			} else if (userId != null) {
				// If the user profile isn't populated, but the user id is known
				// then call an update request, and pull in the new profile data
				// from the response
				UpdateProfileRequest rq = new UpdateProfileRequest();
				rq.setSenderId(userId);
				rq.setSessionToken(token);
				
				boolean success = Comms.sendMessage(rq);

				if (success) {
					// Receive response and handle
					try {
						UpdateProfileResponse res = (UpdateProfileResponse) Comms.receiveMessage();
						handle(res);
					} catch (ClassCastException ex) {
						Alerter.getHandler().severe("Profile Update Failure",
										"Response from server was malformed. Please try again.");
					}
				}
			} else {
				throw new NotLoggedInException("You don't appear to have logged in to the system. Please try again.");
			}
			
			return true;
		} catch (NotLoggedInException ex) {
			showLogin();
			Alerter.getHandler().warning("Session Timeout", ex.getMessage());
			return false;
		}
	}