diff --git a/include/asterisk/config_options.h b/include/asterisk/config_options.h
index b697ecb54c49816846035701a1a7f5aa9ba5b319..3e4c4a5ca9ad9fe475ffe982cc2ca108d44de95c 100644
--- a/include/asterisk/config_options.h
+++ b/include/asterisk/config_options.h
@@ -136,9 +136,11 @@ typedef int (*aco_pre_apply_config)(void);
  */
 typedef void *(*aco_snapshot_alloc)(void);
 
+/*! \brief The representation of a single configuration file to be processed */
 struct aco_file {
-	const char *filename;
-	const char **preload;
+	const char *filename; /*!< \brief The filename to be processed */
+	const char *alias;    /*!< \brief An alias filename to be tried if 'filename' cannot be found */
+	const char **preload; /*!< \brief A null-terminated oredered array of categories to be loaded first */
 	struct aco_type *types[]; /*!< The list of types for this config. Required. Use a sentinel! */
 };
 
diff --git a/main/config_options.c b/main/config_options.c
index c8fb4ffadc9d00f1ff15a849e78b65646ed7f446..7baf67836994fe16886225b1e0b772d2d1cd6b77 100644
--- a/main/config_options.c
+++ b/main/config_options.c
@@ -434,7 +434,13 @@ enum aco_process_status aco_process_config(struct aco_info *info, int reload)
 	}
 
 	while (res != ACO_PROCESS_ERROR && (file = info->files[x++])) {
-		if (!(cfg = ast_config_load(file->filename, cfg_flags))) {
+		const char *filename = file->filename;
+try_alias:
+		if (!(cfg = ast_config_load(filename, cfg_flags))) {
+			if (file->alias && strcmp(file->alias, filename)) {
+				filename = file->alias;
+				goto try_alias;
+			}
 			ast_log(LOG_ERROR, "Unable to load config file '%s'\n", file->filename);
 			res = ACO_PROCESS_ERROR;
 			break;
@@ -447,6 +453,10 @@ enum aco_process_status aco_process_config(struct aco_info *info, int reload)
 			res = ACO_PROCESS_ERROR;
 			break;
 		} else if (cfg == CONFIG_STATUS_FILEMISSING) {
+			if (file->alias && strcmp(file->alias, filename)) {
+				filename = file->alias;
+				goto try_alias;
+			}
 			ast_log(LOG_ERROR, "%s is missing! Cannot load %s\n", file->filename, info->module);
 			res = ACO_PROCESS_ERROR;
 			break;