diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 4035f45699900f2f3e7cb2c3d29f5466f08f77f7..8067011316d7633ca418d2e780c1cd0cfdc94981 100755
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -1,7 +1,7 @@
 /*
  * Asterisk -- A telephony toolkit for Linux.
  *
- * Voicemail System (did you ever think it could be so easy?)
+ * Voicemail System
  * 
  * Copyright (C) 2003-2004, Digium Inc.
  *
diff --git a/pbx.c b/pbx.c
index 737611af5ad755a9e134ad97aff54568e659a470..5b4fa6560564a1dcfaab78a36b9805dd3a8d6ffa 100755
--- a/pbx.c
+++ b/pbx.c
@@ -216,19 +216,19 @@ static struct pbx_builtin {
 
 	{ "BackGround", pbx_builtin_background,
 	"Play a file while awaiting extension",
-	"  Background(filename[|options[|langoverride]]): Plays a given file, while simultaneously\n"
-	"waiting for the user to begin typing an extension. The  timeouts do not\n"
-	"count until the last BackGround application has ended.\n" 
-	"Options may also be  included following a pipe symbol. The 'skip'\n"
-	"option causes the playback of the message to  be  skipped  if  the  channel\n"
-	"is not in the 'up' state (i.e. it hasn't been  answered  yet. If 'skip' is \n"
-	"specified, the application will return immediately should the channel not be\n"
-	"off hook.  Otherwise, unless 'noanswer' is specified, the channel channel will\n"
-	"be answered before the sound is played. Not all channels support playing\n"
-	"messages while still hook. The 'langoverride' may be a language to use for\n"
-	"playing the prompt which differs from the current language of the channel\n"
-	"Returns -1 if the channel was hung up, or if the file does not exist. \n"
-	"Returns 0 otherwise.\n"
+	"  Background(filename1[&filename2...][|options[|langoverride]]): Plays\n"
+	"given files, while simultaneously waiting for the user to begin typing\n"
+	"an extension. The  timeouts do not count until the last BackGround\n"
+	"application has ended. Options may also be  included following a pipe \n"
+	"symbol. The 'skip' option causes the playback of the message to  be \n"
+	"skipped  if  the  channel is not in the 'up' state (i.e. it hasn't been\n"
+	"answered  yet. If 'skip' is specified, the application will return\n"
+	"immediately should the channel not be off hook.  Otherwise, unless \n"
+	"'noanswer' is specified, the channel channel will be answered before the\n"
+	"sound is played. Not all channels support playing messages while still\n"
+	"hook. The 'langoverride' may be a language to use for playing the prompt\n"
+	"which differs from the current language of the channel.  Returns -1 if \n"
+	"the channel was hung up, or if the file does not exist. Returns 0 otherwise.\n"
 	},
 
 	{ "Busy", pbx_builtin_busy,
@@ -4857,17 +4857,17 @@ static int pbx_builtin_background(struct ast_channel *chan, void *data)
 	int res = 0;
 	int option_skip = 0;
 	int option_noanswer = 0;
-	char filename[256] = "";
+	char *filename = NULL;
 	char* stringp;
 	char* options;
 	char *lang = NULL;
+	char *front = NULL, *back = NULL;
 
-	if (!data || ast_strlen_zero(data)) {
+	if (!data || ast_strlen_zero(data) || !(filename = ast_strdupa(data))) {
 		ast_log(LOG_WARNING, "Background requires an argument(filename)\n");
 		return -1;
 	}
 
-	strncpy(filename, (char*)data, sizeof(filename) - 1);
 	stringp = filename;
 	strsep(&stringp, "|");
 	options = strsep(&stringp, "|");
@@ -4894,16 +4894,24 @@ static int pbx_builtin_background(struct ast_channel *chan, void *data)
 		/* Stop anything playing */
 		ast_stopstream(chan);
 		/* Stream a file */
-		res = ast_streamfile(chan, filename, lang);
-		if (!res) {
-			res = ast_waitstream(chan, AST_DIGIT_ANY);
-			ast_stopstream(chan);
-		} else {
-			ast_log(LOG_WARNING, "ast_streamfile failed on %s for %s\n", chan->name, (char*)data);
-			res = 0;
+		front = filename;
+		while(!res && front) {
+			if((back = strchr(front, '&'))) {
+				*back = '\0';
+				back++;
+			}
+			res = ast_streamfile(chan, front, lang);
+			if (!res) {
+				res = ast_waitstream(chan, AST_DIGIT_ANY);
+				ast_stopstream(chan);
+			} else {
+				ast_log(LOG_WARNING, "ast_streamfile failed on %s for %s\n", chan->name, (char*)data);
+				res = 0;
+				break;
+			}
+			front = back;
 		}
 	}
-
 	return res;
 }