diff --git a/scripts/generator/README b/scripts/generator/README
index 2fc695a..ddaa9d4 100644
--- a/scripts/generator/README
+++ b/scripts/generator/README
@@ -14,7 +14,7 @@
 Make sure to install the scripts somewhere in your path.  Then you can
 run the program.
 
-  gmock_gen.py header-file.h [ClassName1] [ClassName2] ...
+  gmock_gen.py header-file.h [ClassName]...
 
 If no ClassNames are specified, all classes in the file are emitted.
 
diff --git a/scripts/generator/cpp/gmock_class.py b/scripts/generator/cpp/gmock_class.py
index ab2da32..ba11f9e 100755
--- a/scripts/generator/cpp/gmock_class.py
+++ b/scripts/generator/cpp/gmock_class.py
@@ -14,13 +14,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-"""Generate a Google Mock class from a production class.
+"""Generate Google Mock classes from base classes.
 
-This program will read in a C++ source file and output the Google Mock class
-for the specified class.
+This program will read in a C++ source file and output the Google Mock
+classes for the specified classes.  If no class is specified, all
+classes in the source file are emitted.
 
 Usage:
-  gmock_class.py header-file.h [ClassName1] [ClassName2] ...
+  gmock_class.py header-file.h [ClassName]...
 
 Output is sent to stdout.
 """
@@ -35,7 +36,8 @@
 from cpp import ast
 from cpp import utils
 
-# How many spaces to indent.  Can set me with INDENT environment variable.
+_VERSION = (1, 0, 1)  # The version of this script.
+# How many spaces to indent.  Can set me with the INDENT environment variable.
 _INDENT = 2
 
 
@@ -54,7 +56,7 @@
         const = 'CONST_'
       return_type = 'void'
       if node.return_type:
-        # Add modifier bits like const.
+        # Add modifiers like 'const'.
         modifiers = ''
         if node.return_type.modifiers:
           modifiers = ' '.join(node.return_type.modifiers) + ' '
@@ -79,12 +81,15 @@
       output_lines.append(line)
 
 
-def _GenerateMock(filename, source, ast_list, desired_class_names):
+def _GenerateMocks(filename, source, ast_list, desired_class_names):
+  processed_class_names = set()
   lines = []
   for node in ast_list:
-    if (isinstance(node, ast.Class) and node.body and 
-        (desired_class_names is None or node.name in desired_class_names)):
+    if (isinstance(node, ast.Class) and node.body and
+        # desired_class_names being None means that all classes are selected.
+        (not desired_class_names or node.name in desired_class_names)):
       class_name = node.name
+      processed_class_names.add(class_name)
       class_node = node
       # Add namespace before the class.
       if class_node.namespace:
@@ -114,19 +119,23 @@
           lines.append('}  // namespace %s' % class_node.namespace[i])
         lines.append('')  # Add an extra newline.
 
-  if lines:
-    sys.stdout.write('\n'.join(lines))
-  else:
-    if desired_class_names is None:
-      sys.stderr.write('No classes not found\n')
-    else:
-      class_names = ', '.join(sorted(desired_class_names))
-      sys.stderr.write('Class(es) not found: %s\n' % class_names)
+  sys.stdout.write('\n'.join(lines))
+
+  if desired_class_names:
+    missing_class_names = ', '.join(
+        sorted(desired_class_names - processed_class_names))
+    if missing_class_names:
+      sys.stderr.write('Class(es) not found in %s: %s\n' %
+                       (filename, missing_class_names))
+  elif not processed_class_names:
+      sys.stderr.write('No class found in %s\n' % filename)
 
 
 def main(argv=sys.argv):
   if len(argv) < 2:
-    sys.stdout.write(__doc__)
+    sys.stderr.write('Google Mock Class Generator v%s\n\n' %
+                     '.'.join(map(str, _VERSION)))
+    sys.stderr.write(__doc__)
     return 1
 
   global _INDENT
@@ -138,9 +147,9 @@
     sys.stderr.write('Unable to use indent of %s\n' % os.environ.get('INDENT'))
 
   filename = argv[1]
-  class_name = None
+  desired_class_names = None  # None means all classes in the source file.
   if len(argv) >= 3:
-    class_name = set(argv[2:])
+    desired_class_names = set(argv[2:])
   source = utils.ReadFile(filename)
   if source is None:
     return 1
@@ -154,7 +163,7 @@
     # An error message was already printed since we couldn't parse.
     pass
   else:
-    _GenerateMock(filename, source, entire_ast, class_name)
+    _GenerateMocks(filename, source, entire_ast, desired_class_names)
 
 
 if __name__ == '__main__':
