diff --git a/meshmode/discretization/connection/__init__.py b/meshmode/discretization/connection/__init__.py
index 85e41d89f832f0e410e0c3a208ae708724f43f82..7d17be88ed122ccf5b9ee1d1098fe9da79899bb4 100644
--- a/meshmode/discretization/connection/__init__.py
+++ b/meshmode/discretization/connection/__init__.py
@@ -278,17 +278,25 @@ class DirectDiscretizationConnection(DiscretizationConnection):
         ibatch = self.groups[to_group_index].batches[ibatch_index]
         from_grp = self.from_discr.groups[ibatch.from_group_index]
 
-        if len(from_grp.basis()) != from_grp.unit_nodes.shape[1]:
-            from meshmode.discretization import NoninterpolatoryElementGroupError
-            raise NoninterpolatoryElementGroupError(
-                    "%s does not support interpolation because it is not "
-                    "unisolvent (its unit node count does not match its "
-                    "number of basis functions). Using connections requires "
-                    "the ability to interpolate." % type(from_grp).__name__)
-
-        result = mp.resampling_matrix(
-                from_grp.basis(),
-                ibatch.result_unit_nodes, from_grp.unit_nodes)
+        nfrom_unit_nodes = from_grp.unit_nodes.shape[1]
+        if np.array_equal(from_grp.unit_nodes, ibatch.result_unit_nodes):
+            # Nodes are exactly identical? We can 'interpolate' even when there
+            # isn't a basis.
+
+            result = np.eye(nfrom_unit_nodes)
+
+        else:
+            if len(from_grp.basis()) != nfrom_unit_nodes:
+                from meshmode.discretization import NoninterpolatoryElementGroupError
+                raise NoninterpolatoryElementGroupError(
+                        "%s does not support interpolation because it is not "
+                        "unisolvent (its unit node count does not match its "
+                        "number of basis functions). Using connections requires "
+                        "the ability to interpolate." % type(from_grp).__name__)
+
+            result = mp.resampling_matrix(
+                    from_grp.basis(),
+                    ibatch.result_unit_nodes, from_grp.unit_nodes)
 
         with cl.CommandQueue(self.cl_context) as queue:
             return cl.array.to_device(queue, result).with_queue(None)