diff --git a/Lib/configparser.py b/Lib/configparser.py
index eb29b02..fb39ac3 100644
--- a/Lib/configparser.py
+++ b/Lib/configparser.py
@@ -637,7 +637,7 @@
         for key, value in section_items:
             if key == "__name__":
                 continue
-            if value is not None:
+            if (value is not None) or (self._optcre == self.OPTCRE):
                 value = delimiter + str(value).replace('\n', '\n\t')
             else:
                 value = ""
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index f43d1d7..a20678d 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -755,6 +755,34 @@
         with self.assertRaises(UnicodeDecodeError):
             cf.read(tricky, encoding='ascii')
 
+
+class Issue7005TestCase(unittest.TestCase):
+    """Test output when None is set() as a value and allow_no_value == False.
+
+    http://bugs.python.org/issue7005
+
+    """
+
+    expected_output = "[section]\noption = None\n\n"
+
+    def prepare(self, config_class):
+        # This is the default, but that's the point.
+        cp = config_class(allow_no_value=False)
+        cp.add_section("section")
+        cp.set("section", "option", None)
+        sio = io.StringIO()
+        cp.write(sio)
+        return sio.getvalue()
+
+    def test_none_as_value_stringified(self):
+        output = self.prepare(configparser.ConfigParser)
+        self.assertEqual(output, self.expected_output)
+
+    def test_none_as_value_stringified_raw(self):
+        output = self.prepare(configparser.RawConfigParser)
+        self.assertEqual(output, self.expected_output)
+
+
 class SortedTestCase(RawConfigParserTestCase):
     dict_type = SortedDict
 
@@ -811,6 +839,7 @@
         SafeConfigParserTestCaseNoValue,
         SafeConfigParserTestCaseTrickyFile,
         SortedTestCase,
+        Issue7005TestCase,
         StrictTestCase,
         CompatibleTestCase,
         )
