diff --git a/include/asterisk/module.h b/include/asterisk/module.h
index e7aec449f5d0e62e1c7f8c0117d58da68563a517..48911c8c2a08aa55148cb5f5b7685bedfdd38502 100644
--- a/include/asterisk/module.h
+++ b/include/asterisk/module.h
@@ -58,10 +58,11 @@ enum ast_module_unload_mode {
 };
 
 enum ast_module_load_result {
-	AST_MODULE_LOAD_SUCCESS = 0,	/*!< Module loaded and configured */
-	AST_MODULE_LOAD_DECLINE = 1,	/*!< Module is not configured */
-	AST_MODULE_LOAD_SKIP = 2,	/*!< Module was skipped for some reason */
-	AST_MODULE_LOAD_FAILURE = -1,	/*!< Module could not be loaded properly */
+	AST_MODULE_LOAD_SUCCESS = 0,    /*!< Module loaded and configured */
+	AST_MODULE_LOAD_DECLINE = 1,    /*!< Module is not configured */
+	AST_MODULE_LOAD_SKIP = 2,       /*!< Module was skipped for some reason */
+	AST_MODULE_LOAD_PRIORITY = 3,   /*!< Module is not loaded yet, but is added to prioity heap */
+	AST_MODULE_LOAD_FAILURE = -1,   /*!< Module could not be loaded properly */
 };
 
 /*! 
diff --git a/main/loader.c b/main/loader.c
index 45b66612e25102b8824f95bdb8f078ad233f126a..a8e98640930f099371a051fe3580c3fb8840d566 100644
--- a/main/loader.c
+++ b/main/loader.c
@@ -742,9 +742,8 @@ static enum ast_module_load_result start_resource(struct ast_module *mod)
 		mod->flags.declined = 1;
 		break;
 	case AST_MODULE_LOAD_FAILURE:
-		break;
-	case AST_MODULE_LOAD_SKIP:
-		/* modules should never return this value */
+	case AST_MODULE_LOAD_SKIP: /* modules should never return this value */
+	case AST_MODULE_LOAD_PRIORITY:
 		break;
 	}
 
@@ -806,7 +805,7 @@ static enum ast_module_load_result load_resource(const char *resource_name, unsi
 
 	if (resource_heap) {
 		ast_heap_push(resource_heap, mod);
-		res = AST_MODULE_LOAD_SKIP;
+		res = AST_MODULE_LOAD_PRIORITY;
 	} else {
 		res = start_resource(mod);
 	}
@@ -892,6 +891,9 @@ static int load_resource_list(struct load_order *load_order, unsigned int global
 			goto done;
 		case AST_MODULE_LOAD_SKIP:
 			break;
+		case AST_MODULE_LOAD_PRIORITY:
+			AST_LIST_REMOVE_CURRENT(entry);
+			break;
 		}
 	}
 	AST_LIST_TRAVERSE_SAFE_END;
@@ -907,6 +909,7 @@ static int load_resource_list(struct load_order *load_order, unsigned int global
 			res = -1;
 			goto done;
 		case AST_MODULE_LOAD_SKIP:
+		case AST_MODULE_LOAD_PRIORITY:
 			break;
 		}
 	}