diff --git a/channels/sig_analog.c b/channels/sig_analog.c
index 76ee645c26f03bbf56d6a61a0d6b508cff4a595b..ccc14a89f990283d29bea1636f05aaef62e36524 100644
--- a/channels/sig_analog.c
+++ b/channels/sig_analog.c
@@ -3731,6 +3731,32 @@ void *analog_handle_init_event(struct analog_pvt *i, int event)
 	/* Handle an event on a given channel for the monitor thread. */
 	switch (event) {
 	case ANALOG_EVENT_WINKFLASH:
+	case ANALOG_EVENT_RINGBEGIN:
+		switch (i->sig) {
+		case ANALOG_SIG_FXSLS:
+		case ANALOG_SIG_FXSGS:
+		case ANALOG_SIG_FXSKS:
+			if (i->immediate) {
+				if (i->use_callerid || i->usedistinctiveringdetection) {
+					ast_log(LOG_WARNING, "Can't start PBX immediately, must wait for Caller ID / distinctive ring\n");
+				} else {
+					/* If we don't care about Caller ID or Distinctive Ring, then there's
+					 * no need to wait for anything before accepting the call, as
+					 * waiting will buy us nothing.
+					 * So if the channel is configured for immediate, actually start immediately
+					 * and get the show on the road as soon as possible. */
+					ast_debug(1, "Disabling ring timeout (previously %d) to begin handling immediately\n", i->ringt_base);
+					analog_set_ringtimeout(i, 0);
+				}
+			}
+			break;
+		default:
+			break;
+		}
+		/* Fall through */
+		if (!(ISTRUNK(i) && i->immediate && !i->use_callerid && !i->usedistinctiveringdetection)) {
+			break;
+		}
 	case ANALOG_EVENT_RINGOFFHOOK:
 		if (i->inalarm) {
 			break;
diff --git a/configs/samples/chan_dahdi.conf.sample b/configs/samples/chan_dahdi.conf.sample
index 6333351c0ddbab5f2af9b684964c8130e9ddba99..6b2954975091b4eca90aaf47fbb9d4d484f7ee89 100644
--- a/configs/samples/chan_dahdi.conf.sample
+++ b/configs/samples/chan_dahdi.conf.sample
@@ -936,8 +936,13 @@ pickupgroup=1
                                                 ; target of the transfer.
 
 ;
-; Specify whether the channel should be answered immediately or if the simple
-; switch should provide dialtone, read digits, etc.
+; On FXS channels (FXO signaled), specifies whether the channel should enter the dialplan
+; immediately or if the simple switch should provide dialtone, read digits, etc.
+; On FXO channels (FXS signaled), specifies whether the call should enter the dialplan
+; immediately or if we should wait for at least one ring. This is required if
+; Caller ID or distinctive ringing is enabled. If you do not need either, you can
+; skip waiting for the first ring to begin call processing sooner.
+;
 ; Note: If immediate=yes the dialplan execution will always start at extension
 ; 's' priority 1 regardless of the dialed number!
 ;
diff --git a/doc/CHANGES-staging/fxo_immediate.txt b/doc/CHANGES-staging/fxo_immediate.txt
new file mode 100644
index 0000000000000000000000000000000000000000..01f9ec5eb5e7590b3a92c14a1a6d73219c4565e0
--- /dev/null
+++ b/doc/CHANGES-staging/fxo_immediate.txt
@@ -0,0 +1,6 @@
+Subject: chan_dahdi
+
+FXO channels (FXS signaled) that don't use callerid or
+distinctive ring detection can now be configured
+to enter the dialplan immediately using immediate=yes,
+instead of waiting for at least one ring.