diff --git a/src/main/java/org/olat/modules/adobeconnect/AdobeConnectModule.java b/src/main/java/org/olat/modules/adobeconnect/AdobeConnectModule.java
index f15234f23f84aa180a12147f34f20b18f536c74b..5bfb87066a743981a20aa16dfef09acff79312cd 100644
--- a/src/main/java/org/olat/modules/adobeconnect/AdobeConnectModule.java
+++ b/src/main/java/org/olat/modules/adobeconnect/AdobeConnectModule.java
@@ -93,6 +93,13 @@ public class AdobeConnectModule extends AbstractSpringModule implements ConfigOn
 	private String createMeetingImmediately;
 	@Value("${vc.adobe.login.compatibility.mode:false}")
 	private String loginCompatibilityMode;
+
+	@Value("${vc.http.connect.timeout:30000}")
+	private int httpConnectTimeout;
+	@Value("${vc.http.connect.request.timeout:30000}")
+	private int httpConnectRequestTimeout;
+	@Value("${vc.http.connect.socket.timeout:30000}")
+	private int httpSocketTimeout;
 	
 	@Autowired
 	public AdobeConnectModule(CoordinatorManager coordinatorManager) {
@@ -343,4 +350,16 @@ public class AdobeConnectModule extends AbstractSpringModule implements ConfigOn
 	public boolean isLoginCompatibilityMode() {
 		return "true".equals(loginCompatibilityMode);
 	}
+
+	public int getHttpConnectTimeout() {
+		return httpConnectTimeout;
+	}
+
+	public int getHttpConnectRequestTimeout() {
+		return httpConnectRequestTimeout;
+	}
+
+	public int getHttpSocketTimeout() {
+		return httpSocketTimeout;
+	}
 }
diff --git a/src/main/java/org/olat/modules/adobeconnect/manager/AbstractAdobeConnectProvider.java b/src/main/java/org/olat/modules/adobeconnect/manager/AbstractAdobeConnectProvider.java
index f5f6ec4da7c4904079462928690a4809f4c997df..2d655fd8f5ef3b47d4c0d9ffec65999ffe69b3bd 100644
--- a/src/main/java/org/olat/modules/adobeconnect/manager/AbstractAdobeConnectProvider.java
+++ b/src/main/java/org/olat/modules/adobeconnect/manager/AbstractAdobeConnectProvider.java
@@ -31,7 +31,6 @@ import javax.ws.rs.core.UriBuilder;
 
 import org.apache.http.HttpEntity;
 import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.config.RequestConfig.Builder;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -39,6 +38,7 @@ import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.message.BasicHeader;
 import org.apache.http.util.EntityUtils;
 import org.apache.logging.log4j.Logger;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.i18n.I18nModule;
@@ -82,6 +82,8 @@ public abstract class AbstractAdobeConnectProvider implements AdobeConnectSPI {
 	private String adminFolderScoId;
 	private BreezeSession currentSession;
 	
+	@Autowired
+	private DB dbInstance;
 	@Autowired
 	protected AdobeConnectModule adobeConnectModule;
 	
@@ -633,10 +635,12 @@ public abstract class AbstractAdobeConnectProvider implements AdobeConnectSPI {
 	}
 
 	private CloseableHttpClient buildHttpClient() {
+		dbInstance.commit();// free connection
+
 		RequestConfig requestConfig = RequestConfig.copy(RequestConfig.DEFAULT)
-				.setConnectTimeout(10000)
-				.setConnectionRequestTimeout(10000)
-				.setSocketTimeout(20000)
+				.setConnectTimeout(adobeConnectModule.getHttpConnectTimeout())
+				.setConnectionRequestTimeout(adobeConnectModule.getHttpConnectRequestTimeout())
+				.setSocketTimeout(adobeConnectModule.getHttpSocketTimeout())
 				.build();
 		return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
 	}
diff --git a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonModule.java b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonModule.java
index 4012847b407e31a7508289500a836915d25276e1..c709e80df3e1d231f41d65b5547504ff071f1a15 100644
--- a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonModule.java
+++ b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonModule.java
@@ -81,6 +81,12 @@ public class BigBlueButtonModule extends AbstractSpringModule implements ConfigO
 	@Value("${vc.bigbluebutton.user.bandwidth.requirement:0.4}")
 	private Double userBandwidhtRequirement;
 	
+	@Value("${vc.http.connect.timeout:30000}")
+	private int httpConnectTimeout;
+	@Value("${vc.http.connect.request.timeout:30000}")
+	private int httpConnectRequestTimeout;
+	@Value("${vc.http.connect.socket.timeout:30000}")
+	private int httpSocketTimeout;
 	
 	@Autowired
 	public BigBlueButtonModule(CoordinatorManager coordinatorManager) {
@@ -281,5 +287,17 @@ public class BigBlueButtonModule extends AbstractSpringModule implements ConfigO
 	public void setAdhocMeetingEnabled(boolean adhocMeetingEnabled) {
 		this.adhocMeetingEnabled = Boolean.toString(adhocMeetingEnabled);
 		setStringProperty(PROP_ADHOC_MEETING, this.adhocMeetingEnabled, true);
-	}	
+	}
+	
+	public int getHttpConnectTimeout() {
+		return httpConnectTimeout;
+	}
+
+	public int getHttpConnectRequestTimeout() {
+		return httpConnectRequestTimeout;
+	}
+
+	public int getHttpSocketTimeout() {
+		return httpSocketTimeout;
+	}
 }
diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java
index 20027db1dd2ae999d48140b3a8a0bc72f7390cf9..2fc0003221e9b720b92a6fb289c98bc29a6893ed 100644
--- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java
+++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java
@@ -32,6 +32,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -59,6 +60,7 @@ import org.olat.group.DeletableGroupData;
 import org.olat.modules.bigbluebutton.BigBlueButtonManager;
 import org.olat.modules.bigbluebutton.BigBlueButtonMeeting;
 import org.olat.modules.bigbluebutton.BigBlueButtonMeetingTemplate;
+import org.olat.modules.bigbluebutton.BigBlueButtonModule;
 import org.olat.modules.bigbluebutton.BigBlueButtonRecording;
 import org.olat.modules.bigbluebutton.BigBlueButtonServer;
 import org.olat.modules.bigbluebutton.BigBlueButtonTemplatePermissions;
@@ -103,6 +105,8 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager,
 	@Autowired
 	private BusinessGroupService businessGroupService;
 	@Autowired
+	private BigBlueButtonModule bigBlueButtonModule;
+	@Autowired
 	private BigBlueButtonServerDAO bigBlueButtonServerDao;
 	@Autowired
 	private BigBlueButtonMeetingDAO bigBlueButtonMeetingDao;
@@ -841,10 +845,19 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager,
 	}
 	
 	protected Document sendRequest(BigBlueButtonUriBuilder builder, BigBlueButtonErrors errors) {
+		dbInstance.commit();
+		
 		URI uri = builder.build();
 		HttpGet get = new HttpGet(uri);
+		RequestConfig requestConfig = RequestConfig.copy(RequestConfig.DEFAULT)
+				.setConnectTimeout(bigBlueButtonModule.getHttpConnectTimeout())
+				.setConnectionRequestTimeout(bigBlueButtonModule.getHttpConnectRequestTimeout())
+				.setSocketTimeout(bigBlueButtonModule.getHttpSocketTimeout())
+				.build();
 		try(CloseableHttpClient httpClient = HttpClientBuilder.create()
-				.disableAutomaticRetries().build();
+				.setDefaultRequestConfig(requestConfig)
+				.disableAutomaticRetries()
+				.build();
 				CloseableHttpResponse response = httpClient.execute(get)) {
 			int statusCode = response.getStatusLine().getStatusCode();
 			log.debug("Status code of: {} {}", uri, statusCode);
diff --git a/src/main/java/org/olat/modules/gotomeeting/GoToMeetingModule.java b/src/main/java/org/olat/modules/gotomeeting/GoToMeetingModule.java
index 6b60b62d1ac9d160ed14547b1c911857e0f79abe..191515710c96c93de877b60acf8c365c4db92ed0 100644
--- a/src/main/java/org/olat/modules/gotomeeting/GoToMeetingModule.java
+++ b/src/main/java/org/olat/modules/gotomeeting/GoToMeetingModule.java
@@ -51,6 +51,13 @@ public class GoToMeetingModule extends AbstractSpringModule implements ConfigOnO
 	@Value("${vc.gotomeetings.timezone.id:null}")
 	private String goToTimeZoneId;
 	
+	@Value("${vc.http.connect.timeout:30000}")
+	private int httpConnectTimeout;
+	@Value("${vc.http.connect.request.timeout:30000}")
+	private int httpConnectRequestTimeout;
+	@Value("${vc.http.connect.socket.timeout:30000}")
+	private int httpSocketTimeout;
+	
 	@Autowired
 	public GoToMeetingModule(CoordinatorManager coordinatorManager) {
 		super(coordinatorManager);
@@ -122,5 +129,15 @@ public class GoToMeetingModule extends AbstractSpringModule implements ConfigOnO
 		setStringProperty(GOTO_TIMEZONEID, goToTimeZoneId, true);
 	}
 	
-	
+	public int getHttpConnectTimeout() {
+		return httpConnectTimeout;
+	}
+
+	public int getHttpConnectRequestTimeout() {
+		return httpConnectRequestTimeout;
+	}
+
+	public int getHttpSocketTimeout() {
+		return httpSocketTimeout;
+	}
 }
diff --git a/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java b/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java
index 705e1d7e349a0eb6550a38ed72a633ed5c3ba5df..539772e781e501d7bb81a93506f31b46c4b8d1bb 100644
--- a/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java
+++ b/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java
@@ -27,6 +27,7 @@ import java.util.List;
 
 import org.apache.http.HttpEntity;
 import org.apache.http.NameValuePair;
+import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpDelete;
@@ -161,7 +162,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 			RepositoryEntry resourceOwner, String subIdentifier, BusinessGroup businessGroup, GoToError error) {
 		
 		GoToMeeting scheduledMeeting = null;
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings";
 			HttpPost post = new HttpPost(url);
 			decorateWithAccessToken(post, organizer);
@@ -172,7 +173,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 			String objectStr = trainingJson.toString();
 			post.setEntity(new StringEntity(objectStr, ContentType.APPLICATION_JSON));
 			
-			GoToResponse response = execute(httpClient, post);
+			GoToResponse response = execute(post);
 			int status = response.status();
 			if(status == 201) {//created
 				String trainingKey = response.content();
@@ -215,7 +216,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 	}
 	
 	private void updateStartEnd(GoToMeetingImpl meeting, Date start, Date end, GoToError error) {
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			GoToOrganizer organizer = meeting.getOrganizer();
 			String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey() + "/times";
 
@@ -225,7 +226,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 			String payload = GoToJsonUtil.trainingTimes(goToMeetingModule.getGoToTimeZoneId(), start, end).toString();
 			put.setEntity(new StringEntity(payload, ContentType.APPLICATION_JSON));
 			
-			GoToResponse response = execute(httpClient, put);
+			GoToResponse response = execute(put);
 			int status = response.status();
 			if(status == 200) {//created
 				meeting.setStartDate(start);
@@ -239,7 +240,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 	}
 	
 	private void updateNameDescription(GoToMeetingImpl meeting, GoToTrainingG2T training, String name, String description, GoToError error) {
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			GoToOrganizer organizer = meeting.getOrganizer();
 			String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey() + "/nameDescription";
 
@@ -253,7 +254,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 			String payload = GoToJsonUtil.trainingNameDescription(name, description).toString();
 			put.setEntity(new StringEntity(payload, ContentType.APPLICATION_JSON));
 			
-			GoToResponse response = execute(httpClient, put);
+			GoToResponse response = execute(put);
 			int status = response.status();
 			if(status == 204) {//created
 				meeting.setName(name);
@@ -273,7 +274,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 	public GoToRegistrant registerTraining(GoToMeeting meeting, Identity trainee, GoToError error) {
 		GoToRegistrant registrant = registrantDao.getRegistrant(meeting, trainee);
 		if(registrant == null) {
-			try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+			try {
 				GoToOrganizer organizer = meeting.getOrganizer();
 				String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey() + "/registrants";
 
@@ -283,7 +284,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 				String traineeJson = GoToJsonUtil.registrant(trainee).toString();
 				post.setEntity(new StringEntity(traineeJson, ContentType.APPLICATION_JSON));
 				
-				GoToResponse response = execute(httpClient, post);
+				GoToResponse response = execute(post);
 				int status = response.status();
 				if(status == 201) {//created
 					String content = response.content();
@@ -310,14 +311,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 	}
 	
 	private GoToRegistrantG2T getRegistrant(String registrantKey, GoToMeeting meeting, GoToError error) {
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			GoToOrganizer organizer = meeting.getOrganizer();
 			String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey() + "/registrants/" + registrantKey;
 
 			HttpGet get = new HttpGet(url);
 			decorateWithAccessToken(get, organizer);
 
-			GoToResponse response = execute(httpClient, get);
+			GoToResponse response = execute(get);
 			if(response.status() == 200) {
 				String content = response.content();
 				return GoToJsonUtil.parseAddRegistrant(content);
@@ -345,13 +346,13 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 		} catch (Exception e) {
 			log.error("", e);
 		} finally {
-			log.error(method + " return " + status + ": " + responseString);
+			log.error("{} return {}: {}", method, status, responseString);
 		}
 	}
 	
 	private void logGoToError(String method, int status, String responseString, GoToError error) {
 		error.setErrorCode(status);
-		log.error(method + " return " + status + ": " + responseString);
+		log.error("{} return {}: {}", method, status, responseString);
 	}
 	
 	@Override
@@ -387,14 +388,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 	}
 	
 	private GoToTrainingG2T getTraining(GoToMeeting meeting, GoToError error) {
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			GoToOrganizer organizer = meeting.getOrganizer();
 			String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey();
 
 			HttpGet get = new HttpGet(url);
 			decorateWithAccessToken(get, organizer);
 
-			GoToResponse response = execute(httpClient, get);
+			GoToResponse response = execute(get);
 			int status = response.status();
 			if(status == 200) {//deleted
 				String content = response.content();
@@ -411,14 +412,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 
 	@Override
 	public String startTraining(GoToMeeting meeting, GoToError error) {
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			GoToOrganizer organizer = meeting.getOrganizer();
 			String url = gotoTrainingUrl + "/trainings/" + meeting.getMeetingKey() + "/start";
 
 			HttpGet get = new HttpGet(url);
 			decorateWithAccessToken(get, organizer);
 
-			GoToResponse response = execute(httpClient, get);
+			GoToResponse response = execute(get);
 			int status = response.status();
 			if(status == 200) {//deleted
 				String content = response.content();
@@ -445,14 +446,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 
 	@Override
 	public List<GoToRecordingsG2T> getRecordings(GoToMeeting meeting, GoToError error) {
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			GoToOrganizer organizer = meeting.getOrganizer();
 			String url = gotoTrainingUrl + "/trainings/" + meeting.getMeetingKey() + "/recordings";
 
 			HttpGet get = new HttpGet(url);
 			decorateWithAccessToken(get, organizer);
 
-			GoToResponse response = execute(httpClient, get);
+			GoToResponse response = execute(get);
 			int status = response.status();
 			if(status == 200) {//deleted
 				String content = response.content();
@@ -481,14 +482,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 	}
 	
 	private boolean deleteTraining(GoToMeeting meeting, GoToError error) {
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			GoToOrganizer organizer = meeting.getOrganizer();
 			String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey();
 
 			HttpDelete delete = new HttpDelete(url);
 			decorateWithAccessToken(delete, organizer);
 
-			GoToResponse response = execute(httpClient, delete);
+			GoToResponse response = execute(delete);
 			int status = response.status();
 			if(status == 204) {//deleted
 				return true;
@@ -500,7 +501,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 					error.setError(errorVo.getErrorCode());
 					error.setDescription(errorVo.getDescription());
 				} else {
-					log.error("deleteTraining return " + status + ": " + content);
+					log.error("deleteTraining return {}: {}", status, content);
 				}
 			} else {
 				logGoToError("deleteTraining", response, error);
@@ -532,7 +533,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 	public boolean refreshToken(GoToOrganizer organizer) {
 		GoToOrganizer reloadedOrganizer = organizerDao.loadOrganizerForUpdate(organizer);
 		boolean success = false;
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			HttpPost post = new HttpPost(tokenUrl);
 			post.addHeader("Accept", "application/json");
 			
@@ -545,7 +546,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 			urlParameters.add(new BasicNameValuePair("refresh_token", reloadedOrganizer.getRefreshToken()));
 			post.setEntity(new UrlEncodedFormEntity(urlParameters));
 			
-			GoToResponse response = execute(httpClient, post);
+			GoToResponse response = execute(post);
 			if(response.status() < 400) {
 				GoToOrganizerG2T org = GoToJsonUtil.parseToken(response.content());
 				organizerDao.updateOrganizer(reloadedOrganizer, org.getAccessToken(), org.getRefreshToken(), org.getExpiresIn());
@@ -574,7 +575,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 	 */
 	public GoToOrganizerG2T login(String username, String password, GoToError error) {
 		GoToOrganizerG2T organizer = null;
-		try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+		try {
 			HttpPost post = new HttpPost(tokenUrl);
 			post.addHeader("Accept", "application/json");
 			
@@ -588,7 +589,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 			urlParameters.add(new BasicNameValuePair("password", password));
 			post.setEntity(new UrlEncodedFormEntity(urlParameters));
 			
-			GoToResponse response = execute(httpClient, post);
+			GoToResponse response = execute(post);
 			if(response.status() < 400) {
 				organizer = GoToJsonUtil.parseToken(response.content());
 			} else {
@@ -640,8 +641,18 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager {
 		return new Date().after(cal.getTime());
 	}
 	
-	private GoToResponse execute(CloseableHttpClient httpClient, HttpUriRequest request) {
-		try(CloseableHttpResponse response = httpClient.execute(request)) {
+	private GoToResponse execute(HttpUriRequest request) {
+		dbInstance.commit();// free connection
+		
+		RequestConfig requestConfig = RequestConfig.copy(RequestConfig.DEFAULT)
+				.setConnectTimeout(goToMeetingModule.getHttpConnectTimeout())
+				.setConnectionRequestTimeout(goToMeetingModule.getHttpConnectRequestTimeout())
+				.setSocketTimeout(goToMeetingModule.getHttpSocketTimeout())
+				.build();
+		
+		try(CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
+				
+				CloseableHttpResponse response = httpClient.execute(request)) {
 			int status = response.getStatusLine().getStatusCode();
 			HttpEntity entity = response.getEntity();
 			String content;
diff --git a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java
index 3ec6350148b128c80410cf962d817c74041d66b4..29a77d46cea7429eb3a2ee8023eb3ecb1879b2ed 100644
--- a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java
+++ b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java
@@ -33,6 +33,7 @@ import javax.annotation.PostConstruct;
 import javax.ws.rs.core.UriBuilder;
 import javax.xml.ws.BindingProvider;
 
+import org.apache.logging.log4j.Logger;
 import org.apache.openmeetings.axis.services.GetRoomsWithCurrentUsersByListAndType;
 import org.apache.openmeetings.axis.services.RoomService;
 import org.apache.openmeetings.axis.services.RoomServicePortType;
@@ -43,11 +44,11 @@ import org.apache.openmeetings.axis.services.xsd.RoomUser;
 import org.apache.openmeetings.db.dto.record.xsd.RecordingDTO;
 import org.apache.openmeetings.db.dto.room.xsd.RoomDTO;
 import org.apache.openmeetings.db.entity.server.xsd.Sessiondata;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.helpers.Settings;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.UserConstants;
-import org.apache.logging.log4j.Logger;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.WebappHelper;
@@ -78,6 +79,8 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel
 	
 	private static final Logger log = Tracing.createLoggerFor(OpenMeetingsManagerImpl.class);
 	
+	@Autowired
+	private DB dbInstance;
 	@Autowired
 	private OpenMeetingsDAO openMeetingsDao;
 	@Autowired
@@ -718,6 +721,8 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel
 	}
 
 	private final RoomServicePortType getRoomWebService() {
+		dbInstance.commit();// free connection before an HTTP call
+		
 		RoomService ss = new RoomService();
 		RoomServicePortType port = ss.getRoomServiceHttpSoap11Endpoint();
 		String endPoint = getOpenMeetingsEndPoint() + "RoomService?wsdl";
@@ -726,6 +731,8 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel
 	}
 	
 	private final UserServicePortType getUserWebService() {
+		dbInstance.commit();// free connection before an HTTP call
+		
 		UserService ss = new UserService();
 		UserServicePortType port = ss.getUserServiceHttpSoap11Endpoint();
 		String endPoint = getOpenMeetingsEndPoint() + "UserService?wsdl";
diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties
index 31ab172215fa656806790c128cbf5727310b6fad..7a50c266ca0dfc6666add8370001793e76d084c9 100644
--- a/src/main/resources/serviceconfig/olat.properties
+++ b/src/main/resources/serviceconfig/olat.properties
@@ -1527,6 +1527,11 @@ vc.bigbluebutton.daysToKeep=
 vc.bigbluebutton.secret=
 vc.bigbluebutton.shared.secret=
 
+# HTTP connection generic settings in milliseconds
+vc.http.connect.timeout=30000
+vc.http.connect.request.timeout=30000
+vc.http.connect.socket.timeout=30000
+
 ########################################
 # Options for card2brain
 ########################################