diff --git a/Lib/os.py b/Lib/os.py
index d3b9a8d..b967978 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -442,6 +442,17 @@
                 return key.upper() in self.data
             def get(self, key, failobj=None):
                 return self.data.get(key.upper(), failobj)
+            def update(self, dict=None, **kwargs):
+                if dict:
+                    try:
+                        items = dict.items()
+                    except AttributeError:
+                        # List of (key, value)
+                        items = dict
+                    for k, v in items:
+                        self[k] = v
+                if kwargs:
+                    self.update(kwargs)
             def copy(self):
                 return dict(self)
 
@@ -453,6 +464,17 @@
             def __setitem__(self, key, item):
                 putenv(key, item)
                 self.data[key] = item
+            def update(self,  dict=None, **kwargs):
+                if dict:
+                    try:
+                        items = dict.items()
+                    except AttributeError:
+                        # List of (key, value)
+                        items = dict
+                    for k, v in items:
+                        self[k] = v
+                if kwargs:
+                    self.update(kwargs)
             try:
                 unsetenv
             except NameError:
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 472d13f..cce6926 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -226,6 +226,13 @@
         os.environ.clear()
         os.environ.update(self.__save)
 
+    # Bug 1110478
+    def test_update(self):
+        if os.path.exists("/bin/sh"):
+            os.environ.update(HELLO="World")
+            value = os.popen("/bin/sh -c 'echo $HELLO'").read().strip()
+            self.assertEquals(value, "World")
+
 class WalkTests(unittest.TestCase):
     """Tests for os.walk()."""
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 1d919aa..92d9422 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -45,6 +45,8 @@
 Library
 -------
 
+- Bug #1110478: Revert os.environ.update to do putenv again.
+
 - Bug #1103844: fix distutils.install.dump_dirs() with negated options.
 
 - os.{SEEK_SET, SEEK_CUR, SEEK_END} have been added for convenience.
