diff --git a/CHANGES b/CHANGES
index 83728500eab6af2424b5b489ca3b82bac7403fd3..344f28f2309beea3f41410c374fee653faf02ef3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,9 @@ AMI (Asterisk Manager Interface)
    that the request is against a known peer. It also issues a new event,
    'SIPqualifypeerdone', once the qualify action has been completed.
 
+ * The PlayDTMF action now supports an optional 'Duration' parameter.  This
+   specifies the duration of the digit to be played, in milliseconds.
+
  * Added VoicemailRefresh action to allow an external entity to trigger mailbox
    updates when changes occur instead of requiring the use of pollmailboxes.
 
diff --git a/apps/app_senddtmf.c b/apps/app_senddtmf.c
index e1e8ee92f0435a17e8da2bea1911dc8e351a8b3b..7db9a3f4b7e62feb76b8cb1851b72af7a1e143a6 100644
--- a/apps/app_senddtmf.c
+++ b/apps/app_senddtmf.c
@@ -79,6 +79,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<parameter name="Digit" required="true">
 				<para>The DTMF digit to play.</para>
 			</parameter>
+			<parameter name="Duration" required="false">
+				<para>The duration, in milliseconds, of the digit to be played.</para>
+			</parameter>
 		</syntax>
 		<description>
 			<para>Plays a dtmf digit on the specified channel.</para>
@@ -145,7 +148,9 @@ static int manager_play_dtmf(struct mansession *s, const struct message *m)
 {
 	const char *channel = astman_get_header(m, "Channel");
 	const char *digit = astman_get_header(m, "Digit");
+	const char *duration = astman_get_header(m, "Duration");
 	struct ast_channel *chan;
+	unsigned int duration_ms = 0;
 
 	if (!(chan = ast_channel_get_by_name(channel))) {
 		astman_send_error(s, m, "Channel not found");
@@ -157,8 +162,14 @@ static int manager_play_dtmf(struct mansession *s, const struct message *m)
 		chan = ast_channel_unref(chan);
 		return 0;
 	}
+	
+	if (!ast_strlen_zero(duration) && (sscanf(duration, "%30u", &duration_ms) != 1)) {
+		astman_send_error(s, m, "Could not convert Duration parameter");
+		chan = ast_channel_unref(chan);
+		return 0;
+	}
 
-	ast_senddigit(chan, *digit, 0);
+	ast_senddigit(chan, *digit, duration_ms);
 
 	chan = ast_channel_unref(chan);