diff --git a/res/res_pjsip_phoneprov_provider.c b/res/res_pjsip_phoneprov_provider.c
index 3b6594057772566d0f7078ae11520b67f03da753..70dd99e067bab2920a6c0e5878806e6f28bd6304 100644
--- a/res/res_pjsip_phoneprov_provider.c
+++ b/res/res_pjsip_phoneprov_provider.c
@@ -285,15 +285,8 @@ static int load_endpoint(const char *id, const char *endpoint_name, struct varsh
 	return 0;
 }
 
-/*! \brief Callback that loads the users from phoneprov sections */
-static int load_users(void)
-{
-	ast_sorcery_reload_object(sorcery, "phoneprov");
-	return 0;
-}
-
 /*! \brief Callback that validates the phoneprov object */
-static int users_apply_handler(const struct ast_sorcery *sorcery, void *obj)
+static int users_apply_handler(void *obj, void *arg, int flags)
 {
 	struct phoneprov *pp = obj;
 	const char *id = ast_sorcery_object_get_id(pp);
@@ -303,19 +296,19 @@ static int users_apply_handler(const struct ast_sorcery *sorcery, void *obj)
 	if (!ast_var_find(pp->vars,
 		ast_phoneprov_std_variable_lookup(AST_PHONEPROV_STD_MAC))) {
 		ast_log(LOG_ERROR, "phoneprov %s must contain a MAC entry.\n", id);
-		return -1;
+		return 0;
 	}
 
 	if (!ast_var_find(pp->vars,
 		ast_phoneprov_std_variable_lookup(AST_PHONEPROV_STD_PROFILE))) {
 		ast_log(LOG_ERROR, "phoneprov %s must contain a PROFILE entry.\n", id);
-		return -1;
+		return 0;
 	}
 
 	endpoint_name = ast_var_find(pp->vars, "endpoint");
 	if (endpoint_name) {
 		if (load_endpoint(id, endpoint_name, pp->vars, port_string)) {
-			return -1;
+			return 0;
 		}
 	}
 
@@ -342,13 +335,31 @@ static int users_apply_handler(const struct ast_sorcery *sorcery, void *obj)
 		ast_log(LOG_ERROR, "phoneprov %s didn't contain a PROFILE entry.\n", id);
 	}
 
-	if (!ast_phoneprov_add_extension(AST_MODULE, pp->vars)) {
+	ast_phoneprov_add_extension(AST_MODULE, pp->vars);
+
+	return CMP_MATCH;
+}
+
+/*! \brief Callback that loads the users from phoneprov sections */
+static int load_users(void)
+{
+	struct ao2_container *users;
+
+	ast_sorcery_reload_object(sorcery, "phoneprov");
+
+	users = ast_sorcery_retrieve_by_fields(sorcery, "phoneprov",
+		AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);
+	if (!users) {
 		return 0;
 	}
 
-	return -1;
+	ao2_callback(users, OBJ_MULTIPLE, users_apply_handler, sorcery);
+	ao2_ref(users, -1);
+
+	return 0;
 }
 
+
 static int load_module(void)
 {
 	CHECK_PJSIP_MODULE_LOADED();
@@ -360,13 +371,15 @@ static int load_module(void)
 		"pjsip.conf,criteria=type=phoneprov");
 
 	ast_sorcery_object_register(sorcery, "phoneprov", phoneprov_alloc, NULL,
-		users_apply_handler);
+		NULL);
 
 	ast_sorcery_object_field_register(sorcery, "phoneprov", "type", "", OPT_NOOP_T, 0,
 		0);
 	ast_sorcery_object_fields_register(sorcery, "phoneprov", "^", aco_handler,
 		fields_handler);
 
+	ast_sorcery_load_object(sorcery, "phoneprov");
+
 	if (ast_phoneprov_provider_register(AST_MODULE, load_users)) {
 		ast_log(LOG_ERROR, "Unable to register pjsip phoneprov provider.\n");
 		return AST_MODULE_LOAD_DECLINE;