Index: /trunk/Ohana/src/opihi/cmd.data/book_commands.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/book_commands.c	(revision 11323)
+++ /trunk/Ohana/src/opihi/cmd.data/book_commands.c	(revision 11324)
@@ -363,4 +363,10 @@
   }
 
+  Optional = FALSE;
+  if ((N = get_argument (argc, argv, "-optional"))) {
+    remove_argument (N, &argc, argv);
+    Optional = TRUE;
+  }
+
   if (argc != 4) {
     gprint (GP_ERR, "USAGE: book newword (book) (page) (word)\n");
@@ -385,4 +391,8 @@
   value = BookGetWord (page, argv[3]);
   if (value == NULL) {
+    if (Optional) {
+      FREE (varName);
+      return TRUE;
+    }
     gprint (GP_ERR, "value %s on page %s in book %s not found\n", argv[3], argv[2], argv[1]);
     FREE (varName);
Index: /trunk/Ohana/src/opihi/pantasks/CheckTasks.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/CheckTasks.c	(revision 11323)
+++ /trunk/Ohana/src/opihi/pantasks/CheckTasks.c	(revision 11324)
@@ -25,10 +25,5 @@
     }
     if (task[0].NpendingMax && (task[0].Npending >= task[0].NpendingMax)) {
-	gettimeofday (&task[0].last, (void *) NULL);
-	continue;
-    }
-
-    /* check if there are errors with this task */
-    if (!ValidateTask (task, TRUE)) { 
+	fprintf (stderr, "npending: %d, max npending: %d\n", task[0].Npending, task[0].NpendingMax);
 	gettimeofday (&task[0].last, (void *) NULL);
 	continue;
@@ -42,4 +37,10 @@
 	  continue;
       }
+    }
+
+    /* check if there are errors with this task */
+    if (!ValidateTask (task, TRUE)) { 
+	gettimeofday (&task[0].last, (void *) NULL);
+	continue;
     }
 
Index: /trunk/Ohana/src/opihi/pantasks/TaskOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 11323)
+++ /trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 11324)
@@ -400,4 +400,5 @@
 
   NewTask[0].NpendingMax = 0;  /* default value means 'no limit' */
+  NewTask[0].Npending = 0;  /* default value means 'no limit' */
 
   NewTask[0].Njobs = 0;
