diff --git a/meshmode/discretization/connection/opposite_face.py b/meshmode/discretization/connection/opposite_face.py
index 1b1c9c9dc877e10bba79acb691aa353ef549db6c..e084525ba9a6eb5001548f432c25a0a8f861173e 100644
--- a/meshmode/discretization/connection/opposite_face.py
+++ b/meshmode/discretization/connection/opposite_face.py
@@ -350,9 +350,14 @@ def make_opposite_face_connection(volume_to_bdry_conn):
                     # inter-group connections.
 
                     adj_tgt_flags = adj.element_faces == i_face_tgt
-
                     adj_els = adj.elements[adj_tgt_flags]
-                    vbc_els = vbc_tgt_grp_face_batch.from_element_indices.get(queue=queue)
+                    if adj_els.size == 0:
+                        # NOTE: this case can happen for inter-group boundaries
+                        # when all elements are adjacent on the same face
+                        # index, so all other ones will be empty
+                        continue
+
+                    vbc_els = vbc_tgt_grp_face_batch.from_element_indices.get(queue)
 
                     if len(adj_els) == len(vbc_els):
                         # Same length: assert (below) that the two use the same
@@ -362,8 +367,9 @@ def make_opposite_face_connection(volume_to_bdry_conn):
                     else:
                         # Genuine subset: figure out an index mapping.
                         vbc_els_sort_idx = np.argsort(vbc_els)
-                        vbc_used_els = vbc_els_sort_idx[
-                                np.searchsorted(vbc_els, adj_els, sorter=vbc_els_sort_idx)]
+                        vbc_used_els = vbc_els_sort_idx[np.searchsorted(
+                            vbc_els, adj_els, sorter=vbc_els_sort_idx
+                            )]
 
                     assert np.array_equal(vbc_els[vbc_used_els], adj_els)
 
diff --git a/test/test_meshmode.py b/test/test_meshmode.py
index 7dab556460aa459251c59c1ab7a0eb382dd31bce..06b7bcfab7373837d45b61fcc7d929e1746b4333 100644
--- a/test/test_meshmode.py
+++ b/test/test_meshmode.py
@@ -1352,12 +1352,17 @@ def test_mesh_multiple_groups(ctx_factory, ambient_dim, visualize=False):
             check_connection(opposite)
 
             op_bdry_f = opposite(queue, bdry_f)
-            assert abs(cl.array.sum(bdry_f - op_bdry_f).get(queue)) < 1.0e-14
+            error = abs(cl.array.sum(bdry_f - op_bdry_f).get(queue))
+            assert error < 1.0e-11, error
 
         if boundary_tag == FACE_RESTR_ALL:
             embedding = make_face_to_all_faces_embedding(conn, conn.to_discr)
             check_connection(embedding)
 
+            em_bdry_f = embedding(queue, bdry_f)
+            error = abs(cl.array.sum(bdry_f - em_bdry_f).get(queue))
+            assert error < 1.0e-11, error
+
 
 if __name__ == "__main__":
     import sys