diff --git a/lib/transfer.c b/lib/transfer.c
index 5823921484d328239a6e9e909d58ab665723f809..1dad615f4cda0c4b96eaac07d46e582ff0844a35 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -910,6 +910,7 @@ CURLcode Curl_perform(CURL *curl)
       
         /* TBD: set the URL with curl_setopt() */
         data->url = newurl;
+        newurl = NULL; /* don't free! */
 
         data->bits.urlstringalloc = TRUE; /* the URL is allocated */
 
diff --git a/lib/url.c b/lib/url.c
index 8c23ae9983104e6ec6fa5f8e69e96e66f71bdb40..787bc18bef4d66bc68d53a60d00438b98a05573a 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -2233,6 +2233,12 @@ CURLcode Curl_done(struct connectdata *conn)
     conn->bits.rangestringalloc = FALSE;
   }
 
+  /* Cleanup possible redirect junk */
+  if(conn->newurl) {
+    free(conn->newurl);
+    conn->newurl = NULL;
+  }
+ 
   /* this calls the protocol-specific function pointer previously set */
   if(conn->curl_done)
     result = conn->curl_done(conn);