diff --git a/doc/conf.py b/doc/conf.py
index 6bb9487380141270dcbfcf88c7e5036935be7e91..d75d2aa2ac850052f2c0ad196affaea5b0ec9e98 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -325,6 +325,6 @@ intersphinx_mapping = {
     'https://documen.tician.de/modepy/': None,
     'https://documen.tician.de/pymbolic/': None,
     'https://documen.tician.de/meshmode/': None,
-    #'http://documen.tician.de/loopy/': None,
+    'http://documen.tician.de/loopy/': None,
     }
 autoclass_content = "both"
diff --git a/doc/index.rst b/doc/index.rst
index b996c470ffc998618b118e815b05b1c42ff7e9be..6d7782bc950b12431961f3bd0b8ee30deba4d050 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -8,6 +8,7 @@ Contents:
 
     misc
     symbolic
+    eager
 
 
 Indices and Tables
diff --git a/grudge/eager.py b/grudge/eager.py
index 2000ef0cd0de44f6d7d74b3061179d0a9016dc93..43d73a4db5ad6eef406bc75e66f4d1bc39b74bfb 100644
--- a/grudge/eager.py
+++ b/grudge/eager.py
@@ -35,6 +35,11 @@ from grudge import sym, bind
 from meshmode.mesh import BTAG_ALL, BTAG_NONE  # noqa
 
 
+__doc__ = """
+.. autoclass:: EagerDGDiscretization
+"""
+
+
 def with_queue(queue, ary):
     return with_object_array_or_scalar(
             lambda x: x.with_queue(queue), ary)
@@ -45,6 +50,18 @@ def without_queue(ary):
 
 
 class EagerDGDiscretization(DGDiscretizationWithBoundaries):
+    """
+    .. automethod:: project
+    .. automethod:: nodes
+    .. automethod:: grad
+    .. automethod:: div
+    .. automethod:: weak_grad
+    .. automethod:: weak_div
+    .. automethod:: normal
+    .. automethod:: inverse_mass
+    .. automethod:: face_mass
+    """
+
     def interp(self, src, tgt, vec):
         from warnings import warn
         warn("using 'interp' is deprecated, use 'project' instead.",