diff --git a/django/template/__init__.py b/django/template/__init__.py
--- a/django/template/__init__.py
+++ b/django/template/__init__.py
@@ -50,6 +50,7 @@
 """
 import imp
 import re
+import sys
 from inspect import getargspec
 
 from django.conf import settings
@@ -982,17 +983,24 @@
     """
     # We need to be able to tell the difference between a tag library that
     # doesn't exist, and a tag library with errors in it.
-    # find_module() finds, but doesn't actually load the module requested.
-    # If it raises ImportError, it means the module doesn't exist.
-    # If you then use load_module(), any ImportError is guaranteed to be
-    # an actual import problem with the module.
     app_path, taglib = taglib_module.rsplit('.',1)
     app_module = import_module(app_path)
     try:
-        imp.find_module(taglib, app_module.__path__)
-    except ImportError,e:
-        return None
-    mod = import_module(taglib_module)
+        mod = import_module(taglib_module)
+    except ImportError:
+        # imp.find_module() can tell us if a module exists by raising
+        # ImportError without loading it.
+        # Problem is it isn't compatible with templatetag libraries contained
+        # inside eggs so we need to investigate things further if it fails
+        # making sure to use a custom loaders if it is present.
+        importer = sys.path_importer_cache.get(app_module.__path__[0], None) or imp
+        try:
+            if importer.find_module(taglib, app_module.__path__) is not None:
+                # It is guaranteed to be an actual import problem with the module.
+                raise
+        except ImportError:
+            # The module doesn't exist.
+            return None
     try:
         return mod.register
     except AttributeError:
