Fixes issue 123.
diff --git a/python2/httplib2/__init__.py b/python2/httplib2/__init__.py
index 81e9f93..00c6250 100644
--- a/python2/httplib2/__init__.py
+++ b/python2/httplib2/__init__.py
@@ -987,7 +987,9 @@
                         old_response = copy.deepcopy(response)
                         if not old_response.has_key('content-location'):
                             old_response['content-location'] = absolute_uri
-                        redirect_method = ((response.status == 303) and (method not in ["GET", "HEAD"])) and "GET" or method
+                        redirect_method = method
+                        if response.status == 303:
+                            redirect_method = "GET"
                         (response, content) = self.request(location, redirect_method, body=body, headers = headers, redirections = redirections - 1)
                         response.previous = old_response
                 else:
diff --git a/python2/httplib2test.py b/python2/httplib2test.py
index 3dcfe03..ed04799 100755
--- a/python2/httplib2test.py
+++ b/python2/httplib2test.py
@@ -26,6 +26,7 @@
 import unittest
 import urlparse
 
+
 # Python 2.3 support
 if not hasattr(unittest.TestCase, 'assertTrue'):
     unittest.TestCase.assertTrue = unittest.TestCase.failUnless
@@ -333,6 +334,14 @@
         self.assertEqual(response.previous.status, 301)
         self.assertEqual(response.previous.fromcache, True)
 
+    def testHead301(self):
+        # Test that we automatically follow 301 redirects
+        uri = urlparse.urljoin(base, "301/onestep.asis")
+        destination = urlparse.urljoin(base, "302/final-destination.txt")
+        (response, content) = self.http.request(uri, "HEAD")
+        self.assertEqual(response.status, 200)
+        self.assertEqual(response.previous.status, 301)
+        self.assertEqual(response.previous.fromcache, False)
 
     def testGet301NoRedirect(self):
         # Test that we automatically follow 301 redirects