diff --git a/grudge/execution.py b/grudge/execution.py
index ec0d6c6a2eae61523c107926589b94da4556a362..d6725f2f7583d37aa3f4bf98f4245546828c0c76 100644
--- a/grudge/execution.py
+++ b/grudge/execution.py
@@ -575,6 +575,8 @@ def process_sym_operator(sym_operator, post_bind_mapper=None,
     # dumper("before-derivative-join", sym_operator)
     # sym_operator = mappers.DerivativeJoiner()(sym_operator)
 
+    sys_operator = mappers.DistributedMapper()(sym_operator)
+
     dumper("process-finished", sym_operator)
 
     return sym_operator
diff --git a/grudge/symbolic/mappers/__init__.py b/grudge/symbolic/mappers/__init__.py
index 60b489cecb50d6f69c562ecd7a14e4a0e786ad07..ae6766281401870cfeaa70960319d9ed412a25c8 100644
--- a/grudge/symbolic/mappers/__init__.py
+++ b/grudge/symbolic/mappers/__init__.py
@@ -331,6 +331,19 @@ class OperatorBinder(CSECachingMapperMixin, IdentityMapper):
 # }}}
 
 
+class DistributedMapper(CSECachingMapperMixin, IdentityMapper):
+
+    # FIXME: Not sure what this is
+    map_common_subexpression_uncached = IdentityMapper.map_common_subexpression
+
+    def map_operator_binding(self, expr):
+        if isinstance(expr.op, op.OppositeInteriorFaceSwap):
+            return 42
+            # return expr.op + op.OppositeRankFaceSwap()(self.rec(expr.field))
+        else:
+            return IdentityMapper.map_operator_binding(self, expr)
+
+
 # {{{ operator specializer
 
 class OperatorSpecializer(CSECachingMapperMixin, IdentityMapper):
diff --git a/grudge/symbolic/operators.py b/grudge/symbolic/operators.py
index 70c43a100bc6676874f1a1485df301e7d6ca2493..23ca69bcd57bc202ac82367305732d56581879c1 100644
--- a/grudge/symbolic/operators.py
+++ b/grudge/symbolic/operators.py
@@ -383,6 +383,7 @@ class OppositeRankFaceSwap(Operator):
     def __init__(self, dd_in=None, dd_out=None):
         sym = _sym()
 
+        from meshmode.mesh import BTAG_PARTITION
         if dd_in is None:
             dd_in = sym.DOFDesc(BTAG_PARTITION, None)
         if dd_out is None:
diff --git a/grudge/symbolic/primitives.py b/grudge/symbolic/primitives.py
index 11d5ae8a5dc802b0a75d0f705494b6483ac40b78..4fe9b132f524f160ec6e7180d44134a5a2773272 100644
--- a/grudge/symbolic/primitives.py
+++ b/grudge/symbolic/primitives.py
@@ -28,7 +28,7 @@ from six.moves import range, intern
 
 import numpy as np
 import pymbolic.primitives
-from meshmode.mesh import BTAG_ALL, BTAG_REALLY_ALL, BTAG_NONE  # noqa
+from meshmode.mesh import BTAG_ALL, BTAG_REALLY_ALL, BTAG_NONE, BTAG_PARTITION  # noqa
 from meshmode.discretization.connection import (  # noqa
         FRESTR_ALL_FACES, FRESTR_INTERIOR_FACES)
 
@@ -183,6 +183,8 @@ class DOFDesc(object):
             pass
         elif domain_tag in [BTAG_ALL, BTAG_REALLY_ALL, BTAG_NONE]:
             pass
+        elif domain_tag is BTAG_PARTITION:
+            pass
         elif isinstance(domain_tag, DTAG_BOUNDARY):
             pass
         else: