diff --git a/src/include/switch_core.h b/src/include/switch_core.h
index 3577bb4f47..b533a3e6da 100644
--- a/src/include/switch_core.h
+++ b/src/include/switch_core.h
@@ -825,6 +825,8 @@ SWITCH_DECLARE(void) switch_core_session_hupall(_In_ switch_call_cause_t cause);
   \param cause the hangup cause to apply to the hungup channels
 */
 SWITCH_DECLARE(void) switch_core_session_hupall_matching_var(_In_ const char *var_name, _In_ const char *var_val, _In_ switch_call_cause_t cause);
+SWITCH_DECLARE(switch_console_callback_match_t *) switch_core_session_findall_matching_var(const char *var_name, const char *var_val);
+
 /*! 
   \brief Hangup all sessions that belong to an endpoint
   \param endpoint_interface The endpoint interface 
diff --git a/src/switch_core_session.c b/src/switch_core_session.c
index e50c5f008e..ab52bb89dd 100644
--- a/src/switch_core_session.c
+++ b/src/switch_core_session.c
@@ -238,6 +238,54 @@ SWITCH_DECLARE(void) switch_core_session_hupall_matching_var(const char *var_nam
 
 }
 
+
+SWITCH_DECLARE(switch_console_callback_match_t *) switch_core_session_findall_matching_var(const char *var_name, const char *var_val)
+{
+	switch_hash_index_t *hi;
+	void *val;
+	switch_core_session_t *session;
+	switch_memory_pool_t *pool;
+	struct str_node *head = NULL, *np;
+	switch_console_callback_match_t *my_matches = NULL;
+
+	switch_core_new_memory_pool(&pool);
+
+	if (!var_val)
+		return NULL;
+
+	switch_mutex_lock(runtime.session_hash_mutex);
+	for (hi = switch_hash_first(NULL, session_manager.session_table); hi; hi = switch_hash_next(hi)) {
+		switch_hash_this(hi, NULL, NULL, &val);
+		if (val) {
+			session = (switch_core_session_t *) val;
+			if (switch_core_session_read_lock(session) == SWITCH_STATUS_SUCCESS) {
+				np = switch_core_alloc(pool, sizeof(*np));
+				np->str = switch_core_strdup(pool, session->uuid_str);
+				np->next = head;
+				head = np;
+				switch_core_session_rwunlock(session);
+			}
+		}
+	}
+	switch_mutex_unlock(runtime.session_hash_mutex);
+
+	for(np = head; np; np = np->next) {
+		if ((session = switch_core_session_locate(np->str))) {
+			const char *this_val;
+			if (switch_channel_up_nosig(session->channel) &&
+				(this_val = switch_channel_get_variable_dup(session->channel, var_name, SWITCH_FALSE, -1)) && (!strcmp(this_val, var_val))) {			
+				switch_console_push_match(&my_matches, (const char *) np->str);
+			}
+			switch_core_session_rwunlock(session);
+		}
+	}
+
+	switch_core_destroy_memory_pool(&pool);
+
+
+	return my_matches;
+}
+
 SWITCH_DECLARE(void) switch_core_session_hupall_endpoint(const switch_endpoint_interface_t *endpoint_interface, switch_call_cause_t cause)
 {
 	switch_hash_index_t *hi;