Index: trunk/psModules/src/config/pmConfigRecipes.c
===================================================================
--- trunk/psModules/src/config/pmConfigRecipes.c	(revision 15513)
+++ trunk/psModules/src/config/pmConfigRecipes.c	(revision 15727)
@@ -6,10 +6,5 @@
 #include <string.h>
 #include <strings.h>            /* for strn?casecmp */
-#include <unistd.h>
-#include <libgen.h>
 #include <assert.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <glob.h>
 #include <pslib.h>
 #include "pmConfig.h"
@@ -227,9 +222,44 @@
 
     // Go through the command-line arguments
-    int argNum; // Argument number for "-recipe"
+    int argNum;                         // Argument number
+
+    // -recipe-file: read recipe from file
+    while ((argNum = psArgumentGet(*argc, argv, "-recipe-file")) > 0) {
+        psArgumentRemove(argNum, argc, argv);
+        if (argNum + 1 >= *argc) {
+            psError(PS_ERR_IO, false,
+                    "-recipe command-line switch provided without the required recipe and filename\n");
+            return false;
+        }
+
+        psString recipeName = psStringCopy(argv[argNum]); // Name of the recipe
+        psArgumentRemove(argNum, argc, argv);
+        psString filename = psStringCopy(argv[argNum]); // Filename for the recipe
+        psArgumentRemove(argNum, argc, argv);
+
+        psMetadata *recipe = NULL;      // Recipe from file
+        if (!pmConfigFileRead(&recipe, filename, "recipe")) {
+            psError(PS_ERR_IO, "Error reading config file %s\n", filename);
+            psFree(recipeName);
+            psFree(filename);
+            return false;
+        }
+
+        psString comment = NULL;
+        psStringAppend(&comment, "Recipe added at command line from file %s", filename);
+        psMetadataAdd(recipes, PS_LIST_TAIL, recipeName, PS_DATA_METADATA | PS_META_REPLACE,
+                      comment, recipe);
+        psFree(comment);
+        psFree(recipe);                 // Drop reference
+        psFree(recipeName);
+        psFree(filename);
+    }
+
+    // -recipe: read recipe from symbolic link
     while ((argNum = psArgumentGet(*argc, argv, "-recipe")) > 0) {
         psArgumentRemove(argNum, argc, argv);
         if (argNum + 1 >= *argc) {
-            psError(PS_ERR_IO, false, "-recipe command-line switch provided without the required recipe and source\n");
+            psError(PS_ERR_IO, false,
+                    "-recipe command-line switch provided without the required recipe and source\n");
             return false;
         }
@@ -240,29 +270,13 @@
         psArgumentRemove(argNum, argc, argv);
 
-        if (access(recipeSource, R_OK) == 0) {
-            // The source is a file: load onto config->arguments
-            // save the recipes onto config->arguments:RECIPES
-
-            psMetadata *recipe = NULL;      // Recipe from file
-            if (pmConfigFileRead(&recipe, recipeSource, "recipe")) {
-                psString comment = psStringCopy("Recipe added at command line from ");
-                psStringAppend(&comment, "%s", recipeSource);
-                psMetadataAdd(recipes, PS_LIST_TAIL, recipeName, PS_DATA_METADATA | PS_META_REPLACE,
-                              comment, recipe);
-                psFree(comment);
-                psFree(recipe);                 // Drop reference
-            } else {
-                psAbort("error reading config file %s\n", recipeSource);
-            }
-        } else {
-            // Assume it's a symbolic reference to something that's not yet read in.
-            // it will be loaded later by pmConfigReadRecipes with option CL
-            psMetadataAddStr(config->recipeSymbols, PS_LIST_TAIL, recipeName, PS_META_REPLACE, "",
-                             recipeSource);
-        }
+        // Assume it's a symbolic reference to something that's not yet read in.
+        // it will be loaded later by pmConfigReadRecipes with option CL
+        psMetadataAddStr(config->recipeSymbols, PS_LIST_TAIL, recipeName, PS_META_REPLACE, NULL,
+                         recipeSource);
+
         psTrace ("psModules.config", 3, "read recipe %s from %s", recipeName, recipeSource);
         psFree(recipeName);
         psFree(recipeSource);
-    } // Iterating through the command-line arguments
+    }
 
     return true;
