#include <sys/types.h>
 #include <sys/time.h>
+#include <sys/stat.h>
 #include <unistd.h>
 #include <dirent.h>
 #include <errno.h>
     char *path;
     category_t *category;
     int i;
+    struct stat st;
 
     path = xmalloc (strlen (mnemon->dir_name) + 1 + strlen (name) + 1);
     sprintf (path, "%s/%s", mnemon->dir_name, name);
        exit (1);
     }
 
+    fstat (fileno(file), &st);
+    if (! S_ISREG(st.st_mode)) {
+       fprintf (stderr, "Error: File %s is not a regular file.\n", path);
+       exit (1);
+    }
+
     category = mnemon_get_category (mnemon, name);
 
 #define READ_LINE do {                                 \
     mnemon_t mnemon;
     char *response;
 
+    void _load_categories()
+    {
+       if (argc > 1) {
+           int i;
+           for (i = 1; i < argc; i++)
+               mnemon_load_category (&mnemon, argv[i]);
+       } else {
+           mnemon_load (&mnemon);
+       }
+    }
+
     srand (time (NULL));
 
     mnemon_init (&mnemon);
 
-    mnemon_load (&mnemon);
+    _load_categories ();
 
     mnemon_do_challenges (&mnemon);
 
     mnemon_fini (&mnemon);
 
     mnemon_init (&mnemon);
-    mnemon_load (&mnemon);
+
+    _load_categories ();
 
     printf ("Great job.\nHere are your current results:\n");
     mnemon_print_histogram (&mnemon, NULL, 0);