diff -pruN xmms-1.2.10/Input/mpg123/http.c xmms-1.2.10_patch/Input/mpg123/http.c
--- xmms-1.2.10/Input/mpg123/http.c	2003-12-07 18:09:49.000000000 +0100
+++ xmms-1.2.10_patch/Input/mpg123/http.c	2004-05-24 09:33:49.063844608 +0200
@@ -328,6 +328,8 @@ static void *http_buffer_loop(void *arg)
 	gchar line[1024], *user, *pass, *host, *filename,
 	     *status, *url, *temp, *file;
 	gchar *chost;
+	char *output_name_current; // blindcoder
+
 	gint cnt, written, error, err_len, port, cport;
 	gboolean redirect;
 	int udp_sock = 0;
@@ -342,6 +344,8 @@ static void *http_buffer_loop(void *arg)
 	struct timeval tv;
 
 	url = (gchar *) arg;
+	output_name_current = malloc(2048);
+	memset (output_name_current, 0x0, 2048);
 	do
 	{
 		redirect=FALSE;
@@ -619,34 +623,52 @@ static void *http_buffer_loop(void *arg)
 		char *output_name, *fname, *temp;
 		int i = 1;
 
-		file = mpg123_http_get_title(url);
+		file = playlist_get_songtitle(get_playlist_position());
 		fname = file;
-		if (!strncasecmp(fname, "http://", 7))
-			fname += 7;
-		temp = strrchr(fname, '.');
-		if (temp && !strcasecmp(temp, ".mp3"))
-			*temp = '\0';
 
 		while ((temp = strchr(fname, '/')))
 			*temp = '_';
 		output_name = g_strdup_printf("%s/%s.mp3",
 					      mpg123_cfg.save_http_path, fname);
-		while (!access(output_name, F_OK) && i < 100000)
-		{
-			g_free(output_name);
-			output_name = g_strdup_printf("%s/%s-%d.mp3",
-						      mpg123_cfg.save_http_path,
-						      fname, i++);
-		}
-
-		g_free(file);
 
 		output_file = fopen(output_name, "wb");
+		memset(output_name_current, 0x0, 2048);
+		sprintf(output_name_current, "%s", output_name);
 		g_free(output_name);
+		g_free(file);
 	}
 
 	while (going)
 	{
+// blindcoder
+		if (mpg123_cfg.save_http_stream)
+		{
+			char *output_name;
+			int i = 1;
+ 
+			file = playlist_get_songtitle(get_playlist_position());
+			output_name = file;
+ 
+			while ((temp = strchr(output_name, '/')))
+				*temp = '_';
+ 
+			output_name = g_strdup_printf("%s/%s.mp3",
+						      mpg123_cfg.save_http_path,
+						      output_name);
+ 
+			if (strncasecmp(output_name, output_name_current, strlen(output_name)) != 0){
+				if (output_file)
+				{
+					fclose(output_file);
+					output_file = NULL;
+				}
+				output_file = fopen(output_name, "wb");
+				memset(output_name_current, 0x0, 2048);
+				sprintf(output_name_current, "%s", output_name);
+			}
+			g_free(file);
+			g_free(output_name);
+		}
 
 		if (!http_used() && !mpg123_ip.output->buffer_playing())
 			prebuffering = TRUE;
