diff --git a/Lib/distutils/command/sdist.py b/Lib/distutils/command/sdist.py
index 27883fd6..a366d1e 100644
--- a/Lib/distutils/command/sdist.py
+++ b/Lib/distutils/command/sdist.py
@@ -458,6 +458,10 @@
 
         self.make_release_tree(base_dir, self.filelist.files)
         archive_files = []              # remember names of files we create
+        # tar archive must be created last to avoid overwrite and remove
+        if 'tar' in self.formats:
+            self.formats.append(self.formats.pop(self.formats.index('tar')))
+
         for fmt in self.formats:
             file = self.make_archive(base_name, fmt, base_dir=base_dir)
             archive_files.append(file)
diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
index 7cc04cf..96ec381 100644
--- a/Lib/distutils/tests/test_sdist.py
+++ b/Lib/distutils/tests/test_sdist.py
@@ -4,10 +4,13 @@
 import shutil
 import zipfile
 from os.path import join
+import sys
 
 from distutils.command.sdist import sdist
 from distutils.core import Distribution
 from distutils.tests.test_config import PyPIRCCommandTestCase
+from distutils.errors import DistutilsExecError
+from distutils.spawn import spawn
 
 CURDIR = os.path.dirname(__file__)
 TEMP_PKG = join(CURDIR, 'temppkg')
@@ -35,6 +38,19 @@
             shutil.rmtree(TEMP_PKG)
         PyPIRCCommandTestCase.tearDown(self)
 
+    def _init_tmp_pkg(self):
+        if os.path.exists(TEMP_PKG):
+            shutil.rmtree(TEMP_PKG)
+        os.mkdir(TEMP_PKG)
+        os.mkdir(join(TEMP_PKG, 'somecode'))
+        os.mkdir(join(TEMP_PKG, 'dist'))
+        # creating a MANIFEST, a package, and a README
+        self._write(join(TEMP_PKG, 'MANIFEST.in'), MANIFEST_IN)
+        self._write(join(TEMP_PKG, 'README'), 'xxx')
+        self._write(join(TEMP_PKG, 'somecode', '__init__.py'), '#')
+        self._write(join(TEMP_PKG, 'setup.py'), SETUP_PY)
+        os.chdir(TEMP_PKG)
+
     def _write(self, path, content):
         f = open(path, 'w')
         try:
@@ -46,15 +62,7 @@
         # this test creates a package with some vcs dirs in it
         # and launch sdist to make sure they get pruned
         # on all systems
-        if not os.path.exists(TEMP_PKG):
-            os.mkdir(TEMP_PKG)
-        os.mkdir(join(TEMP_PKG, 'somecode'))
-
-        # creating a MANIFEST, a package, and a README
-        self._write(join(TEMP_PKG, 'MANIFEST.in'), MANIFEST_IN)
-        self._write(join(TEMP_PKG, 'README'), 'xxx')
-        self._write(join(TEMP_PKG, 'somecode', '__init__.py'), '#')
-        self._write(join(TEMP_PKG, 'setup.py'), SETUP_PY)
+        self._init_tmp_pkg()
 
         # creating VCS directories with some files in them
         os.mkdir(join(TEMP_PKG, 'somecode', '.svn'))
@@ -68,8 +76,6 @@
         self._write(join(TEMP_PKG, 'somecode', '.git',
                          'ok'), 'xxx')
 
-        os.chdir(TEMP_PKG)
-
         # now building a sdist
         dist = Distribution()
         dist.script_name = 'setup.py'
@@ -103,6 +109,55 @@
         # making sure everything has been pruned correctly
         self.assertEquals(len(content), 4)
 
+    def test_make_distribution(self):
+
+        self._init_tmp_pkg()
+
+        # check if tar is installed under win32
+        if sys.platform == 'win32':
+            try:
+                spawn('tar --help')
+            except DistutilsExecError:
+                # let's return, no need to go further
+                return
+
+        # now building a sdist
+        dist = Distribution()
+        dist.script_name = 'setup.py'
+        dist.metadata.name = 'fake'
+        dist.metadata.version = '1.0'
+        dist.metadata.url = 'http://xxx'
+        dist.metadata.author = dist.metadata.author_email = 'xxx'
+        dist.packages = ['somecode']
+        dist.include_package_data = True
+        cmd = sdist(dist)
+        cmd.manifest = 'MANIFEST'
+        cmd.template = 'MANIFEST.in'
+        cmd.dist_dir = 'dist'
+
+        # creating a gztar then a tar
+        cmd.formats = ['gztar', 'tar']
+        cmd.run()
+
+        # making sure we have two files
+        dist_folder = join(TEMP_PKG, 'dist')
+        result = os.listdir(dist_folder)
+        result.sort()
+        self.assertEquals(result,
+                          ['fake-1.0.tar', 'fake-1.0.tar.gz'] )
+
+        os.remove(join(dist_folder, 'fake-1.0.tar'))
+        os.remove(join(dist_folder, 'fake-1.0.tar.gz'))
+
+        # now trying a tar then a gztar
+        cmd.formats = ['tar', 'gztar']
+        cmd.run()
+
+        result = os.listdir(dist_folder)
+        result.sort()
+        self.assertEquals(result,
+                ['fake-1.0.tar', 'fake-1.0.tar.gz'])
+
 def test_suite():
     return unittest.makeSuite(sdistTestCase)
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 237fb50..431a3e0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -194,6 +194,9 @@
 Library
 -------
 
+- Issue #1885: distutils. When running sdist with --formats=tar,gztar
+  the tar file was overriden by the gztar one.
+
 - Issue #1672332: fix unpickling of subnormal floats, which was
   producing a ValueError on some platforms.
 
