diff --git a/main/event.c b/main/event.c
index 81dd7c96ff4feb2728ff8ea94a65bff805310e2b..fad8e66ee7cbfcd84f7226c9e30b5159c1b62d5e 100644
--- a/main/event.c
+++ b/main/event.c
@@ -444,12 +444,14 @@ enum ast_event_subscriber_res ast_event_check_subscriber(enum ast_event_type typ
 	};
 	const enum ast_event_type event_types[] = { type, AST_EVENT_ALL };
 	int i;
+	int want_specific_event;/* TRUE if looking for subscribers wanting specific parameters. */
 
 	if (type >= AST_EVENT_TOTAL) {
 		ast_log(LOG_ERROR, "%u is an invalid type!\n", type);
 		return res;
 	}
 
+	want_specific_event = 0;
 	va_start(ap, type);
 	for (ie_type = va_arg(ap, enum ast_event_ie_type);
 		ie_type != AST_EVENT_IE_END;
@@ -492,6 +494,7 @@ enum ast_event_subscriber_res ast_event_check_subscriber(enum ast_event_type typ
 		}
 
 		if (insert) {
+			want_specific_event = 1;
 			AST_LIST_INSERT_TAIL(&check_ie_vals.ie_vals, ie_value, entry);
 		} else {
 			ast_log(LOG_WARNING, "Unsupported PLTYPE(%d)\n", ie_value->ie_pltype);
@@ -501,17 +504,22 @@ enum ast_event_subscriber_res ast_event_check_subscriber(enum ast_event_type typ
 
 	for (i = 0; i < ARRAY_LEN(event_types); i++) {
 		AST_RWDLLIST_RDLOCK(&ast_event_subs[event_types[i]]);
-		AST_RWDLLIST_TRAVERSE(&ast_event_subs[event_types[i]], sub, entry) {
-			AST_LIST_TRAVERSE(&sub->ie_vals, ie_val, entry) {
-				if (!match_sub_ie_val_to_event(ie_val, &check_ie_vals)) {
-					/* The current subscription ie did not match an event ie. */
+		if (want_specific_event) {
+			AST_RWDLLIST_TRAVERSE(&ast_event_subs[event_types[i]], sub, entry) {
+				AST_LIST_TRAVERSE(&sub->ie_vals, ie_val, entry) {
+					if (!match_sub_ie_val_to_event(ie_val, &check_ie_vals)) {
+						/* The current subscription ie did not match an event ie. */
+						break;
+					}
+				}
+				if (!ie_val) {
+					/* Everything matched.  A subscriber is looking for this event. */
 					break;
 				}
 			}
-			if (!ie_val) {
-				/* Everything matched.  A subscriber is looking for this event. */
-				break;
-			}
+		} else {
+			/* Just looking to see if there are ANY subscribers to the event type. */
+			sub = AST_RWLIST_FIRST(&ast_event_subs[event_types[i]]);
 		}
 		AST_RWDLLIST_UNLOCK(&ast_event_subs[event_types[i]]);
 		if (sub) {
diff --git a/tests/test_event.c b/tests/test_event.c
index 5f0c1003c1ef134771b59d58a78f55d8dd2bf706..bc84b18571b00c1fa7026b242d63f9bc7afaf8d1 100644
--- a/tests/test_event.c
+++ b/tests/test_event.c
@@ -312,7 +312,7 @@ AST_TEST_DEFINE(event_sub_test)
 			.expected_count = 2,
 		},
 		[TEST_SUBS_CUSTOM_RAW] = {
-			.expected_count = 1,
+			.expected_count = 2,
 		},
 		[TEST_SUBS_CUSTOM_UINT] = {
 			.expected_count = 1,
@@ -344,28 +344,13 @@ AST_TEST_DEFINE(event_sub_test)
 		break;
 	}
 
-	/*
-	 * Subscription TEST_SUBS_ALL_STR:
-	 *  - allocate normally
-	 *  - subscribe to ALL events with a DEVICE STR IE check
-	 */
-	ast_test_status_update(test, "Adding TEST_SUBS_ALL_STR subscription\n");
-	test_subs[TEST_SUBS_ALL_STR].sub = ast_event_subscribe(AST_EVENT_ALL, event_sub_cb,
-		test_subs_class_type_str(TEST_SUBS_ALL_STR), &test_subs[TEST_SUBS_ALL_STR].data,
-		AST_EVENT_IE_DEVICE, AST_EVENT_IE_PLTYPE_STR, "FOO/bar",
+	ast_test_status_update(test, "Check that NO CUSTOM subscribers exist\n");
+	sub_res = ast_event_check_subscriber(AST_EVENT_CUSTOM,
 		AST_EVENT_IE_END);
-	if (!test_subs[TEST_SUBS_ALL_STR].sub) {
-		ast_test_status_update(test, "Failed to create TEST_SUBS_ALL_STR subscription\n");
-		res = AST_TEST_FAIL;
-		goto return_cleanup;
-	}
-
-	if (strcmp(ast_event_subscriber_get_description(test_subs[TEST_SUBS_ALL_STR].sub),
-		test_subs_class_type_str(TEST_SUBS_ALL_STR))) {
-		ast_test_status_update(test,
-			"Unexpected subscription description on TEST_SUBS_ALL_STR subscription\n");
+	if (sub_res != AST_EVENT_SUB_NONE) {
+		ast_test_status_update(test, "CUSTOM subscriptions should not exist! (%d)\n",
+			sub_res);
 		res = AST_TEST_FAIL;
-		goto return_cleanup;
 	}
 
 	/*
@@ -392,6 +377,39 @@ AST_TEST_DEFINE(event_sub_test)
 		goto return_cleanup;
 	}
 
+	ast_test_status_update(test, "Check that a CUSTOM subscriber exists\n");
+	sub_res = ast_event_check_subscriber(AST_EVENT_CUSTOM,
+		AST_EVENT_IE_END);
+	if (sub_res != AST_EVENT_SUB_EXISTS) {
+		ast_test_status_update(test, "A CUSTOM subscription should exist! (%d)\n",
+			sub_res);
+		res = AST_TEST_FAIL;
+	}
+
+	/*
+	 * Subscription TEST_SUBS_ALL_STR:
+	 *  - allocate normally
+	 *  - subscribe to ALL events with a DEVICE STR IE check
+	 */
+	ast_test_status_update(test, "Adding TEST_SUBS_ALL_STR subscription\n");
+	test_subs[TEST_SUBS_ALL_STR].sub = ast_event_subscribe(AST_EVENT_ALL, event_sub_cb,
+		test_subs_class_type_str(TEST_SUBS_ALL_STR), &test_subs[TEST_SUBS_ALL_STR].data,
+		AST_EVENT_IE_DEVICE, AST_EVENT_IE_PLTYPE_STR, "FOO/bar",
+		AST_EVENT_IE_END);
+	if (!test_subs[TEST_SUBS_ALL_STR].sub) {
+		ast_test_status_update(test, "Failed to create TEST_SUBS_ALL_STR subscription\n");
+		res = AST_TEST_FAIL;
+		goto return_cleanup;
+	}
+
+	if (strcmp(ast_event_subscriber_get_description(test_subs[TEST_SUBS_ALL_STR].sub),
+		test_subs_class_type_str(TEST_SUBS_ALL_STR))) {
+		ast_test_status_update(test,
+			"Unexpected subscription description on TEST_SUBS_ALL_STR subscription\n");
+		res = AST_TEST_FAIL;
+		goto return_cleanup;
+	}
+
 	/*
 	 * Subscription TEST_SUBS_CUSTOM_RAW:
 	 *  - allocate normally
@@ -576,7 +594,7 @@ AST_TEST_DEFINE(event_sub_test)
 	/*
 	 * Exercise the API call to check for existing subscriptions.
 	 */
-	ast_test_status_update(test, "Checking for subscribers to events\n");
+	ast_test_status_update(test, "Checking for subscribers to specific events\n");
 
 	/* Check STR matching. */
 	sub_res = ast_event_check_subscriber(AST_EVENT_CUSTOM,
@@ -678,6 +696,31 @@ AST_TEST_DEFINE(event_sub_test)
 		res = AST_TEST_FAIL;
 	}
 
+	ast_test_status_update(test, "Special event posting test\n");
+
+	/*
+	 * Event to check if event is even posted.
+	 *
+	 * Matching subscriptions:
+	 * TEST_SUBS_CUSTOM_RAW
+	 */
+	event = ast_event_new(AST_EVENT_CUSTOM,
+		AST_EVENT_IE_DEVICE, AST_EVENT_IE_PLTYPE_STR, "Mula",
+		AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_RAW, "FOO/bar", sizeof("FOO/bar"),
+		AST_EVENT_IE_END);
+	if (!event) {
+		ast_test_status_update(test, "Failed to create event\n");
+		res = AST_TEST_FAIL;
+		goto return_cleanup;
+	}
+	if (ast_event_queue(event)) {
+		ast_event_destroy(event);
+		event = NULL;
+		ast_test_status_update(test, "Failed to queue event\n");
+		res = AST_TEST_FAIL;
+		goto return_cleanup;
+	}
+
 	/*
 	 * Subscription TEST_SUBS_CUSTOM_ANY:
 	 *  - allocate normally