diff --git a/tools/sl4a_shell.py b/tools/sl4a_shell.py
index b771417..efeb129 100755
--- a/tools/sl4a_shell.py
+++ b/tools/sl4a_shell.py
@@ -41,30 +41,30 @@
 
 
 class Sl4aShell(jsonrpc_shell_base.JsonRpcShellBase):
-    def _start_services(self, console_env):
-        """Overrides superclass."""
-        self._ad.services.register('sl4a', sl4a_service.Sl4aService)
-        console_env['s'] = self._ad.services.sl4a
-        console_env['sl4a'] = self._ad.sl4a
-        console_env['ed'] = self._ad.ed
+  def _start_services(self, console_env):
+    """Overrides superclass."""
+    self._ad.services.register('sl4a', sl4a_service.Sl4aService)
+    console_env['s'] = self._ad.services.sl4a
+    console_env['sl4a'] = self._ad.sl4a
+    console_env['ed'] = self._ad.ed
 
-    def _get_banner(self, serial):
-        lines = [
-            'Connected to %s.' % serial, 'Call methods against:',
-            '    ad (android_device.AndroidDevice)', '    sl4a or s (SL4A)',
-            '    ed (EventDispatcher)'
-        ]
-        return '\n'.join(lines)
+  def _get_banner(self, serial):
+    lines = [
+      'Connected to %s.' % serial, 'Call methods against:',
+      '    ad (android_device.AndroidDevice)', '    sl4a or s (SL4A)',
+      '    ed (EventDispatcher)'
+    ]
+    return '\n'.join(lines)
 
 
 if __name__ == '__main__':
-    parser = argparse.ArgumentParser(
-        description='Interactive client for sl4a.')
-    parser.add_argument(
-        '-s',
-        '--serial',
-        help=
-        'Device serial to connect to (if more than one device is connected)')
-    args = parser.parse_args()
-    logging.basicConfig(level=logging.INFO)
-    Sl4aShell().main(args.serial)
+  parser = argparse.ArgumentParser(
+    description='Interactive client for sl4a.')
+  parser.add_argument(
+    '-s',
+    '--serial',
+    help=
+    'Device serial to connect to (if more than one device is connected)')
+  args = parser.parse_args()
+  logging.basicConfig(level=logging.INFO)
+  Sl4aShell().main(args.serial)
diff --git a/tools/snippet_shell.py b/tools/snippet_shell.py
index d95132e..022c92c 100755
--- a/tools/snippet_shell.py
+++ b/tools/snippet_shell.py
@@ -35,50 +35,50 @@
 
 
 class SnippetShell(jsonrpc_shell_base.JsonRpcShellBase):
-    def __init__(self, package):
-        self._package = package
+  def __init__(self, package):
+    self._package = package
 
-    def _start_services(self, console_env):
-        """Overrides superclass."""
-        self._ad.load_snippet(name='snippet', package=self._package)
-        console_env['snippet'] = self._ad.snippet
-        console_env['s'] = self._ad.snippet
+  def _start_services(self, console_env):
+    """Overrides superclass."""
+    self._ad.load_snippet(name='snippet', package=self._package)
+    console_env['snippet'] = self._ad.snippet
+    console_env['s'] = self._ad.snippet
 
-    def _get_banner(self, serial):
-        lines = [
-            'Connected to %s.' % serial, 'Call methods against:',
-            '    ad (android_device.AndroidDevice)',
-            '    snippet or s (Snippet)'
-        ]
-        return '\n'.join(lines)
+  def _get_banner(self, serial):
+    lines = [
+      'Connected to %s.' % serial, 'Call methods against:',
+      '    ad (android_device.AndroidDevice)',
+      '    snippet or s (Snippet)'
+    ]
+    return '\n'.join(lines)
 
 
 if __name__ == '__main__':
-    parser = argparse.ArgumentParser(
-        description='Interactive client for Mobly code snippets.')
-    parser.add_argument(
-        '-s',
-        '--serial',
-        help=
-        'Device serial to connect to (if more than one device is connected)')
-    parser.add_argument(
-        'package',
-        metavar='PACKAGE_NAME',
-        type=str,
-        nargs='?',
-        help='The package name of the snippet to use.')
-    parser.add_argument(
-        '--mbs',
-        help='Whether to connect to Mobly Bundled Snippets',
-        action='store_true')
-    args = parser.parse_args()
-    if args.package and args.mbs:
-        print('Cannot specify both --package and --mbs', file=sys.stderr)
-        sys.exit(1)
-    if args.mbs:
-        package = android_device.MBS_PACKAGE
-    else:
-        package = args.package
+  parser = argparse.ArgumentParser(
+    description='Interactive client for Mobly code snippets.')
+  parser.add_argument(
+    '-s',
+    '--serial',
+    help=
+    'Device serial to connect to (if more than one device is connected)')
+  parser.add_argument(
+    'package',
+    metavar='PACKAGE_NAME',
+    type=str,
+    nargs='?',
+    help='The package name of the snippet to use.')
+  parser.add_argument(
+    '--mbs',
+    help='Whether to connect to Mobly Bundled Snippets',
+    action='store_true')
+  args = parser.parse_args()
+  if args.package and args.mbs:
+    print('Cannot specify both --package and --mbs', file=sys.stderr)
+    sys.exit(1)
+  if args.mbs:
+    package = android_device.MBS_PACKAGE
+  else:
+    package = args.package
 
-    logging.basicConfig(level=logging.INFO)
-    SnippetShell(package).main(args.serial)
+  logging.basicConfig(level=logging.INFO)
+  SnippetShell(package).main(args.serial)
