Index: trunk/ppSim/src/ppSim.c
===================================================================
--- trunk/ppSim/src/ppSim.c	(revision 17615)
+++ trunk/ppSim/src/ppSim.c	(revision 18011)
@@ -1,3 +1,12 @@
 # include "ppSim.h"
+
+int failure (pmConfig *config, psExit status, char *message) { 
+    ppSimRandomGaussianFree ();
+    psErrorStackPrint(stderr, message);
+    psFree(config);
+    pmModelClassCleanup();
+    psLibFinalize();
+    exit (status);
+}
 
 int main(int argc, char *argv[])
@@ -8,22 +17,20 @@
     pmConfig *config = pmConfigRead(&argc, argv, PPSIM_RECIPE); // Configuration
     if (!config) {
-        psErrorStackPrint(stderr, "Unable to read configurations.");
-        exit(PS_EXIT_CONFIG_ERROR);
+	failure (config, PS_EXIT_CONFIG_ERROR, "Unable to read configurations.");
     }
 
-    ppSimArguments(argc, argv, config);
+    if (!ppSimArguments(argc, argv, config)) {
+	failure (config, PS_EXIT_CONFIG_ERROR, "Error parsing command-line arguments");
+    }
 
     if (!ppSimCreate(config)) {
-        psErrorStackPrint(stderr, "Unable to create output file.");
-        psFree(config);
-        exit(PS_EXIT_CONFIG_ERROR);
+	failure (config, PS_EXIT_CONFIG_ERROR, "Unable to create output file.");
     }
 
     if (!ppSimLoop(config)) {
-        psErrorStackPrint(stderr, "Unable to generate data.");
-        psFree(config);
-        exit(PS_EXIT_SYS_ERROR);
+	failure (config, PS_EXIT_SYS_ERROR, "Unable to generate data.");
     }
 
+    ppSimRandomGaussianFree ();
     psFree(config);
     pmModelClassCleanup();
@@ -32,4 +39,4 @@
     psLibFinalize();
 
-    return PS_EXIT_SUCCESS;
+    exit (PS_EXIT_SUCCESS);
 }
