diff --git a/test/test.py b/test/test.py
index 0c799b9..20d76f4 100755
--- a/test/test.py
+++ b/test/test.py
@@ -39,6 +39,7 @@
 from crossrunner.compat import path_join
 
 TEST_DIR = os.path.realpath(os.path.dirname(__file__))
+FEATURE_DIR = path_join(TEST_DIR, 'features')
 CONFIG_FILE = 'tests.json'
 
 
@@ -101,8 +102,7 @@
 
 
 def run_feature_tests(server_match, feature_match, jobs, skip_known_failures):
-  basedir = path_join(TEST_DIR, 'features')
-  # run_tests(crossrunner.collect_feature_tests, basedir, server_match, feature_match, jobs, skip_known_failures)
+  basedir = FEATURE_DIR
   logger = multiprocessing.get_logger()
   logger.debug('Collecting tests')
   with open(path_join(TEST_DIR, CONFIG_FILE), 'r') as fp:
@@ -153,7 +153,7 @@
                       default=default_concurrenty(),
                       help='number of concurrent test executions')
   parser.add_argument('-F', '--features', nargs='*', default=None,
-                      help='run feature tests instead of cross language tests')
+                      help='run server feature tests instead of cross language tests')
 
   g = parser.add_argument_group(title='Advanced')
   g.add_argument('-v', '--verbose', action='store_const',
@@ -170,13 +170,18 @@
   logger = multiprocessing.log_to_stderr()
   logger.setLevel(options.log_level)
 
+  if options.features is not None and options.client:
+    print('Cannot specify both --features and --client ', file=sys.stderr)
+    return 1
+
   # Allow multiple args separated with ',' for backward compatibility
   server_match = list(chain(*[x.split(',') for x in options.server]))
   client_match = list(chain(*[x.split(',') for x in options.client]))
 
   if options.update_failures or options.print_failures:
+    dire = FEATURE_DIR if options.features is not None else TEST_DIR
     res = crossrunner.generate_known_failures(
-        TEST_DIR, options.update_failures == 'overwrite',
+        dire, options.update_failures == 'overwrite',
         options.update_failures, options.print_failures)
   elif options.features is not None:
     features = options.features or ['.*']
