diff --git a/LICENSE b/LICENSE
index 0fd73eb..261eeb9 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,201 @@
- Copyright 2014 Google Inc.
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
 
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 
-      http://www.apache.org/licenses/LICENSE-2.0
+   1. Definitions.
 
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
 
-Dependent Modules
-=================
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
 
-This code has the following dependencies
-above and beyond the Python standard library:
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
 
-httplib2 - MIT License
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/httplib2_transport/.coveragerc b/httplib2_transport/.coveragerc
new file mode 100644
index 0000000..c44dd8e
--- /dev/null
+++ b/httplib2_transport/.coveragerc
@@ -0,0 +1,13 @@
+[run]
+branch = True
+
+[report]
+omit =
+    */conftest.py
+exclude_lines =
+    # Re-enable the standard pragma
+    pragma: NO COVER
+    # Ignore debug-only repr
+    def __repr__
+    # Don't complain if tests don't hit defensive assertion code:
+    raise NotImplementedError
diff --git a/httplib2_transport/LICENSE b/httplib2_transport/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/httplib2_transport/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/httplib2_transport/README.rst b/httplib2_transport/README.rst
new file mode 100644
index 0000000..09405ae
--- /dev/null
+++ b/httplib2_transport/README.rst
@@ -0,0 +1,33 @@
+Httplib2 Transport for Google Auth
+==================================
+
+|pypi|
+
+This library provides an `httplib2`_ transport for `google-auth`_.
+
+.. note:: ``httplib`` has lots of problems such as lack of threadsafety and
+    and insecure usage of TLS. Using it is highly discouraged. This
+    library is intended to help existing users of ``oauth2client`` migrate to
+    ``google-auth``.
+
+.. |pypi| image:: https://img.shields.io/pypi/v/google-auth-httplib2.svg
+   :target: https://pypi.python.org/pypi/google-auth-httplib2
+
+.. _httplib2: https://github.com/httplib2/httplib2
+.. _google-auth: https://github.com/GoogleCloudPlatform/google-auth
+
+Installing
+----------
+
+You can install using `pip`_::
+
+    $ pip install google-auth-httlib2
+
+.. _pip: https://pip.pypa.io/en/stable/
+
+License
+-------
+
+Apache 2.0 - See `the LICENSE`_ for more information.
+
+.. _the LICENSE: https://github.com/GoogleCloudPlatform/google-auth-library-python/blob/master/LICENSE
diff --git a/httplib2_transport/google_auth_httplib2.py b/httplib2_transport/google_auth_httplib2.py
new file mode 100644
index 0000000..598ccb3
--- /dev/null
+++ b/httplib2_transport/google_auth_httplib2.py
@@ -0,0 +1,225 @@
+# Copyright 2016 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Transport adapter for httplib2."""
+
+from __future__ import absolute_import
+
+import logging
+
+from google.auth import exceptions
+from google.auth import transport
+import httplib2
+
+
+_LOGGER = logging.getLogger(__name__)
+# Properties present in file-like streams / buffers.
+_STREAM_PROPERTIES = ('read', 'seek', 'tell')
+
+
+class _Response(transport.Response):
+    """httplib2 transport response adapter.
+
+    Args:
+        response (httplib2.Response): The raw httplib2 response.
+        data (bytes): The response body.
+    """
+    def __init__(self, response, data):
+        self._response = response
+        self._data = data
+
+    @property
+    def status(self):
+        """int: The HTTP status code."""
+        return self._response.status
+
+    @property
+    def headers(self):
+        """Mapping[str, str]: The HTTP response headers."""
+        return dict(self._response)
+
+    @property
+    def data(self):
+        """bytes: The response body."""
+        return self._data
+
+
+class Request(transport.Request):
+    """httplib2 request adapter.
+
+    This class is used internally for making requests using various transports
+    in a consistent way. If you use :class:`AuthorizedHttp` you do not need
+    to construct or use this class directly.
+
+    This class can be useful if you want to manually refresh a
+    :class:`~google.auth.credentials.Credentials` instance::
+
+        import google.auth.transport.httplib2
+        import httplib2
+
+        http = httplib2.Http()
+        request = google.auth.transport.httplib2.Request(http)
+
+        credentials.refresh(request)
+
+    Args:
+        http (httplib2.Http): The underlying http object to use to make
+            requests.
+
+    .. automethod:: __call__
+    """
+    def __init__(self, http):
+        self.http = http
+
+    def __call__(self, url, method='GET', body=None, headers=None,
+                 timeout=None, **kwargs):
+        """Make an HTTP request using httplib2.
+
+        Args:
+            url (str): The URI to be requested.
+            method (str): The HTTP method to use for the request. Defaults
+                to 'GET'.
+            body (bytes): The payload / body in HTTP request.
+            headers (Mapping[str, str]): Request headers.
+            timeout (Optional[int]): The number of seconds to wait for a
+                response from the server. This is ignored by httplib2 and will
+                issue a warning.
+            kwargs: Additional arguments passed throught to the underlying
+                :meth:`httplib2.Http.request` method.
+
+        Returns:
+            google.auth.transport.Response: The HTTP response.
+
+        Raises:
+            google.auth.exceptions.TransportError: If any exception occurred.
+        """
+        if timeout is not None:
+            _LOGGER.warning(
+                'httplib2 transport does not support per-request timeout. '
+                'Set the timeout when constructing the httplib2.Http instance.'
+            )
+
+        try:
+            _LOGGER.debug('Making request: %s %s', method, url)
+            response, data = self.http.request(
+                url, method=method, body=body, headers=headers, **kwargs)
+            return _Response(response, data)
+        except httplib2.HttpLib2Error as exc:
+            raise exceptions.TransportError(exc)
+
+
+def _make_default_http():
+    """Returns a default httplib2.Http instance."""
+    return httplib2.Http()
+
+
+class AuthorizedHttp(object):
+    """A httplib2 HTTP class with credentials.
+
+    This class is used to perform requests to API endpoints that require
+    authorization::
+
+        from google.auth.transport._httplib2 import AuthorizedHttp
+
+        authed_http = AuthorizedHttp(credentials)
+
+        response = authed_http.request(
+            'https://www.googleapis.com/storage/v1/b')
+
+    This class implements :meth:`request` in the same way as
+    :class:`httplib2.Http` and can usually be used just like any other
+    instance of :class:``httplib2.Http`.
+
+    The underlying :meth:`request` implementation handles adding the
+    credentials' headers to the request and refreshing credentials as needed.
+    """
+    def __init__(self, credentials, http=None,
+                 refresh_status_codes=transport.DEFAULT_REFRESH_STATUS_CODES,
+                 max_refresh_attempts=transport.DEFAULT_MAX_REFRESH_ATTEMPTS):
+        """
+        Args:
+            credentials (google.auth.credentials.Credentials): The credentials
+                to add to the request.
+            http (httplib2.Http): The underlying HTTP object to
+                use to make requests. If not specified, a
+                :class:`httplib2.Http` instance will be constructed.
+            refresh_status_codes (Sequence[int]): Which HTTP status codes
+                indicate that credentials should be refreshed and the request
+                should be retried.
+            max_refresh_attempts (int): The maximum number of times to attempt
+                to refresh the credentials and retry the request.
+        """
+
+        if http is None:
+            http = _make_default_http()
+
+        self.http = http
+        self.credentials = credentials
+        self._refresh_status_codes = refresh_status_codes
+        self._max_refresh_attempts = max_refresh_attempts
+        # Request instance used by internal methods (for example,
+        # credentials.refresh).
+        self._request = Request(self.http)
+
+    def request(self, uri, method='GET', body=None, headers=None,
+                **kwargs):
+        """Implementation of httplib2's Http.request."""
+
+        _credential_refresh_attempt = kwargs.pop(
+            '_credential_refresh_attempt', 0)
+
+        # Make a copy of the headers. They will be modified by the credentials
+        # and we want to pass the original headers if we recurse.
+        request_headers = headers.copy() if headers is not None else {}
+
+        self.credentials.before_request(
+            self._request, method, uri, request_headers)
+
+        # Check if the body is a file-like stream, and if so, save the body
+        # stream position so that it can be restored in case of refresh.
+        body_stream_position = None
+        if all(getattr(body, stream_prop, None) for stream_prop in
+               _STREAM_PROPERTIES):
+            body_stream_position = body.tell()
+
+        # Make the request.
+        response, content = self.http.request(
+            uri, method, body=body, headers=request_headers, **kwargs)
+
+        # If the response indicated that the credentials needed to be
+        # refreshed, then refresh the credentials and re-attempt the
+        # request.
+        # A stored token may expire between the time it is retrieved and
+        # the time the request is made, so we may need to try twice.
+        if (response.status in self._refresh_status_codes
+                and _credential_refresh_attempt < self._max_refresh_attempts):
+
+            _LOGGER.info(
+                'Refreshing credentials due to a %s response. Attempt %s/%s.',
+                response.status, _credential_refresh_attempt + 1,
+                self._max_refresh_attempts)
+
+            self.credentials.refresh(self._request)
+
+            # Restore the body's stream position if needed.
+            if body_stream_position is not None:
+                body.seek(body_stream_position)
+
+            # Recurse. Pass in the original headers, not our modified set.
+            return self.request(
+                uri, method, body=body, headers=headers,
+                _credential_refresh_attempt=_credential_refresh_attempt + 1,
+                **kwargs)
+
+        return response, content
diff --git a/httplib2_transport/pylintrc b/httplib2_transport/pylintrc
new file mode 100644
index 0000000..1f01cfa
--- /dev/null
+++ b/httplib2_transport/pylintrc
@@ -0,0 +1,165 @@
+[MASTER]
+# Add files or directories to the blacklist. They should be base names, not
+# paths.
+ignore=CVS,.git,.cache,.tox,.nox
+
+# List of plugins (as comma separated values of python modules names) to load,
+# usually to register additional checkers.
+# DEFAULT:  load-plugins=
+# RATIONALE: We want to make sure our docstrings match the objects
+#            they document.
+load-plugins=pylint.extensions.check_docs
+
+[MESSAGES CONTROL]
+# Disable the message, report, category or checker with the given id(s). You
+# can either give multiple identifiers separated by comma (,) or put this
+# option multiple times (only on the command line, not in the configuration
+# file where it should appear only once).You can also use "--disable=all" to
+# disable everything first and then reenable specific checks. For example, if
+# you want to run only the similarities checker, you can use "--disable=all
+# --enable=similarities". If you want to run only the classes checker, but have
+# no Warning level messages displayed, use"--disable=all --enable=classes
+# --disable=W"
+#
+# RATIONALE:
+# - maybe-no-member:  bi-modal functions confuse pylint type inference.
+# - no-member:  indirections in protobuf-generated code
+# - protected-access: helpers use '_foo' of classes from generated code.
+# - similarities:  'Bucket' and 'Blob' define 'metageneration' and 'owner' with
+#                  identical implementation but different docstrings.
+# - star-args:  standard Python idioms for varargs:
+#                  ancestor = Query().filter(*order_props)
+# - redefined-variable-type: This error is overzealous and complains at e.g.
+#                      if some_prop:
+#                          return int(value)
+#                      else:
+#                          return float(value)
+# - import-error: imports are checked via tests.
+# - wrong-import-position: This error is overzealous. It assumes imports are
+#                          completed whenever something non-trivial is
+#                          defined, e.g.
+#                              try:
+#                                  from foo import Bar
+#                              except ImportError:
+#                                  class Bar(object):
+#                                      """Hi everyone"""
+#                          and thus causes subsequent imports to be
+#                          diagnosed as out-of-order.
+# - no-name-in-module: Error gives a lot of false positives for names which
+#                      are defined dynamically. Also, any truly missing names
+#                      will be detected by our 100% code coverage.
+# - locally-disabled: Allow us to make exceptions in edge cases, notably where
+#                     pylint doesn't recognize inherited properties and methods
+#                     and gives unused-argument errors.
+# TEMPORARILY DISABLE AND SHOULD BE REMOVED:
+# - fixme: disabled until 1.0
+#
+disable =
+    import-star-module-level,
+    old-octal-literal,
+    oct-method,
+    print-statement,
+    unpacking-in-except,
+    parameter-unpacking,
+    backtick,
+    old-raise-syntax,
+    old-ne-operator,
+    long-suffix,
+    dict-view-method,
+    dict-iter-method,
+    metaclass-assignment,
+    next-method-called,
+    raising-string,
+    indexing-exception,
+    raw_input-builtin,
+    long-builtin,
+    file-builtin,
+    execfile-builtin,
+    coerce-builtin,
+    cmp-builtin,
+    buffer-builtin,
+    basestring-builtin,
+    apply-builtin,
+    filter-builtin-not-iterating,
+    using-cmp-argument,
+    useless-suppression,
+    range-builtin-not-iterating,
+    suppressed-message,
+    no-absolute-import,
+    old-division,
+    cmp-method,
+    reload-builtin,
+    zip-builtin-not-iterating,
+    intern-builtin,
+    unichr-builtin,
+    reduce-builtin,
+    standarderror-builtin,
+    unicode-builtin,
+    xrange-builtin,
+    coerce-method,
+    delslice-method,
+    getslice-method,
+    setslice-method,
+    input-builtin,
+    round-builtin,
+    hex-method,
+    nonzero-method,
+    map-builtin-not-iterating,
+    maybe-no-member,
+    no-member,
+    protected-access,
+    similarities,
+    star-args,
+    redefined-variable-type,
+    import-error,
+    wrong-import-position,
+    no-name-in-module,
+    locally-disabled,
+    locally-enabled,
+    fixme
+
+
+[REPORTS]
+# Tells whether to display a full report or only the messages
+# RATIONALE: noisy
+reports=no
+
+[BASIC]
+# Regular expression matching correct method names
+# DEFAULT:  method-rgx=[a-z_][a-z0-9_]{2,30}$
+# RATIONALE:  Some methods have longer names to be more descriptive or precise,
+# especially those that implemented wordy RFCs.
+method-rgx=[a-z_][a-z0-9_]{2,40}$
+
+# Regular expression matching correct function names
+# DEFAULT function-rgx=[a-z_][a-z0-9_]{2,30}$
+# RATIONALE:  Some methods have longer names to be more descriptive or precise,
+# especially those that implemented wordy RFCs.
+function-rgx=[a-z_][a-z0-9_]{2,40}$
+
+[TYPECHECK]
+# List of module names for which member attributes should not be checked
+# (useful for modules/projects where namespaces are manipulated during runtime
+# and thus existing member attributes cannot be deduced by static analysis. It
+# supports qualified module names, as well as Unix pattern matching.
+# DEFAULT:  ignored-modules=
+# RATIONALE:  six aliases stuff for compatibility.
+#             google.protobuf fixes up namespace package "late".
+ignored-modules = six, google.protobuf
+
+
+[DESIGN]
+# Minimum number of public methods for a class (see R0903).
+# DEFAULT:  min-public-methods=2
+# RATIONALE:  context mgrs may have *no* public methods
+min-public-methods=0
+
+# Maximum number of arguments for function / method
+# DEFAULT:  max-args=5
+# RATIONALE:  Many credentials classes take a lot of parameters.
+max-args = 10
+
+# Maximum number of attributes for a class (see R0902).
+# DEFAULT:  max-attributes=7
+# RATIONALE:  Many credentials need to track lots of properties.
+max-attributes=15
diff --git a/httplib2_transport/pylintrc.tests b/httplib2_transport/pylintrc.tests
new file mode 100644
index 0000000..09772c5
--- /dev/null
+++ b/httplib2_transport/pylintrc.tests
@@ -0,0 +1,166 @@
+[MASTER]
+# Add files or directories to the blacklist. They should be base names, not
+# paths.
+ignore=CVS,.git,.cache,.tox,.nox
+
+[MESSAGES CONTROL]
+# Disable the message, report, category or checker with the given id(s). You
+# can either give multiple identifiers separated by comma (,) or put this
+# option multiple times (only on the command line, not in the configuration
+# file where it should appear only once).You can also use "--disable=all" to
+# disable everything first and then reenable specific checks. For example, if
+# you want to run only the similarities checker, you can use "--disable=all
+# --enable=similarities". If you want to run only the classes checker, but have
+# no Warning level messages displayed, use"--disable=all --enable=classes
+# --disable=W"
+#
+# RATIONALE:
+# - maybe-no-member:  bi-modal functions confuse pylint type inference.
+# - no-member:  indirections in protobuf-generated code
+# - protected-access: helpers use '_foo' of classes from generated code.
+# - similarities:  'Bucket' and 'Blob' define 'metageneration' and 'owner' with
+#                  identical implementation but different docstrings.
+# - star-args:  standard Python idioms for varargs:
+#                  ancestor = Query().filter(*order_props)
+# - redefined-variable-type: This error is overzealous and complains at e.g.
+#                      if some_prop:
+#                          return int(value)
+#                      else:
+#                          return float(value)
+# - import-error: imports are checked via tests.
+# - wrong-import-position: This error is overzealous. It assumes imports are
+#                          completed whenever something non-trivial is
+#                          defined, e.g.
+#                              try:
+#                                  from foo import Bar
+#                              except ImportError:
+#                                  class Bar(object):
+#                                      """Hi everyone"""
+#                          and thus causes subsequent imports to be
+#                          diagnosed as out-of-order.
+# - no-name-in-module: Error gives a lot of false positives for names which
+#                      are defined dynamically. Also, any truly missing names
+#                      will be detected by our 100% code coverage.
+# - locally-disabled: Allow us to make exceptions in edge cases, notably where
+#                     pylint doesn't recognize inherited properties and methods
+#                     and gives unused-argument errors.
+disable =
+    import-star-module-level,
+    old-octal-literal,
+    oct-method,
+    print-statement,
+    unpacking-in-except,
+    parameter-unpacking,
+    backtick,
+    old-raise-syntax,
+    old-ne-operator,
+    long-suffix,
+    dict-view-method,
+    dict-iter-method,
+    metaclass-assignment,
+    next-method-called,
+    raising-string,
+    indexing-exception,
+    raw_input-builtin,
+    long-builtin,
+    file-builtin,
+    execfile-builtin,
+    coerce-builtin,
+    cmp-builtin,
+    buffer-builtin,
+    basestring-builtin,
+    apply-builtin,
+    filter-builtin-not-iterating,
+    using-cmp-argument,
+    useless-suppression,
+    range-builtin-not-iterating,
+    suppressed-message,
+    no-absolute-import,
+    old-division,
+    cmp-method,
+    reload-builtin,
+    zip-builtin-not-iterating,
+    intern-builtin,
+    unichr-builtin,
+    reduce-builtin,
+    standarderror-builtin,
+    unicode-builtin,
+    xrange-builtin,
+    coerce-method,
+    delslice-method,
+    getslice-method,
+    setslice-method,
+    input-builtin,
+    round-builtin,
+    hex-method,
+    nonzero-method,
+    map-builtin-not-iterating,
+    maybe-no-member,
+    no-member,
+    protected-access,
+    similarities,
+    star-args,
+    redefined-variable-type,
+    import-error,
+    wrong-import-position,
+    no-name-in-module,
+    locally-disabled,
+    locally-enabled,
+    missing-docstring,
+    redefined-outer-name,
+    no-self-use,
+    too-many-locals,
+    too-many-public-methods,
+    abstract-method,
+    method-hidden,
+    unused-argument
+
+
+[REPORTS]
+# Tells whether to display a full report or only the messages
+# RATIONALE: noisy
+reports=no
+
+[BASIC]
+# Good variable names which should always be accepted, separated by a comma
+# DEFAULT:  good-names=i,j,k,ex,Run,_
+# RATIONALE:  'fh' is a well-known file handle variable name.
+good-names = i, j, k, ex, Run, _,
+             fh
+
+# Regular expression matching correct method names
+# DEFAULT:  method-rgx=[a-z_][a-z0-9_]{2,30}$
+# RATIONALE:  Some methods have longer names to be precise against wordy RFCs.
+method-rgx=[a-z_][a-z0-9_]{2,80}$
+
+# Regular expression matching correct function names
+# DEFAULT function-rgx=[a-z_][a-z0-9_]{2,30}$
+# RATIONALE:  Some test methods have long descriptive names.
+function-rgx=[a-z_][a-z0-9_]{2,80}$
+
+[TYPECHECK]
+# List of module names for which member attributes should not be checked
+# (useful for modules/projects where namespaces are manipulated during runtime
+# and thus existing member attributes cannot be deduced by static analysis. It
+# supports qualified module names, as well as Unix pattern matching.
+# DEFAULT:  ignored-modules=
+# RATIONALE:  six aliases stuff for compatibility.
+#             google.protobuf fixes up namespace package "late".
+ignored-modules = six, google.protobuf
+
+
+[DESIGN]
+# Minimum number of public methods for a class (see R0903).
+# DEFAULT:  min-public-methods=2
+# RATIONALE:  context mgrs may have *no* public methods
+min-public-methods=0
+
+# Maximum number of arguments for function / method
+# DEFAULT:  max-args=5
+# RATIONALE:  Many credentials classes take a lot of parameters.
+max-args = 10
+
+# Maximum number of attributes for a class (see R0902).
+# DEFAULT:  max-attributes=7
+# RATIONALE:  Many credentials need to track lots of properties.
+max-attributes=15
diff --git a/httplib2_transport/setup.cfg b/httplib2_transport/setup.cfg
new file mode 100644
index 0000000..2a9acf1
--- /dev/null
+++ b/httplib2_transport/setup.cfg
@@ -0,0 +1,2 @@
+[bdist_wheel]
+universal = 1
diff --git a/httplib2_transport/setup.py b/httplib2_transport/setup.py
new file mode 100644
index 0000000..110cce8
--- /dev/null
+++ b/httplib2_transport/setup.py
@@ -0,0 +1,58 @@
+# Copyright 2014 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from setuptools import setup
+
+
+DEPENDENCIES = (
+    'pyasn1>=0.1.7',
+    'pyasn1-modules>=0.0.5',
+    'rsa>=3.1.4',
+    'six>=1.9.0',
+    'google-auth'
+)
+
+
+with open('README.rst', 'r') as fh:
+    long_description = fh.read()
+
+
+setup(
+    name='google-auth-httplib2',
+    version='0.0.1',
+    author='Google Cloud Platform',
+    author_email='jonwayne+google-auth@google.com',
+    description='Google Authentication Library',
+    long_description=long_description,
+    url='https://github.com/GoogleCloudPlatform/google-auth-library-python',
+    py_modules=['google_auth_httplib2'],
+    install_requires=DEPENDENCIES,
+    license='Apache 2.0',
+    keywords='google auth oauth client',
+    classifiers=(
+        'Programming Language :: Python :: 2',
+        'Programming Language :: Python :: 2.7',
+        'Programming Language :: Python :: 3',
+        'Programming Language :: Python :: 3.4',
+        'Programming Language :: Python :: 3.5',
+        'Development Status :: 3 - Alpha',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: Apache Software License',
+        'Operating System :: POSIX',
+        'Operating System :: Microsoft :: Windows',
+        'Operating System :: MacOS :: MacOS X',
+        'Operating System :: OS Independent',
+        'Topic :: Internet :: WWW/HTTP',
+    ),
+)
diff --git a/httplib2_transport/tests/__init__.py b/httplib2_transport/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/httplib2_transport/tests/__init__.py
diff --git a/httplib2_transport/tests/compliance.py b/httplib2_transport/tests/compliance.py
new file mode 100644
index 0000000..a97a11b
--- /dev/null
+++ b/httplib2_transport/tests/compliance.py
@@ -0,0 +1,92 @@
+# Copyright 2016 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import flask
+from google.auth import exceptions
+import pytest
+from pytest_localserver.http import WSGIServer
+from six.moves import http_client
+
+# .invalid will never resolve, see https://tools.ietf.org/html/rfc2606
+NXDOMAIN = 'test.invalid'
+
+
+class RequestResponseTests(object):
+
+    @pytest.fixture(scope='module')
+    def server(self):
+        """Provides a test HTTP server.
+
+        The test server is automatically created before
+        a test and destroyed at the end. The server is serving a test
+        application that can be used to verify requests.
+        """
+        app = flask.Flask(__name__)
+        app.debug = True
+
+        # pylint: disable=unused-variable
+        # (pylint thinks the flask routes are unusued.)
+        @app.route('/basic')
+        def index():
+            header_value = flask.request.headers.get('x-test-header', 'value')
+            headers = {'X-Test-Header': header_value}
+            return 'Basic Content', http_client.OK, headers
+
+        @app.route('/server_error')
+        def server_error():
+            return 'Error', http_client.INTERNAL_SERVER_ERROR
+        # pylint: enable=unused-variable
+
+        server = WSGIServer(application=app.wsgi_app)
+        server.start()
+        yield server
+        server.stop()
+
+    def test_request_basic(self, server):
+        request = self.make_request()
+        response = request(url=server.url + '/basic', method='GET')
+
+        assert response.status == http_client.OK
+        assert response.headers['x-test-header'] == 'value'
+        assert response.data == b'Basic Content'
+
+    def test_request_timeout(self, server):
+        request = self.make_request()
+        response = request(url=server.url + '/basic', method='GET', timeout=2)
+
+        assert response.status == http_client.OK
+        assert response.headers['x-test-header'] == 'value'
+        assert response.data == b'Basic Content'
+
+    def test_request_headers(self, server):
+        request = self.make_request()
+        response = request(
+            url=server.url + '/basic', method='GET', headers={
+                'x-test-header': 'hello world'})
+
+        assert response.status == http_client.OK
+        assert response.headers['x-test-header'] == 'hello world'
+        assert response.data == b'Basic Content'
+
+    def test_request_error(self, server):
+        request = self.make_request()
+        response = request(url=server.url + '/server_error', method='GET')
+
+        assert response.status == http_client.INTERNAL_SERVER_ERROR
+        assert response.data == b'Error'
+
+    def test_connection_error(self):
+        request = self.make_request()
+        with pytest.raises(exceptions.TransportError):
+            request(url='http://{}'.format(NXDOMAIN), method='GET')
diff --git a/httplib2_transport/tests/test_google_auth_httplib2.py b/httplib2_transport/tests/test_google_auth_httplib2.py
new file mode 100644
index 0000000..9c2da70
--- /dev/null
+++ b/httplib2_transport/tests/test_google_auth_httplib2.py
@@ -0,0 +1,148 @@
+# Copyright 2016 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import httplib2
+import mock
+import six
+from six.moves import http_client
+
+import google_auth_httplib2
+from tests import compliance
+
+
+class MockHttp(object):
+    def __init__(self, responses, headers=None):
+        self.responses = responses
+        self.requests = []
+        self.headers = headers or {}
+
+    def request(self, url, method='GET', body=None, headers=None, **kwargs):
+        self.requests.append((method, url, body, headers, kwargs))
+        return self.responses.pop(0)
+
+
+class MockResponse(object):
+    def __init__(self, status=http_client.OK, data=b''):
+        self.status = status
+        self.data = data
+
+    def __iter__(self):
+        yield self
+        yield self.data
+
+
+class TestRequestResponse(compliance.RequestResponseTests):
+    def make_request(self):
+        http = httplib2.Http()
+        return google_auth_httplib2.Request(http)
+
+    def test_timeout(self):
+        url = 'http://example.com'
+        http = MockHttp(responses=[MockResponse()])
+        request = google_auth_httplib2.Request(http)
+        request(url=url, method='GET', timeout=5)
+
+        assert http.requests[0] == (
+            'GET', url, None, None, {})
+
+
+def test__make_default_http():
+    http = google_auth_httplib2._make_default_http()
+    assert isinstance(http, httplib2.Http)
+
+
+class MockCredentials(object):
+    def __init__(self, token='token'):
+        self.token = token
+
+    def apply(self, headers):
+        headers['authorization'] = self.token
+
+    def before_request(self, request, method, url, headers):
+        self.apply(headers)
+
+    def refresh(self, request):
+        self.token += '1'
+
+
+class TestAuthorizedHttp(object):
+    TEST_URL = 'http://example.com'
+
+    def test_authed_http_defaults(self):
+        authed_http = google_auth_httplib2.AuthorizedHttp(
+            mock.sentinel.credentials)
+
+        assert authed_http.credentials == mock.sentinel.credentials
+        assert isinstance(authed_http.http, httplib2.Http)
+
+    def test_request_no_refresh(self):
+        mock_credentials = mock.Mock(wraps=MockCredentials())
+        mock_response = MockResponse()
+        mock_http = MockHttp([mock_response])
+
+        authed_http = google_auth_httplib2.AuthorizedHttp(
+            mock_credentials, http=mock_http)
+
+        response, data = authed_http.request(self.TEST_URL)
+
+        assert response == mock_response
+        assert data == mock_response.data
+        assert mock_credentials.before_request.called
+        assert not mock_credentials.refresh.called
+        assert mock_http.requests == [
+            ('GET', self.TEST_URL, None, {'authorization': 'token'}, {})]
+
+    def test_request_refresh(self):
+        mock_credentials = mock.Mock(wraps=MockCredentials())
+        mock_final_response = MockResponse(status=http_client.OK)
+        # First request will 401, second request will succeed.
+        mock_http = MockHttp([
+            MockResponse(status=http_client.UNAUTHORIZED),
+            mock_final_response])
+
+        authed_http = google_auth_httplib2.AuthorizedHttp(
+            mock_credentials, http=mock_http)
+
+        response, data = authed_http.request(self.TEST_URL)
+
+        assert response == mock_final_response
+        assert data == mock_final_response.data
+        assert mock_credentials.before_request.call_count == 2
+        assert mock_credentials.refresh.called
+        assert mock_http.requests == [
+            ('GET', self.TEST_URL, None, {'authorization': 'token'}, {}),
+            ('GET', self.TEST_URL, None, {'authorization': 'token1'}, {})]
+
+    def test_request_stream_body(self):
+        mock_credentials = mock.Mock(wraps=MockCredentials())
+        mock_response = MockResponse()
+        # Refresh is needed to cover the resetting of the body position.
+        mock_http = MockHttp([
+            MockResponse(status=http_client.UNAUTHORIZED),
+            mock_response])
+
+        body = six.StringIO('body')
+        body.seek(1)
+
+        authed_http = google_auth_httplib2.AuthorizedHttp(
+            mock_credentials, http=mock_http)
+
+        response, data = authed_http.request(
+            self.TEST_URL, method='POST', body=body)
+
+        assert response == mock_response
+        assert data == mock_response.data
+        assert mock_http.requests == [
+            ('POST', self.TEST_URL, body, {'authorization': 'token'}, {}),
+            ('POST', self.TEST_URL, body, {'authorization': 'token1'}, {})]
diff --git a/httplib2_transport/tox.ini b/httplib2_transport/tox.ini
new file mode 100644
index 0000000..4d54203
--- /dev/null
+++ b/httplib2_transport/tox.ini
@@ -0,0 +1,40 @@
+[tox]
+envlist = lint,py27,py34,py35,pypy,cover
+
+[testenv]
+deps =
+  flask
+  mock
+  pytest
+  pytest-cov
+  pytest-localserver
+  httplib2
+  {toxinidir}/..
+# Always recreate because of the relative path in deps above.
+recreate = True
+commands =
+  py.test --cov=google_auth_httplib2 --cov=tests {posargs:tests}
+
+[testenv:cover]
+basepython = python3.5
+commands =
+  py.test --cov=google_auth_httplib2 --cov=tests --cov-report= tests
+  coverage report --show-missing --fail-under=100
+deps =
+  {[testenv]deps}
+
+[testenv:lint]
+basepython = python3.5
+commands =
+  python setup.py check --metadata --restructuredtext --strict
+  flake8 \
+    --import-order-style=google \
+    --application-import-names="google_auth_httplib2,tests" \
+    google_auth_httplib2.py tests
+  pylint --rcfile pylintrc google_auth_httplib2.py
+  pylint --rcfile pylintrc.tests tests
+deps =
+  flake8
+  flake8-import-order
+  pylint
+  docutils
diff --git a/setup.py b/setup.py
index 615753d..26b520e 100644
--- a/setup.py
+++ b/setup.py
@@ -27,7 +27,6 @@
 with open('README.rst', 'r') as fh:
     long_description = fh.read()
 
-
 setup(
     name='google-auth',
     version='0.0.1',
