diff --git a/calendar/backends/caldav/e-cal-backend-caldav.c b/calendar/backends/caldav/e-cal-backend-caldav.c
index fcbfecc..eab7bfe 100644
--- a/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -962,7 +962,9 @@ static void
 redirect_handler (SoupMessage *msg,
                   gpointer user_data)
 {
-	if (SOUP_STATUS_IS_REDIRECTION (msg->status_code)) {
+	gboolean is_created = msg->status_code == SOUP_STATUS_CREATED;
+
+	if (SOUP_STATUS_IS_REDIRECTION (msg->status_code) || is_created) {
 		SoupSession *soup_session = user_data;
 		SoupURI *new_uri;
 		const gchar *new_loc;
@@ -986,7 +988,12 @@ redirect_handler (SoupMessage *msg,
 		}
 
 		soup_message_set_uri (msg, new_uri);
-		soup_session_requeue_message (soup_session, msg);
+
+		/* when there is a Location header on the Created response,
+		   then do not resend the request, but only remember Location
+		   where the object was stored on the server */
+		if (!is_created)
+			soup_session_requeue_message (soup_session, msg);
 
 		soup_uri_free (new_uri);
 	}
