diff --git a/apps/Makefile b/apps/Makefile
index 3c3838278d7a438dc4f34fbe6017c566c2c40dce..5378788200ea65068c5bf5adcd0f98cf989d4a50 100755
--- a/apps/Makefile
+++ b/apps/Makefile
@@ -29,7 +29,7 @@ APPS=app_dial.so app_playback.so app_voicemail.so app_directory.so app_mp3.so\
      app_nbscat.so app_sendtext.so app_exec.so app_sms.so \
      app_groupcount.so app_txtcidname.so app_controlplayback.so \
      app_talkdetect.so app_alarmreceiver.so app_userevent.so app_verbose.so \
-     app_test.so app_forkcdr.so app_math.so
+     app_test.so app_forkcdr.so app_math.so app_realtime.so
 
 ifneq (${OSARCH},Darwin)
 APPS+=app_intercom.so
diff --git a/apps/app_realtime.c b/apps/app_realtime.c
new file mode 100755
index 0000000000000000000000000000000000000000..5e004bcdad721fceba29caf153c4cbbfd5eaf1c3
--- /dev/null
+++ b/apps/app_realtime.c
@@ -0,0 +1,123 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * App to transmit a URL
+ * 
+ * Copyright (C) 1999-2004, Digium, Inc.
+ *
+ * Anthony Minessale <anthmct@yahoo.com>
+ * Mark Spencer <markster@digium.com>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+ 
+#include <asterisk/file.h>
+#include <asterisk/logger.h>
+#include <asterisk/channel.h>
+#include <asterisk/options.h>
+#include <asterisk/pbx.h>
+#include <asterisk/config.h>
+#include <asterisk/module.h>
+#include <asterisk/lock.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#define next_one(var) var = var->next
+#define crop_data(str) { *(str) = '\0' ; (str)++; }
+
+
+static char *tdesc = "Realtime Data Lookup";
+static char *app = "RealTime";
+static char *synopsis = "Realtime Data Lookup";
+static char *USAGE = "RealTime(<family>|<colmatch>|<value>[|<prefix>])";
+static char *desc = "Use the RealTime config handler system to read data into channel variables.\n"
+"RealTime(<family>|<colmatch>|<value>[|<prefix>])\n\n"
+"All unique column names will be set as channel variables with optional prefix to the name.\n"
+"e.g. prefix of 'var_' would make the column 'name' become the variable ${var_name}\n\n";
+
+
+
+
+STANDARD_LOCAL_USER;
+
+LOCAL_USER_DECL;
+
+static int realtime_exec(struct ast_channel *chan, void *data)
+{
+	int res=0;
+	struct localuser *u;
+	struct ast_variable *var, *itt;
+	char *family=NULL, *colmatch=NULL, *value=NULL, *prefix=NULL, *vname=NULL;
+	size_t len;
+
+	if (!data) {
+		ast_log(LOG_ERROR,"Invalid input: usage %s\n",USAGE);
+		return -1;
+	}
+	LOCAL_USER_ADD(u);
+	if ((family = ast_strdupa(data))) {
+		if ((colmatch = strchr(family,'|'))) {
+			crop_data(colmatch);
+			if ((value = strchr(colmatch,'|'))) {
+				crop_data(value);
+				if ((prefix = strchr(value,'|')))
+					crop_data(prefix);
+			}
+		}
+	}
+	if (! (family && value && colmatch) ) {
+		ast_log(LOG_ERROR,"Invalid input: usage %s\n",USAGE);
+		res = -1;
+	} else {
+		if (option_verbose > 3)
+			ast_verbose(VERBOSE_PREFIX_4"Realtime Lookup: family:'%s' colmatch:'%s' value:'%s'\n",family,colmatch,value);
+		if ((var = ast_load_realtime(family, colmatch, value))) {
+			for (itt = var; itt; itt = itt->next) {
+				if(prefix) {
+					len = strlen(prefix) + strlen(itt->name) + 2;
+					vname = alloca(len);
+					snprintf(vname,len,"%s%s",prefix,itt->name);
+					
+				} else 
+					vname = itt->name;
+
+				pbx_builtin_setvar_helper(chan, vname, itt->value);
+			}
+			ast_destroy_realtime(var);
+		} else if (option_verbose > 3)
+			ast_verbose(VERBOSE_PREFIX_4"No Realtime Matches Found.\n");
+	}
+	
+	LOCAL_USER_REMOVE(u);
+	return res;
+}
+
+int unload_module(void)
+{
+	STANDARD_HANGUP_LOCALUSERS;
+	return ast_unregister_application(app);
+}
+
+int load_module(void)
+{
+	return ast_register_application(app, realtime_exec, synopsis, desc);
+}
+
+char *description(void)
+{
+	return tdesc;
+}
+
+int usecount(void)
+{
+	int res;
+	STANDARD_USECOUNT(res);
+	return res;
+}
+
+char *key()
+{
+	return ASTERISK_GPL_KEY;
+}
+
diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c
index 21cfd163ebb95d3f89fc5699d6f2bc26b40e80e5..9e20c5878ac240964341c106294eb2ad6e96c6e9 100755
--- a/channels/chan_mgcp.c
+++ b/channels/chan_mgcp.c
@@ -2404,7 +2404,7 @@ static void start_rtp(struct mgcp_subchannel *sub)
             sub->rtp = NULL;
         }
 		/* Allocate the RTP now */
-		sub->rtp = ast_rtp_new(sched, io, 1, 0);
+		sub->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
 		if (sub->rtp && sub->owner)
 			sub->owner->fds[0] = ast_rtp_fd(sub->rtp);
 		if (sub->rtp)