docs: @SuppressWarnings("unchecked")
  	public boolean fetch() throws OpenViduJavaClientException, OpenViduHttpException {
  		HttpGet request = new HttpGet(OpenVidu.urlOpenViduServer + API_SESSIONS);
  
  		HttpResponse response;
  		try {
  			response = OpenVidu.httpClient.execute(request);
  		} catch (IOException e) {
  			throw new OpenViduJavaClientException(e.getMessage(), e.getCause());
  		}
  
  		try {
  			int statusCode = response.getStatusLine().getStatusCode();
  			if ((statusCode == org.apache.http.HttpStatus.SC_OK)) {
  				JSONObject jsonSessions = httpResponseToJson(response);
  				JSONArray jsonArraySessions = (JSONArray) jsonSessions.get("content");
  
  				// Set to store fetched sessionIds and later remove closed sessions
  				Set<String> fetchedSessionIds = new HashSet<>();
  				// Boolean to store if any Session has changed
  				final boolean[] hasChanged = { false };
  				jsonArraySessions.forEach(session -> {
  					String sessionId = (String) ((JSONObject) session).get("sessionId");
  					fetchedSessionIds.add(sessionId);
  					OpenVidu.activeSessions.computeIfPresent(sessionId, (sId, s) -> {
  						String beforeJSON = s.toJson();
  						s = s.resetSessionWithJson((JSONObject) session);
  						String afterJSON = s.toJson();
  						boolean changed = !beforeJSON.equals(afterJSON);
  						hasChanged[0] = hasChanged[0] || changed;
  						log.info("Available session '{}' info fetched. Any change: {}", sessionId, changed);
  						return s;
  					});
  					OpenVidu.activeSessions.computeIfAbsent(sessionId, sId -> {
  						log.info("New session '{}' fetched", sessionId);
  						hasChanged[0] = true;
  						return new Session((JSONObject) session);
  					});
  				});
  
  				// Remove closed sessions from activeSessions map
  				OpenVidu.activeSessions = OpenVidu.activeSessions.entrySet().stream().filter(entry -> {
  					if (fetchedSessionIds.contains(entry.getKey())) {
  						return true;
  					} else {
  						log.info("Removing closed session {}", entry.getKey());
  						hasChanged[0] = true;
  						return false;
  					}
  				}).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
  				log.info("Active sessions info fetched: {}", OpenVidu.activeSessions.keySet());
  				return hasChanged[0];
  			} else {
  				throw new OpenViduHttpException(statusCode);
  			}
  		} finally {
  			EntityUtils.consumeQuietly(response.getEntity());
  		}
  	}