diff --git a/lib/http.c b/lib/http.c
index 2da7cbf72ebf8c1da66fcde8d071b97fb12f126e..52b009d3edba17b8e507fa5899e6288bd6749f18 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -469,10 +469,14 @@ CURLcode Curl_http(struct connectdata *conn)
     http->sendit = Curl_getFormData(data->httppost, &http->postsize);
   }
 
-  if(!checkheaders(data, "Host:") &&
-     !conn->allocptr.host) {
-    /* if ptr_host is already set, it is OK since we only re-use connections
-       to the very same host and port */
+  if(!checkheaders(data, "Host:")) {
+    /* if ptr_host is already set, it is almost OK since we only re-use
+       connections to the very same host and port, but when we use a HTTP
+       proxy we have a persistant connect and yet we must change the Host:
+       header! */
+
+    if(conn->allocptr.host)
+      free(conn->allocptr.host);
 
     if(((conn->protocol&PROT_HTTPS) && (conn->remote_port == PORT_HTTPS)) ||
        (!(conn->protocol&PROT_HTTPS) && (conn->remote_port == PORT_HTTP)) )