diff --git a/doc/README.variables b/doc/README.variables
index 8ba423bbc60501099380ccfc30cd112a618acbf6..4cf42451b9c80c63d54cd681d5d1a5374dc8afad 100755
--- a/doc/README.variables
+++ b/doc/README.variables
@@ -104,6 +104,9 @@ ${QUEUE_PRIO}		Queue priority
 The following variables can be set to change certian behaviour:
 ${TOUCH_MONITOR}	The filename base to use with Touch Monitor (auto record)
 
+The monitor application sets the following variable:
+${MONITOR}		Set to "true" if the channel is/has been monitored.
+
 There are two reference modes - reference by value and reference by name. 
 To refer to a variable with its name (as an argument to a function that 
 requires a variable), just write the name. To refer to the variable's value, 
diff --git a/res/res_monitor.c b/res/res_monitor.c
index 0603ad9f5eca0260f038ccba623b20330ede6738..4c93517db294b7d99793459c938400c0a7c108fa 100755
--- a/res/res_monitor.c
+++ b/res/res_monitor.c
@@ -122,14 +122,17 @@ int ast_monitor_start(	struct ast_channel *chan, const char *format_spec,
 			seq++;
 			ast_mutex_unlock(&monitorlock);
 
-			channel_name = strdup(chan->name);
-			while((p = strchr(channel_name, '/'))) {
-				*p = '-';
+			if((channel_name = ast_strdupa(chan->name))) {
+				while((p = strchr(channel_name, '/'))) {
+					*p = '-';
+				}
+				snprintf(monitor->filename_base, FILENAME_MAX, "%s/%ld-%s",
+						 AST_MONITOR_DIR, time(NULL),channel_name);
+				monitor->filename_changed = 1;
+			} else {
+				ast_log(LOG_ERROR,"Failed to allocate Memory\n");
+				return -1;
 			}
-			snprintf(monitor->filename_base, FILENAME_MAX, "%s/%s",
-						AST_MONITOR_DIR, channel_name);
-			monitor->filename_changed = 1;
-			free(channel_name);
 		}
 
 		monitor->stop = ast_monitor_stop;
@@ -168,6 +171,8 @@ int ast_monitor_start(	struct ast_channel *chan, const char *format_spec,
 			return -1;
 		}
 		chan->monitor = monitor;
+		/* so we know this call has been monitored in case we need to bill for it or something */
+		pbx_builtin_setvar_helper(chan, "__MONITORED","true");
 	} else {
 		ast_log(LOG_DEBUG,"Cannot start monitoring %s, already monitored\n",
 					chan->name);