diff --git a/res/res_sorcery_config.c b/res/res_sorcery_config.c
index 60ecb831104fe6c42b36e77e7b9c93cea798c155..deb2ffadd85fc44e56ccd690ea12daeda7177a73 100644
--- a/res/res_sorcery_config.c
+++ b/res/res_sorcery_config.c
@@ -294,6 +294,18 @@ static void sorcery_config_internal_load(void *data, const struct ast_sorcery *s
 			continue;
 		}
 
+		/*  Confirm an object with this id does not already exist in the bucket.
+		 *  If it exists, however, the configuration is invalid so stop
+		 *  processing and destroy it. */
+		obj = ao2_find(objects, id, OBJ_KEY;
+
+		if (obj) {
+			ast_log(LOG_ERROR, "Config file '%s' could not be loaded; configuration contains a duplicate object: '%s' of type '%s'\n",
+				config->filename, id, type);
+			ast_config_destroy(cfg);
+			return;
+		}
+
 		if (!(obj = ast_sorcery_alloc(sorcery, type, id)) ||
 		    ast_sorcery_objectset_apply(sorcery, obj, ast_category_first(category))) {