diff --git a/manager.c b/manager.c
index 15b51681df649b5e265df21d6081b7701d7d60de..11293df8d086955f431cf671c2f7641f324a0cc9 100755
--- a/manager.c
+++ b/manager.c
@@ -475,6 +475,35 @@ static int action_extensionstate(struct mansession *s, struct message *m)
 	return 0;
 }
 
+static int action_timeout(struct mansession *s, struct message *m)
+{
+	struct ast_channel *c = NULL;
+	char *name = astman_get_header(m, "Channel");
+	int timeout = atoi(astman_get_header(m, "Timeout"));
+	if (!strlen(name)) {
+		astman_send_error(s, "No channel specified");
+		return 0;
+	}
+	if (!timeout) {
+		astman_send_error(s, "No timeout specified");
+		return 0;
+	}
+	c = ast_channel_walk(NULL);
+	while(c) {
+		if (!strcasecmp(c->name, name)) {
+			break;
+		}
+		c = ast_channel_walk(c);
+	}
+	if (!c) {
+		astman_send_error(s, "No such channel");
+		return 0;
+	}
+	ast_channel_setwhentohangup(c, timeout);
+	astman_send_ack(s, "Timeout Set");
+	return 0;
+}
+
 static int process_message(struct mansession *s, struct message *m)
 {
 	char action[80];
@@ -764,6 +793,7 @@ int init_manager(void)
 		ast_manager_register( "MailboxStatus", EVENT_FLAG_CALL, action_mailboxstatus, "Check Mailbox" );
 		ast_manager_register( "Command", EVENT_FLAG_COMMAND, action_command, "Execute Command" );
 		ast_manager_register( "ExtensionState", EVENT_FLAG_CALL, action_extensionstate, "Check Extension Status" );
+		ast_manager_register( "AbsoluteTimeout", EVENT_FLAG_CALL, action_timeout, "Set Absolute Timeout" );
 
 		ast_cli_register(&show_mancmds_cli);
 		ast_cli_register(&show_manconn_cli);