diff --git a/lib/gen_valid.py b/lib/gen_valid.py
index d1601ec..6ead645 100755
--- a/lib/gen_valid.py
+++ b/lib/gen_valid.py
@@ -426,17 +426,29 @@
     return process_error_message(error_message)
 
 
-def valid_list(var_value, valid_values=[], fail_on_empty=False, *args,
-               **kwargs):
+def valid_list(var_value, valid_values=[], invalid_values=[],
+               required_values=[], fail_on_empty=False, *args, **kwargs):
     r"""
     The variable value is valid if it is a list where each entry can be found
-    in the valid_values list.
+    in the valid_values list or if none of its values can be found in the
+    invalid_values list or if all of the values in the required_values list
+    can be found in var_value.
+
+    The caller may only specify one of these 3 arguments: valid_values,
+    invalid_values, required_values.
 
     Description of argument(s):
     var_value                       The value being validated.
     valid_values                    A list of valid values.  Each element in
                                     the var_value list must be equal to one of
                                     these values to be considered valid.
+    invalid_values                  A list of invalid values.  If any element
+                                    in var_value is equal to any of the values
+                                    in this argument, var_value is considered
+                                    invalid.
+    required_values                 Every value in required_values must be
+                                    found in var_value.  Otherwise, var_value
+                                    is considered invalid.
     fail_on_empty                   Indicates that an empty list for the
                                     variable value should be considered an
                                     error.
@@ -444,6 +456,19 @@
 
     error_message = ""
 
+    # Validate this function's arguments.
+    len_valid_values = len(valid_values)
+    len_invalid_values = len(invalid_values)
+    len_required_values = len(required_values)
+    if (len_valid_values + len_invalid_values + len_required_values) > 1:
+        error_message += "Programmer error - You must provide only one of the"
+        error_message += " following: valid_values, invalid_values,"
+        error_message += " required_values.\n"
+        error_message += gp.sprint_var(invalid_values)
+        error_message += gp.sprint_var(valid_values)
+        error_message += gp.sprint_var(required_values)
+        return process_error_message(error_message)
+
     if type(var_value) is not list:
         var_name = get_var_name(*args, **kwargs)
         error_message = valid_type(var_value, list, var_name=var_name)
@@ -456,12 +481,55 @@
         error_message += gp.sprint_varx(var_name, var_value, gp.show_type())
         return process_error_message(error_message)
 
+    if len(required_values):
+        found_error = 0
+        display_required_values = list(required_values)
+        for ix in range(0, len(required_values)):
+            if required_values[ix] not in var_value:
+                found_error = 1
+                display_required_values[ix] = \
+                    str(display_required_values[ix]) + "*"
+        if found_error:
+            var_name = get_var_name(*args, **kwargs)
+            error_message += "The following list is invalid:\n"
+            error_message += gp.sprint_varx(var_name, var_value,
+                                            gp.blank() | gp.show_type())
+            error_message += "\n"
+            error_message += "Because some of the values in the "
+            error_message += "required_values list are not present (see"
+            error_message += " entries marked with \"*\"):\n"
+            error_message += "\n"
+            error_message += gp.sprint_varx('required_values',
+                                            display_required_values,
+                                            gp.blank() | gp.show_type())
+            error_message += "\n"
+
+        return process_error_message(error_message)
+
+    if len(invalid_values):
+        found_error = 0
+        display_var_value = list(var_value)
+        for ix in range(0, len(var_value)):
+            if var_value[ix] in invalid_values:
+                found_error = 1
+                display_var_value[ix] = str(var_value[ix]) + "*"
+
+        if found_error:
+            var_name = get_var_name(*args, **kwargs)
+            error_message += "The following list is invalid (see entries"
+            error_message += " marked with \"*\"):\n"
+            error_message += gp.sprint_varx(var_name, display_var_value,
+                                            gp.blank() | gp.show_type())
+            error_message += "\n"
+            error_message += gp.sprint_var(invalid_values, gp.show_type())
+        return process_error_message(error_message)
+
     found_error = 0
     display_var_value = list(var_value)
     for ix in range(0, len(var_value)):
         if var_value[ix] not in valid_values:
             found_error = 1
-            display_var_value[ix] = var_value[ix] + "*"
+            display_var_value[ix] = str(var_value[ix]) + "*"
 
     if found_error:
         var_name = get_var_name(*args, **kwargs)
@@ -470,7 +538,7 @@
         error_message += gp.sprint_varx(var_name, display_var_value,
                                         gp.blank() | gp.show_type())
         error_message += "\n"
-        error_message += gp.sprint_var(valid_values | gp.show_type())
+        error_message += gp.sprint_var(valid_values, gp.show_type())
         return process_error_message(error_message)
 
     return process_error_message(error_message)
@@ -496,7 +564,7 @@
         error_message += gp.sprint_varx(var_name, var_value,
                                         gp.blank() | gp.show_type())
         error_message += "\n"
-        error_message += gp.sprint_var(missing_keys | gp.show_type())
+        error_message += gp.sprint_var(missing_keys, gp.show_type())
     return process_error_message(error_message)
 
 
