diff --git a/samples/helpdoc/app.yaml b/samples/helpdoc/app.yaml
index 8919c7b..5a357dc 100644
--- a/samples/helpdoc/app.yaml
+++ b/samples/helpdoc/app.yaml
@@ -1,4 +1,4 @@
-application: google-api-python-client-doc
+application: api-python-client-doc
 version: 1
 runtime: python
 api_version: 1
diff --git a/samples/helpdoc/main.py b/samples/helpdoc/main.py
index 969c2bd..8918c9b 100755
--- a/samples/helpdoc/main.py
+++ b/samples/helpdoc/main.py
@@ -19,6 +19,7 @@
 
 
 import httplib2
+import inspect
 import logging
 import os
 import pydoc
@@ -33,10 +34,41 @@
 
 STEP2_URI = 'http://%s.appspot.com/auth_return' % os.environ['APPLICATION_ID']
 
+
+# Replicate render_doc here from pydoc.py as it isn't available in Python 2.5
+class _OldStyleClass: pass
+
+def render_doc(thing, title='Python Library Documentation: %s', forceload=0):
+    """Render text documentation, given an object or a path to an object."""
+    object, name = pydoc.resolve(thing, forceload)
+    desc = pydoc.describe(object)
+    module = inspect.getmodule(object)
+    if name and '.' in name:
+        desc += ' in ' + name[:name.rfind('.')]
+    elif module and module is not object:
+        desc += ' in module ' + module.__name__
+    if type(object) is type(_OldStyleClass()):
+        # If the passed object is an instance of an old-style class,
+        # document its available methods instead of its value.
+        object = object.__class__
+    elif not (inspect.ismodule(object) or
+              inspect.isclass(object) or
+              inspect.isroutine(object) or
+              inspect.isgetsetdescriptor(object) or
+              inspect.ismemberdescriptor(object) or
+              isinstance(object, property)):
+        # If the passed object is a piece of data or an instance,
+        # document its available methods instead of its value.
+        object = type(object)
+        desc += ' object'
+    return title % desc + '\n\n' + pydoc.text.document(object, name)
+
+
 class MainHandler(webapp.RequestHandler):
 
   def get(self):
     self.response.out.write("""
+    <h1>Google API Client for Python Documentation</h1>
     <ul>
       <li><a href='/buzz/v1'>buzz</a>
       <li><a href='/moderator/v1'>moderator</a>
@@ -48,7 +80,7 @@
 
   def get(self, service_name, version):
     service = build(service_name, version)
-    page = "<pre>%s</pre>" % pydoc.plain(pydoc.render_doc(service))
+    page = "<p><a href='/'>Home</a></p><pre>%s</pre>" % pydoc.plain(render_doc(service))
 
     collections = []
     for name in dir(service):
@@ -64,7 +96,7 @@
 
   def get(self, service_name, version, collection):
     service = build(service_name, version)
-    page = "<pre>%s</pre>" % pydoc.plain(pydoc.render_doc(getattr(service, collection)()))
+    page = "<p><a href='/'>Home</a></p><pre>%s</pre>" % pydoc.plain(render_doc(getattr(service, collection)()))
     self.response.out.write(page)
 
 def main():
