diff --git a/oauth2client/appengine.py b/oauth2client/appengine.py
index 8e05d8b..165c9b1 100644
--- a/oauth2client/appengine.py
+++ b/oauth2client/appengine.py
@@ -31,7 +31,6 @@
 from google.appengine.api import memcache
 from google.appengine.api import users
 from google.appengine.ext import db
-from google.appengine.ext import ndb
 from google.appengine.ext import webapp
 from google.appengine.ext.webapp.util import login_required
 from google.appengine.ext.webapp.util import run_wsgi_app
@@ -49,6 +48,13 @@
 from oauth2client.client import OAuth2WebServerFlow
 from oauth2client.client import Storage
 
+# TODO(dhermes): Resolve import issue.
+# This is a temporary fix for a Google internal issue.
+try:
+  from google.appengine.ext import ndb
+except ImportError:
+  ndb = None
+
 logger = logging.getLogger(__name__)
 
 OAUTH2CLIENT_NAMESPACE = 'oauth2client#ns'
@@ -84,23 +90,23 @@
   """
   secret = db.StringProperty()
 
+if ndb is not None:
+  class SiteXsrfSecretKeyNDB(ndb.Model):
+    """NDB Model for storage for the sites XSRF secret key.
 
-class SiteXsrfSecretKeyNDB(ndb.Model):
-  """NDB Model for storage for the sites XSRF secret key.
+    Since this model uses the same kind as SiteXsrfSecretKey, it can be used
+    interchangeably. This simply provides an NDB model for interacting with the
+    same data the DB model interacts with.
 
-  Since this model uses the same kind as SiteXsrfSecretKey, it can be used
-  interchangeably. This simply provides an NDB model for interacting with the
-  same data the DB model interacts with.
+    There should only be one instance stored of this model, the one used for the
+    site.
+    """
+    secret = ndb.StringProperty()
 
-  There should only be one instance stored of this model, the one used for the
-  site.
-  """
-  secret = ndb.StringProperty()
-
-  @classmethod
-  def _get_kind(cls):
-    """Return the kind name for this class."""
-    return 'SiteXsrfSecretKey'
+    @classmethod
+    def _get_kind(cls):
+      """Return the kind name for this class."""
+      return 'SiteXsrfSecretKey'
 
 
 def _generate_new_xsrf_secret_key():
@@ -217,30 +223,31 @@
     return not value
 
 
-class FlowNDBProperty(ndb.PickleProperty):
-  """App Engine NDB datastore Property for Flow.
+if ndb is not None:
+  class FlowNDBProperty(ndb.PickleProperty):
+    """App Engine NDB datastore Property for Flow.
 
-  Serves the same purpose as the DB FlowProperty, but for NDB models. Since
-  PickleProperty inherits from BlobProperty, the underlying representation of
-  the data in the datastore will be the same as in the DB case.
+    Serves the same purpose as the DB FlowProperty, but for NDB models. Since
+    PickleProperty inherits from BlobProperty, the underlying representation of
+    the data in the datastore will be the same as in the DB case.
 
-  Utility property that allows easy storage and retrieval of an
-  oauth2client.Flow
-  """
-
-  def _validate(self, value):
-    """Validates a value as a proper Flow object.
-
-    Args:
-      value: A value to be set on the property.
-
-    Raises:
-      TypeError if the value is not an instance of Flow.
+    Utility property that allows easy storage and retrieval of an
+    oauth2client.Flow
     """
-    logger.info('validate: Got type %s', type(value))
-    if value is not None and not isinstance(value, Flow):
-      raise TypeError('Property %s must be convertible to a flow '
-                      'instance; received: %s.' % (self._name, value))
+
+    def _validate(self, value):
+      """Validates a value as a proper Flow object.
+
+      Args:
+        value: A value to be set on the property.
+
+      Raises:
+        TypeError if the value is not an instance of Flow.
+      """
+      logger.info('validate: Got type %s', type(value))
+      if value is not None and not isinstance(value, Flow):
+        raise TypeError('Property %s must be convertible to a flow '
+                        'instance; received: %s.' % (self._name, value))
 
 
 class CredentialsProperty(db.Property):
@@ -289,65 +296,66 @@
     return value
 
 
-# TODO(dhermes): Turn this into a JsonProperty and overhaul the Credentials
-#                and subclass mechanics to use new_from_dict, to_dict,
-#                from_dict, etc.
-class CredentialsNDBProperty(ndb.BlobProperty):
-  """App Engine NDB datastore Property for Credentials.
+if ndb is not None:
+  # TODO(dhermes): Turn this into a JsonProperty and overhaul the Credentials
+  #                and subclass mechanics to use new_from_dict, to_dict,
+  #                from_dict, etc.
+  class CredentialsNDBProperty(ndb.BlobProperty):
+    """App Engine NDB datastore Property for Credentials.
 
-  Serves the same purpose as the DB CredentialsProperty, but for NDB models.
-  Since CredentialsProperty stores data as a blob and this inherits from
-  BlobProperty, the data in the datastore will be the same as in the DB case.
+    Serves the same purpose as the DB CredentialsProperty, but for NDB models.
+    Since CredentialsProperty stores data as a blob and this inherits from
+    BlobProperty, the data in the datastore will be the same as in the DB case.
 
-  Utility property that allows easy storage and retrieval of Credentials and
-  subclasses.
-  """
-  def _validate(self, value):
-    """Validates a value as a proper credentials object.
-
-    Args:
-      value: A value to be set on the property.
-
-    Raises:
-      TypeError if the value is not an instance of Credentials.
+    Utility property that allows easy storage and retrieval of Credentials and
+    subclasses.
     """
-    logger.info('validate: Got type %s', type(value))
-    if value is not None and not isinstance(value, Credentials):
-      raise TypeError('Property %s must be convertible to a credentials '
-                      'instance; received: %s.' % (self._name, value))
+    def _validate(self, value):
+      """Validates a value as a proper credentials object.
 
-  def _to_base_type(self, value):
-    """Converts our validated value to a JSON serialized string.
+      Args:
+        value: A value to be set on the property.
 
-    Args:
-      value: A value to be set in the datastore.
+      Raises:
+        TypeError if the value is not an instance of Credentials.
+      """
+      logger.info('validate: Got type %s', type(value))
+      if value is not None and not isinstance(value, Credentials):
+        raise TypeError('Property %s must be convertible to a credentials '
+                        'instance; received: %s.' % (self._name, value))
 
-    Returns:
-      A JSON serialized version of the credential, else '' if value is None.
-    """
-    if value is None:
-      return ''
-    else:
-      return value.to_json()
+    def _to_base_type(self, value):
+      """Converts our validated value to a JSON serialized string.
 
-  def _from_base_type(self, value):
-    """Converts our stored JSON string back to the desired type.
+      Args:
+        value: A value to be set in the datastore.
 
-    Args:
-      value: A value from the datastore to be converted to the desired type.
+      Returns:
+        A JSON serialized version of the credential, else '' if value is None.
+      """
+      if value is None:
+        return ''
+      else:
+        return value.to_json()
 
-    Returns:
-      A deserialized Credentials (or subclass) object, else None if the
-          value can't be parsed.
-    """
-    if not value:
-      return None
-    try:
-      # Uses the from_json method of the implied class of value
-      credentials = Credentials.new_from_json(value)
-    except ValueError:
-      credentials = None
-    return credentials
+    def _from_base_type(self, value):
+      """Converts our stored JSON string back to the desired type.
+
+      Args:
+        value: A value from the datastore to be converted to the desired type.
+
+      Returns:
+        A deserialized Credentials (or subclass) object, else None if the
+            value can't be parsed.
+      """
+      if not value:
+        return None
+      try:
+        # Uses the from_json method of the implied class of value
+        credentials = Credentials.new_from_json(value)
+      except ValueError:
+        credentials = None
+      return credentials
 
 
 class StorageByKeyName(Storage):
@@ -385,7 +393,7 @@
     # issubclass will fail if one of the arguments is not a class, only need
     # worry about new-style classes since ndb and db models are new-style
     if isinstance(self._model, type):
-      if issubclass(self._model, ndb.Model):
+      if ndb is not None and issubclass(self._model, ndb.Model):
         return True
       elif issubclass(self._model, db.Model):
         return False
@@ -469,23 +477,24 @@
   credentials = CredentialsProperty()
 
 
-class CredentialsNDBModel(ndb.Model):
-  """NDB Model for storage of OAuth 2.0 Credentials
+if ndb is not None:
+  class CredentialsNDBModel(ndb.Model):
+    """NDB Model for storage of OAuth 2.0 Credentials
 
-  Since this model uses the same kind as CredentialsModel and has a property
-  which can serialize and deserialize Credentials correctly, it can be used
-  interchangeably with a CredentialsModel to access, insert and delete the same
-  entities. This simply provides an NDB model for interacting with the
-  same data the DB model interacts with.
+    Since this model uses the same kind as CredentialsModel and has a property
+    which can serialize and deserialize Credentials correctly, it can be used
+    interchangeably with a CredentialsModel to access, insert and delete the
+    same entities. This simply provides an NDB model for interacting with the
+    same data the DB model interacts with.
 
-  Storage of the model is keyed by the user.user_id().
-  """
-  credentials = CredentialsNDBProperty()
+    Storage of the model is keyed by the user.user_id().
+    """
+    credentials = CredentialsNDBProperty()
 
-  @classmethod
-  def _get_kind(cls):
-    """Return the kind name for this class."""
-    return 'CredentialsModel'
+    @classmethod
+    def _get_kind(cls):
+      """Return the kind name for this class."""
+      return 'CredentialsModel'
 
 
 def _build_state_value(request_handler, user):
