diff --git a/src/moodle-provider.c b/src/moodle-provider.c
index e7138b442aa12a9078d4381eef4b16cab89e15a2..c10f99a8fc1792e46a50d0cecd9433c666fa0d71 100644
--- a/src/moodle-provider.c
+++ b/src/moodle-provider.c
@@ -32,6 +32,7 @@ typedef struct MoodleProviderState {
   const gchar *password;
   MoodleOnlineMode online_mode;
   gboolean connected;
+  gboolean connecting;
 } MoodleProviderState;
 static MoodleProviderState self;
 
@@ -139,6 +140,24 @@ cache_is_usable_for (const gchar *filename)
   return FALSE; // no file info: this file doesn't exists; we better not rely on cache
 }
 
+static void
+ensure_connected (void)
+{
+  if (self.connected)
+    return;
+
+  if (self.connecting) {
+    // wait until we are connected
+    while (!self.connected) {
+      usleep (100*1000); // 100ms
+    }
+  } else {
+    // use _connect?
+    moodle_provider_get_courses_sync (NULL, NULL);
+    // TODO: update course cache
+  }
+}
+
 static void
 request_url_cb (GObject      *unused,
                 GAsyncResult *res,
@@ -182,6 +201,8 @@ request_url (const gchar         *url,
 
   if (!cache_is_usable_for (filename) && self.online_mode == MOODLE_MODE_ONLINE) {
 
+    ensure_connected ();
+
     SoupMessage *msg;
     msg = soup_message_new ("GET", url);
     soup_message_set_priority (msg, priority);
@@ -288,6 +309,12 @@ moodle_provider_connect (GInputStream **response)
   char *html;
   size_t html_size;*/
 
+  if (self.connecting)
+    g_warning ("Connecting while already connecting, that's odd\n");
+  if (self.connected)
+    g_warning ("Connecting while already connected, that's odd\n");
+  self.connecting = TRUE;
+
   msg = soup_message_new ("GET", EPFL_TEQUILA_LOGIN);
   soup_session_send_message (self.session, msg);
   if (msg->status_code != 200)
@@ -327,6 +354,7 @@ moodle_provider_connect (GInputStream **response)
   }
 
   self.connected = TRUE;
+  self.connecting = FALSE;
 
   g_object_unref (msg);
   return MOODLE_ERROR_OK;
@@ -431,6 +459,7 @@ moodle_provider_init (MoodleOnlineMode  mode,
 {
   self.online_mode = mode;
   self.connected = FALSE;
+  self.connecting = FALSE;
 
   moodle_parser_init ();