diff --git a/Lib/distutils/command/sdist.py b/Lib/distutils/command/sdist.py
index f77f52c..ab0ada1 100644
--- a/Lib/distutils/command/sdist.py
+++ b/Lib/distutils/command/sdist.py
@@ -30,7 +30,7 @@
     FancyGetopt(formats).print_help(
         "List of available source distribution formats:")
 
-class sdist (Command):
+class sdist(Command):
 
     description = "create a source distribution (tarball, zip file, etc.)"
 
@@ -77,10 +77,10 @@
     negative_opt = {'no-defaults': 'use-defaults',
                     'no-prune': 'prune' }
 
-    default_format = { 'posix': 'gztar',
-                       'nt': 'zip' }
+    default_format = {'posix': 'gztar',
+                      'nt': 'zip' }
 
-    def initialize_options (self):
+    def initialize_options(self):
         # 'template' and 'manifest' are, respectively, the names of
         # the manifest template and manifest file.
         self.template = None
@@ -100,8 +100,7 @@
 
         self.archive_files = None
 
-
-    def finalize_options (self):
+    def finalize_options(self):
         if self.manifest is None:
             self.manifest = "MANIFEST"
         if self.template is None:
@@ -124,9 +123,7 @@
         if self.dist_dir is None:
             self.dist_dir = "dist"
 
-
-    def run (self):
-
+    def run(self):
         # 'filelist' contains the list of files that will make up the
         # manifest
         self.filelist = FileList()
@@ -148,8 +145,7 @@
         # or zipfile, or whatever.
         self.make_distribution()
 
-
-    def check_metadata (self):
+    def check_metadata(self):
         """Ensure that all required elements of meta-data (name, version,
         URL, (author and author_email) or (maintainer and
         maintainer_email)) are supplied by the Distribution object; warn if
@@ -179,17 +175,13 @@
                       "or (maintainer and maintainer_email) " +
                       "must be supplied")
 
-    # check_metadata ()
-
-
-    def get_file_list (self):
+    def get_file_list(self):
         """Figure out the list of files to include in the source
         distribution, and put it in 'self.filelist'.  This might involve
         reading the manifest template (and writing the manifest), or just
         reading the manifest, or just using the default file set -- it all
         depends on the user's options and the state of the filesystem.
         """
-
         # If we have a manifest template, see if it's newer than the
         # manifest; if so, we'll regenerate the manifest.
         template_exists = os.path.isfile(self.template)
@@ -249,10 +241,7 @@
         else:
             self.read_manifest()
 
-    # get_file_list ()
-
-
-    def add_defaults (self):
+    def add_defaults(self):
         """Add all the default files to self.filelist:
           - README or README.txt
           - setup.py
@@ -334,10 +323,7 @@
             build_scripts = self.get_finalized_command('build_scripts')
             self.filelist.extend(build_scripts.get_source_files())
 
-    # add_defaults ()
-
-
-    def read_template (self):
+    def read_template(self):
         """Read and parse manifest template file named by self.template.
 
         (usually "MANIFEST.in") The parsing and processing is done by
@@ -364,10 +350,7 @@
                                                template.current_line,
                                                msg))
 
-    # read_template ()
-
-
-    def prune_file_list (self):
+    def prune_file_list(self):
         """Prune off branches that might slip into the file list as created
         by 'read_template()', but really don't belong there:
           * the build tree (typically "build")
@@ -393,7 +376,7 @@
         vcs_ptrn = r'(^|%s)(%s)(%s).*' % (seps, '|'.join(vcs_dirs), seps)
         self.filelist.exclude_pattern(vcs_ptrn, is_regex=1)
 
-    def write_manifest (self):
+    def write_manifest(self):
         """Write the file list in 'self.filelist' (presumably as filled in
         by 'add_defaults()' and 'read_template()') to the manifest file
         named by 'self.manifest'.
@@ -402,10 +385,7 @@
                      (self.manifest, self.filelist.files),
                      "writing manifest file '%s'" % self.manifest)
 
-    # write_manifest ()
-
-
-    def read_manifest (self):
+    def read_manifest(self):
         """Read the manifest file (named by 'self.manifest') and use it to
         fill in 'self.filelist', the list of files to include in the source
         distribution.
@@ -421,10 +401,7 @@
             self.filelist.append(line)
         manifest.close()
 
-    # read_manifest ()
-
-
-    def make_release_tree (self, base_dir, files):
+    def make_release_tree(self, base_dir, files):
         """Create the directory tree that will become the source
         distribution archive.  All directories implied by the filenames in
         'files' are created under 'base_dir', and then we hard link or copy
@@ -466,9 +443,7 @@
 
         self.distribution.metadata.write_pkg_info(base_dir)
 
-    # make_release_tree ()
-
-    def make_distribution (self):
+    def make_distribution(self):
         """Create the source distribution(s).  First, we create the release
         tree with 'make_release_tree()'; then, we create all required
         archive files (according to 'self.formats') from the release tree.
@@ -497,10 +472,8 @@
         if not self.keep_temp:
             dir_util.remove_tree(base_dir, dry_run=self.dry_run)
 
-    def get_archive_files (self):
+    def get_archive_files(self):
         """Return the list of archive files created when the command
         was run, or None if the command hasn't run yet.
         """
         return self.archive_files
-
-# class sdist
diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
index 551357e..4f3d4bb 100644
--- a/Lib/distutils/tests/test_sdist.py
+++ b/Lib/distutils/tests/test_sdist.py
@@ -13,7 +13,7 @@
 from distutils.command.sdist import show_formats
 from distutils.core import Distribution
 from distutils.tests.test_config import PyPIRCCommandTestCase
-from distutils.errors import DistutilsExecError
+from distutils.errors import DistutilsExecError, DistutilsOptionError
 from distutils.spawn import find_executable
 from distutils.tests import support
 from distutils.archive_util import ARCHIVE_FORMATS
@@ -224,6 +224,28 @@
                   if line.strip().startswith('--formats=')]
         self.assertEquals(len(output), num_formats)
 
+    def test_finalize_options(self):
+
+        dist, cmd = self.get_cmd()
+        cmd.finalize_options()
+
+        # default options set by finalize
+        self.assertEquals(cmd.manifest, 'MANIFEST')
+        self.assertEquals(cmd.template, 'MANIFEST.in')
+        self.assertEquals(cmd.dist_dir, 'dist')
+
+        # formats has to be a string splitable on (' ', ',') or
+        # a stringlist
+        cmd.formats = 1
+        self.assertRaises(DistutilsOptionError, cmd.finalize_options)
+        cmd.formats = ['zip']
+        cmd.finalize_options()
+
+        # formats has to be known
+        cmd.formats = 'supazipa'
+        self.assertRaises(DistutilsOptionError, cmd.finalize_options)
+
+
 def test_suite():
     return unittest.makeSuite(sdistTestCase)
 
