diff --git a/apiclient/oauth.py b/apiclient/oauth.py
index 7351b36..fe78e61 100644
--- a/apiclient/oauth.py
+++ b/apiclient/oauth.py
@@ -124,18 +124,25 @@
                     connection_type=None):
       """Modify the request headers to add the appropriate
       Authorization header."""
-      req = oauth.Request.from_consumer_and_token(
-          self.consumer, self.token, http_method=method, http_url=uri)
-      req.sign_request(signer, self.consumer, self.token)
-      if headers == None:
-        headers = {}
-      headers.update(req.to_header())
-      if 'user-agent' in headers:
-        headers['user-agent'] = self.user_agent + ' ' + headers['user-agent']
-      else:
-        headers['user-agent'] = self.user_agent
-      return request_orig(uri, method, body, headers,
-                          redirections, connection_type)
+      response_code = 302
+      http.follow_redirects = False
+      while response_code in [301, 302]:
+        req = oauth.Request.from_consumer_and_token(
+            self.consumer, self.token, http_method=method, http_url=uri)
+        req.sign_request(signer, self.consumer, self.token)
+        if headers == None:
+          headers = {}
+        headers.update(req.to_header())
+        if 'user-agent' in headers:
+          headers['user-agent'] = self.user_agent + ' ' + headers['user-agent']
+        else:
+          headers['user-agent'] = self.user_agent
+        resp, content = request_orig(uri, method, body, headers,
+                            redirections, connection_type)
+        response_code = resp.status
+        if response_code in [301, 302]:
+          uri = resp['location']
+      return resp, content
 
     http.request = new_request
     return http
diff --git a/samples/new_project_template/main.py b/samples/new_project_template/main.py
index 026400e..8241908 100755
--- a/samples/new_project_template/main.py
+++ b/samples/new_project_template/main.py
@@ -36,7 +36,11 @@
 from google.appengine.ext.webapp.util import login_required
 
 APP_ID = os.environ['APPLICATION_ID']
-STEP2_URI = 'http://%s.appspot.com/auth_return' % APP_ID
+
+if 'Development' in os.environ['SERVER_SOFTWARE']:
+  STEP2_URI = 'http://localhost:8080/auth_return'
+else:
+  STEP2_URI = 'http://%s.appspot.com/auth_return' % APP_ID
 
 
 class Credentials(db.Model):
@@ -49,29 +53,33 @@
   def get(self):
     user = users.get_current_user()
     storage = StorageByKeyName(Credentials, user.user_id(), 'credentials')
-    credentials = storage.get()
     http = httplib2.Http()
+    credentials = storage.get()
+
     if credentials:
       http = credentials.authorize(http)
+
     service = build("buzz", "v1", http=http)
 
-    if credentials:
-      followers = service.people().list(userId='@me', groupId='@followers').execute()
-      self.response.out.write('Hello, you have %s followers!' %
-                              followers['totalResults'])
-    else:
-      flow = FlowThreeLegged(service.auth_discovery(),
-                     consumer_key='anonymous',
-                     consumer_secret='anonymous',
-                     user_agent='%s/1.0' % APP_ID,
-                     domain='anonymous',
-                     scope='https://www.googleapis.com/auth/buzz',
-                     xoauth_displayname='App Name')
+    if not credentials:
+      return begin_oauth_flow(self, user, service)
 
-      authorize_url = flow.step1_get_authorize_url(STEP2_URI)
-      memcache.set(user.user_id(), pickle.dumps(flow))
-      self.redirect(authorize_url)
+    followers = service.people().list(userId='@me', groupId='@followers').execute()
+    self.response.out.write('Hello, you have %s followers!' %
+                            followers['totalResults'])
 
+def begin_oauth_flow(request_handler, user, service):
+    flow = FlowThreeLegged(service.auth_discovery(),
+                   consumer_key='anonymous',
+                   consumer_secret='anonymous',
+                   user_agent='%s/1.0' % APP_ID,
+                   domain='anonymous',
+                   scope='https://www.googleapis.com/auth/buzz',
+                   xoauth_displayname='App Name')
+
+    authorize_url = flow.step1_get_authorize_url(STEP2_URI)
+    memcache.set(user.user_id(), pickle.dumps(flow))
+    request_handler.redirect(authorize_url)
 
 class OAuthHandler(webapp.RequestHandler):
 
