diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index b39e1b2..b557b8b 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -91,6 +91,7 @@
   return build_from_document(content, discoveryServiceUrl, future,
       http, developerKey, model, requestBuilder)
 
+
 def build_from_document(
     service,
     base,
@@ -105,8 +106,8 @@
     base: string, base URI for all HTTP requests, usually the discovery URI
     future: string, discovery document with future capabilities
     auth_discovery: dict, information about the authentication the API supports
-    http: httplib2.Http, An instance of httplib2.Http or something that acts like
-      it that HTTP requests will be made through.
+    http: httplib2.Http, An instance of httplib2.Http or something that acts
+      like it that HTTP requests will be made through.
     developerKey: string, Key for controlling API usage, generated
       from the API Console.
     model: Model class instance that serializes and
@@ -116,45 +117,26 @@
 
   service = simplejson.loads(service)
   base = urlparse.urljoin(base, service['restBasePath'])
-  resources = service['resources']
   if future:
-    doc = simplejson.loads(future)
-    future = doc['resources']
-    auth_discovery = doc.get('auth', {})
+    future = simplejson.loads(future)
+    auth_discovery = future.get('auth', {})
   else:
     future = {}
     auth_discovery = {}
 
-  class Service(object):
-    """Top level interface for a service"""
+  resource = createResource(http, base, model, requestBuilder, developerKey,
+                       service, future)
 
-    def __init__(self, http=http):
-      self._http = http
-      self._baseUrl = base
-      self._model = model
-      self._developerKey = developerKey
-      self._requestBuilder = requestBuilder
+  def auth_method():
+    """Discovery information about the authentication the API uses."""
+    return auth_discovery
 
-    def auth_discovery(self):
-      return auth_discovery
+  setattr(resource, 'auth_discovery', auth_method)
 
-  def createMethod(theclass, methodName, methodDesc, futureDesc):
-
-    def method(self):
-      return createResource(self._http, self._baseUrl, self._model,
-                            self._requestBuilder, methodName,
-                            self._developerKey, methodDesc, futureDesc)
-
-    setattr(method, '__doc__', 'A description of how to use this function')
-    setattr(method, '__is_resource__', True)
-    setattr(theclass, methodName, method)
-
-  for methodName, methodDesc in resources.iteritems():
-    createMethod(Service, methodName, methodDesc, future.get(methodName, {}))
-  return Service()
+  return resource
 
 
-def createResource(http, baseUrl, model, requestBuilder, resourceName,
+def createResource(http, baseUrl, model, requestBuilder,
                    developerKey, resourceDesc, futureDesc):
 
   class Resource(object):
@@ -322,8 +304,8 @@
 
       def method(self):
         return createResource(self._http, self._baseUrl, self._model,
-                              self._requestBuilder, methodName,
-                              self._developerKey, methodDesc, futureDesc)
+                              self._requestBuilder, self._developerKey,
+                              methodDesc, futureDesc)
 
       setattr(method, '__doc__', 'A description of how to use this function')
       setattr(method, '__is_resource__', True)
@@ -335,10 +317,10 @@
       else:
         future = {}
       createMethod(Resource, methodName, methodDesc,
-                   future.get(methodName, {}))
+                   future)
 
   # Add <m>_next() methods to Resource
-  if futureDesc:
+  if futureDesc and 'methods' in futureDesc:
     for methodName, methodDesc in futureDesc['methods'].iteritems():
       if 'next' in methodDesc and methodName in resourceDesc['methods']:
         createNextMethod(Resource, methodName + "_next",
diff --git a/apiclient/oauth.py b/apiclient/oauth.py
index 469b6e0..68e4300 100644
--- a/apiclient/oauth.py
+++ b/apiclient/oauth.py
@@ -79,10 +79,12 @@
     """
     _abstract()
 
+
 class Flow(object):
   """Base class for all Flow objects."""
   pass
 
+
 class OAuthCredentials(Credentials):
   """Credentials object for OAuth 1.0a
   """
@@ -254,4 +256,3 @@
         oauth_params['oauth_token_secret'])
 
     return OAuthCredentials(consumer, token, self.user_agent)
-
