diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c
index 753b8c9809f5be2c68d19e1730a447b6b733c95a..c190f2f50a8743ef79b2a0024545e683094b1ea0 100644
--- a/coreapi/linphonecore.c
+++ b/coreapi/linphonecore.c
@@ -9724,6 +9724,8 @@ LinphoneConferenceInfo *linphone_core_find_conference_information_from_uri(Linph
 static bctbx_list_t *get_conference_information_list(LinphoneCore *core, time_t t) {
 #ifdef HAVE_DB_STORAGE
 	auto &mainDb = L_GET_PRIVATE_FROM_C_OBJECT(core)->mainDb;
+	if (mainDb == NULL) return NULL;
+
 	auto list = mainDb->getConferenceInfos(t);
 
 	bctbx_list_t *results = NULL;
diff --git a/include/linphone/types.h b/include/linphone/types.h
index 887a78e1175e247454ab88a2c61f25df7473ec05..59f9a0debd7f87129fe9bda3ced31a64f8b5d6cc 100644
--- a/include/linphone/types.h
+++ b/include/linphone/types.h
@@ -1397,6 +1397,7 @@ typedef enum _LinphoneMagicSearchSource {
 	LinphoneMagicSearchSourceRequest =
 	    1 << 4, /**< Search from request : it is usually an address built from the request */
 	LinphoneMagicSearchSourceFavoriteFriends = 1 << 5, /**< Search in "starred" friends only */
+	LinphoneMagicSearchSourceConferencesInfo = 1 << 6, /**< Search in conferences info (organizer and participants) */
 	LinphoneMagicSearchSourceAll = -1                  /**< Search in all sources */
 } LinphoneMagicSearchSource;
 
diff --git a/src/search/magic-search.cpp b/src/search/magic-search.cpp
index c51a28696d926416bf2a53dec4c4657eaac4cb8b..a8d690017d4d008cbcfb6d7ff102f758ee5dbdfe 100644
--- a/src/search/magic-search.cpp
+++ b/src/search/magic-search.cpp
@@ -496,6 +496,70 @@ list<std::shared_ptr<SearchResult>> MagicSearch::getAddressFromGroupChatRoomPart
 	return resultList;
 }
 
+list<std::shared_ptr<SearchResult>> MagicSearch::getAddressFromConferencesInfo(
+    const string &filter, const string &withDomain, const list<std::shared_ptr<SearchResult>> &currentList) const {
+	list<std::shared_ptr<SearchResult>> resultList;
+
+	const bctbx_list_t *conferencesInfo = linphone_core_get_conference_information_list(this->getCore()->getCCore());
+	for (const bctbx_list_t *f = conferencesInfo; f != nullptr; f = bctbx_list_next(f)) {
+		LinphoneConferenceInfo *info = static_cast<LinphoneConferenceInfo *>(f->data);
+		const LinphoneAddress *organizer = linphone_conference_info_get_organizer(info);
+		if (organizer) {
+			LinphoneAddress *addr = linphone_address_clone(organizer);
+			if (filter.empty() && withDomain.empty()) {
+				if (findAddress(currentList, addr)) {
+					linphone_address_unref(addr);
+					continue;
+				}
+				resultList.push_back(
+				    SearchResult::create((unsigned int)0, addr, "", nullptr, LinphoneMagicSearchSourceConferencesInfo));
+			} else {
+				unsigned int weight = searchInAddress(addr, filter, withDomain);
+				if (weight > getMinWeight()) {
+					if (findAddress(currentList, addr)) {
+						linphone_address_unref(addr);
+						continue;
+					}
+					resultList.push_back(
+					    SearchResult::create(weight, addr, "", nullptr, LinphoneMagicSearchSourceConferencesInfo));
+				}
+			}
+			linphone_address_unref(addr);
+		}
+
+		const bctbx_list_t *participants = linphone_conference_info_get_participant_infos(info);
+		for (const bctbx_list_t *p = participants; p != nullptr; p = bctbx_list_next(p)) {
+			LinphoneParticipantInfo *participantInfo = static_cast<LinphoneParticipantInfo *>(p->data);
+			const LinphoneAddress *addr =
+			    linphone_address_clone(linphone_participant_info_get_address(participantInfo));
+			if (filter.empty() && withDomain.empty()) {
+				if (findAddress(currentList, addr)) {
+					linphone_address_unref(const_cast<LinphoneAddress *>(addr));
+					continue;
+				}
+				resultList.push_back(
+				    SearchResult::create((unsigned int)0, addr, "", nullptr, LinphoneMagicSearchSourceConferencesInfo));
+			} else {
+				unsigned int weight = searchInAddress(addr, filter, withDomain);
+				if (weight > getMinWeight()) {
+					if (findAddress(currentList, addr)) {
+						linphone_address_unref(const_cast<LinphoneAddress *>(addr));
+						continue;
+					}
+					resultList.push_back(
+					    SearchResult::create(weight, addr, "", nullptr, LinphoneMagicSearchSourceConferencesInfo));
+				}
+			}
+			if (addr) {
+				linphone_address_unref(const_cast<LinphoneAddress *>(addr));
+			}
+		}
+	}
+
+	lInfo() << "[Magic Search] Found " << resultList.size() << " results in conferences info";
+	return resultList;
+}
+
 #ifdef LDAP_ENABLED
 void MagicSearch::getAddressFromLDAPServerStartAsync(const string &filter,
                                                      const string &withDomain,
@@ -595,6 +659,10 @@ void MagicSearch::beginNewSearchAsync(const SearchRequest &request, SearchAsyncD
 	if ((request.getSourceFlags() & LinphoneMagicSearchSourceChatRooms) == LinphoneMagicSearchSourceChatRooms)
 		asyncData->createResult(getAddressFromGroupChatRoomParticipants(request.getFilter(), request.getWithDomain(),
 		                                                                list<std::shared_ptr<SearchResult>>()));
+	if ((request.getSourceFlags() & LinphoneMagicSearchSourceConferencesInfo) ==
+	    LinphoneMagicSearchSourceConferencesInfo)
+		asyncData->createResult(getAddressFromConferencesInfo(request.getFilter(), request.getWithDomain(),
+		                                                      list<std::shared_ptr<SearchResult>>()));
 }
 
 void MagicSearch::mergeResults(const SearchRequest &request, SearchAsyncData *asyncData) {
@@ -646,6 +714,10 @@ MagicSearch::beginNewSearch(const string &filter, const string &withDomain, int
 		crResults = getAddressFromGroupChatRoomParticipants(filter, withDomain, *resultList);
 		addResultsToResultsList(crResults, *resultList);
 	}
+	if ((sourceFlags & LinphoneMagicSearchSourceConferencesInfo) == LinphoneMagicSearchSourceConferencesInfo) {
+		crResults = getAddressFromConferencesInfo(filter, withDomain, *resultList);
+		addResultsToResultsList(crResults, *resultList);
+	}
 
 	return resultList;
 }
diff --git a/src/search/magic-search.h b/src/search/magic-search.h
index 9b1ac46e88a7dc743941b8e7df7b6dc831796736..43ee81b5a3350ba2b14b4ba6b9d3162fbf6ffe42 100644
--- a/src/search/magic-search.h
+++ b/src/search/magic-search.h
@@ -203,6 +203,19 @@ private:
 	                                        const std::string &withDomain,
 	                                        const std::list<std::shared_ptr<SearchResult>> &currentList) const;
 
+	/**
+	 * Get all addresses from conferences info participants & organizer
+	 * @param[in] filter word we search
+	 * @param[in] withDomain domain which we want to search only
+	 * @param[in] currentList current list where we will check if address already exist
+	 * @return all addresses from conferences info organizer and participants which match in a SearchResult list
+	 * @private
+	 **/
+	std::list<std::shared_ptr<SearchResult>>
+	getAddressFromConferencesInfo(const std::string &filter,
+	                              const std::string &withDomain,
+	                              const std::list<std::shared_ptr<SearchResult>> &currentList) const;
+
 #ifdef LDAP_ENABLED
 	/**
 	 * Get all addresses from LDAP Server