diff --git a/src/lagrangian/basic/InteractionLists/InteractionLists.C b/src/lagrangian/basic/InteractionLists/InteractionLists.C
index a30489beb6c4b79141972b658c8182f69eb995dc..8f14c8b7f8d857b33563e4555e8f30f9d1cd300e 100644
--- a/src/lagrangian/basic/InteractionLists/InteractionLists.C
+++ b/src/lagrangian/basic/InteractionLists/InteractionLists.C
@@ -224,6 +224,7 @@ void Foam::InteractionLists<ParticleType>::findExtendedProcBbsInRange
 template<class ParticleType>
 void Foam::InteractionLists<ParticleType>::buildMap
 (
+    autoPtr<mapDistribute>& mapPtr,
     const List<label>& toProc
 )
 {
@@ -295,7 +296,7 @@ void Foam::InteractionLists<ParticleType>::buildMap
         }
     }
 
-    mapPtr_.reset
+    mapPtr.reset
     (
         new mapDistribute
         (
@@ -328,9 +329,9 @@ void Foam::InteractionLists<ParticleType>::prepareParticlesToRefer
 
     forAll(cellIndexAndTransformToDistribute_, i)
     {
-        const labelPair giat = cellIndexAndTransformToDistribute_[i];
+        const labelPair ciat = cellIndexAndTransformToDistribute_[i];
 
-        label cellIndex = globalTransforms_.index(giat);
+        label cellIndex = globalTransforms_.index(ciat);
 
         List<ParticleType*> realParticles = cellOccupancy[cellIndex];
 
@@ -342,7 +343,7 @@ void Foam::InteractionLists<ParticleType>::prepareParticlesToRefer
 
             particlesToRefer.append(particle.clone().ptr());
 
-            prepareParticleToBeReferred(particlesToRefer.last(), giat);
+            prepareParticleToBeReferred(particlesToRefer.last(), ciat);
         }
     }
 }
@@ -352,12 +353,12 @@ template<class ParticleType>
 void Foam::InteractionLists<ParticleType>::prepareParticleToBeReferred
 (
     ParticleType* particle,
-    labelPair giat
+    labelPair ciat
 )
 {
     const vector& transform = globalTransforms_.transform
     (
-        globalTransforms_.transformIndex(giat)
+        globalTransforms_.transformIndex(ciat)
     );
 
     particle->position() -= transform;
@@ -382,6 +383,40 @@ void Foam::InteractionLists<ParticleType>::fillReferredParticleCloud()
 }
 
 
+template<class ParticleType>
+void Foam::InteractionLists<ParticleType>::writeReferredWallFaces() const
+{
+    OFstream str(mesh_.time().path()/"referredWallFaces.obj");
+
+    label offset = 1;
+
+    forAll(referredWallFaces_, rWFI)
+    {
+        const Tuple2<face, pointField>& rwf = referredWallFaces_[rWFI];
+
+        forAll(rwf.first(), fPtI)
+        {
+            meshTools::writeOBJ
+            (
+                str,
+                rwf.second()[rwf.first()[fPtI]]
+            );
+        }
+
+        str<< 'f';
+
+        forAll(rwf.first(), fPtI)
+        {
+            str<< ' ' << fPtI + offset;
+        }
+
+        str<< nl;
+
+        offset += rwf.first().size();
+    }
+}
+
+
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 template<class ParticleType>
@@ -395,14 +430,17 @@ Foam::InteractionLists<ParticleType>::InteractionLists
     mesh_(mesh),
     cloud_(mesh_, "referredParticleCloud", IDLList<ParticleType>()),
     writeCloud_(writeCloud),
-    mapPtr_(),
+    cellMapPtr_(),
+    wallFaceMapPtr_(),
     globalTransforms_(mesh_),
     maxDistance_(maxDistance),
     dil_(),
-    directWallFaces_(),
+    dwfil_(),
     ril_(),
     rilInverse_(),
     cellIndexAndTransformToDistribute_(),
+    wallFaceIndexAndTransformToDistribute_(),
+    referredWallFaces_(),
     referredParticles_()
 {
     Info<< "Building InteractionLists" << endl;
@@ -461,11 +499,11 @@ Foam::InteractionLists<ParticleType>::InteractionLists
     PackedBoolList cellInRangeOfCoupledPatch(mesh_.nCells(), false);
 
     // IAndT: index and transform
-    DynamicList<labelPair> globalIAndTToExchange;
+    DynamicList<labelPair> cellIAndTToExchange;
 
-    DynamicList<treeBoundBox> bbsToExchange;
+    DynamicList<treeBoundBox> cellBbsToExchange;
 
-    DynamicList<label> procToDistributeTo;
+    DynamicList<label> procToDistributeCellTo;
 
     forAll(extendedProcBbsInRange, ePBIRI)
     {
@@ -487,26 +525,26 @@ Foam::InteractionLists<ParticleType>::InteractionLists
 
                 cellInRangeOfCoupledPatch[cellI] = true;
 
-                globalIAndTToExchange.append
+                cellIAndTToExchange.append
                 (
                     globalTransforms_.encode(cellI, transformIndex)
                 );
 
-                bbsToExchange.append(cellBb);
+                cellBbsToExchange.append(cellBb);
 
-                procToDistributeTo.append(origProc);
+                procToDistributeCellTo.append(origProc);
             }
         }
     }
 
-    buildMap(procToDistributeTo);
+    buildMap(cellMapPtr_, procToDistributeCellTo);
 
     // Needed for reverseDistribute
-    label preDistributionSize = procToDistributeTo.size();
+    label preDistributionCellMapSize = procToDistributeCellTo.size();
 
-    map().distribute(bbsToExchange);
+    cellMap().distribute(cellBbsToExchange);
 
-    map().distribute(globalIAndTToExchange);
+    cellMap().distribute(cellIAndTToExchange);
 
     // Determine labelList specifying only cells that are in range of
     // a coupled boundary to build an octree limited to these cells.
@@ -534,27 +572,27 @@ Foam::InteractionLists<ParticleType>::InteractionLists
         100.0
     );
 
-    ril_.setSize(bbsToExchange.size());
+    ril_.setSize(cellBbsToExchange.size());
 
     // This needs to be a boolList, not PackedBoolList if
     // reverseDistribute is called.
-    boolList bbRequiredByAnyCell(bbsToExchange.size(), false);
+    boolList cellBbRequiredByAnyCell(cellBbsToExchange.size(), false);
 
     Info<< "    Building referred interaction lists" << endl;
 
-    forAll(bbsToExchange, bbI)
+    forAll(cellBbsToExchange, bbI)
     {
-        const labelPair& giat = globalIAndTToExchange[bbI];
+        const labelPair& ciat = cellIAndTToExchange[bbI];
 
         const vector& transform = globalTransforms_.transform
         (
-            globalTransforms_.transformIndex(giat)
+            globalTransforms_.transformIndex(ciat)
         );
 
         treeBoundBox extendedBb
         (
-            bbsToExchange[bbI].min() - interactionVec - transform,
-            bbsToExchange[bbI].max() + interactionVec - transform
+            cellBbsToExchange[bbI].min() - interactionVec - transform,
+            cellBbsToExchange[bbI].max() + interactionVec - transform
         );
 
         // Find all elements intersecting box.
@@ -565,7 +603,7 @@ Foam::InteractionLists<ParticleType>::InteractionLists
 
         if (!interactingElems.empty())
         {
-            bbRequiredByAnyCell[bbI] = true;
+            cellBbRequiredByAnyCell[bbI] = true;
         }
 
         ril_[bbI].setSize(interactingElems.size(), -1);
@@ -593,47 +631,47 @@ Foam::InteractionLists<ParticleType>::InteractionLists
     // i.e. it, is as if the cell had never been referred in the first
     // place.
 
-    inplaceSubset(bbRequiredByAnyCell, ril_);
+    inplaceSubset(cellBbRequiredByAnyCell, ril_);
 
     // Send information about which cells are actually required back
     // to originating processors.
 
-    // At this point, bbsToExchange does not need to be maintained
+    // At this point, cellBbsToExchange does not need to be maintained
     // or distributed as it is not longer needed.
 
-    bbsToExchange.setSize(0);
+    cellBbsToExchange.setSize(0);
 
-    map().reverseDistribute
+    cellMap().reverseDistribute
     (
-        preDistributionSize,
-        bbRequiredByAnyCell
+        preDistributionCellMapSize,
+        cellBbRequiredByAnyCell
     );
 
-    map().reverseDistribute
+    cellMap().reverseDistribute
     (
-        preDistributionSize,
-        globalIAndTToExchange
+        preDistributionCellMapSize,
+        cellIAndTToExchange
     );
 
     // Perform ordering of cells to send, this invalidates the
-    // previous value of preDistributionSize.
+    // previous value of preDistributionCellMapSize.
 
-    preDistributionSize = -1;
+    preDistributionCellMapSize = -1;
 
     // Move all of the used cells to refer to the start of the list
     // and truncate it
 
-    inplaceSubset(bbRequiredByAnyCell, globalIAndTToExchange);
+    inplaceSubset(cellBbRequiredByAnyCell, cellIAndTToExchange);
 
-    inplaceSubset(bbRequiredByAnyCell, procToDistributeTo);
+    inplaceSubset(cellBbRequiredByAnyCell, procToDistributeCellTo);
 
-    preDistributionSize = procToDistributeTo.size();
+    preDistributionCellMapSize = procToDistributeCellTo.size();
 
     // Rebuild mapDistribute with only required referred cells
-    buildMap(procToDistributeTo);
+    buildMap(cellMapPtr_, procToDistributeCellTo);
 
     // Store cellIndexAndTransformToDistribute
-    cellIndexAndTransformToDistribute_.transfer(globalIAndTToExchange);
+    cellIndexAndTransformToDistribute_.transfer(cellIAndTToExchange);
 
     // Determine inverse addressing for referred cells
 
@@ -662,9 +700,78 @@ Foam::InteractionLists<ParticleType>::InteractionLists
         rilInverse_[cellI].transfer(rilInverseTemp[cellI]);
     }
 
-    // Direct interaction list and direct wall faces
+    // Determine which wall faces to refer
 
-    Info<< "    Building direct interaction lists" << endl;
+    // Determine the index of all of the wall faces on this processor
+    DynamicList<label> localWallFaces;
+
+    forAll(mesh_.boundaryMesh(), patchI)
+    {
+        const polyPatch& patch = mesh_.boundaryMesh()[patchI];
+
+        if (isA<wallPolyPatch>(patch))
+        {
+            localWallFaces.append(identity(patch.size()) + patch.start());
+        }
+    }
+
+    treeBoundBoxList wallFaceBbs(localWallFaces.size());
+
+    forAll(wallFaceBbs, i)
+    {
+        wallFaceBbs[i] = treeBoundBox
+        (
+            mesh_.faces()[localWallFaces[i]].points(mesh_.points())
+        );
+    }
+
+    // IAndT: index and transform
+    DynamicList<labelPair> wallFaceIAndTToExchange;
+
+    DynamicList<treeBoundBox> wallFaceBbsToExchange;
+
+    DynamicList<label> procToDistributeWallFaceTo;
+
+    forAll(extendedProcBbsInRange, ePBIRI)
+    {
+        const treeBoundBox& otherExtendedProcBb =
+        extendedProcBbsInRange[ePBIRI];
+
+        label transformIndex = extendedProcBbsTransformIndex[ePBIRI];
+
+        label origProc = extendedProcBbsOrigProc[ePBIRI];
+
+        forAll(wallFaceBbs, i)
+        {
+            const treeBoundBox& wallFaceBb = wallFaceBbs[i];
+
+            if (wallFaceBb.overlaps(otherExtendedProcBb))
+            {
+                // This wall face is in range of the Bb of the other
+                // processor Bb, and so needs to be referred to it
+
+                label wallFaceI = localWallFaces[i];
+
+                wallFaceIAndTToExchange.append
+                (
+                    globalTransforms_.encode(wallFaceI, transformIndex)
+                );
+
+                wallFaceBbsToExchange.append(wallFaceBb);
+
+                procToDistributeWallFaceTo.append(origProc);
+            }
+        }
+    }
+
+    buildMap(wallFaceMapPtr_, procToDistributeWallFaceTo);
+
+    // Needed for reverseDistribute
+    label preDistributionWallFaceMapSize = procToDistributeWallFaceTo.size();
+
+    wallFaceMap().distribute(wallFaceBbsToExchange);
+
+    wallFaceMap().distribute(wallFaceIAndTToExchange);
 
     indexedOctree<treeDataCell> allCellsTree
     (
@@ -675,21 +782,145 @@ Foam::InteractionLists<ParticleType>::InteractionLists
         100.0
     );
 
-    DynamicList<label> localWallFaces;
+    rwfil_.setSize(wallFaceBbsToExchange.size());
 
-    forAll(mesh.boundaryMesh(), patchI)
+    // This needs to be a boolList, not PackedBoolList if
+    // reverseDistribute is called.
+    boolList wallFaceBbRequiredByAnyCell(wallFaceBbsToExchange.size(), false);
+
+    forAll(wallFaceBbsToExchange, bbI)
     {
-        const polyPatch& patch = mesh.boundaryMesh()[patchI];
+        const labelPair& wfiat = wallFaceIAndTToExchange[bbI];
 
-        if (isA<wallPolyPatch>(patch))
+        const vector& transform = globalTransforms_.transform
+        (
+            globalTransforms_.transformIndex(wfiat)
+        );
+
+        treeBoundBox extendedBb
+        (
+            wallFaceBbsToExchange[bbI].min() - interactionVec - transform,
+            wallFaceBbsToExchange[bbI].max() + interactionVec - transform
+        );
+
+        // Find all elements intersecting box.
+        labelList interactingElems
+        (
+            coupledPatchRangeTree.findBox(extendedBb)
+        );
+
+        if (!interactingElems.empty())
         {
-            localWallFaces.append(identity(patch.size()) + patch.start());
+            wallFaceBbRequiredByAnyCell[bbI] = true;
+        }
+
+        rwfil_[bbI].setSize(interactingElems.size(), -1);
+
+        forAll(interactingElems, i)
+        {
+            label elemI = interactingElems[i];
+
+            // Here, a more detailed geometric test could be applied,
+            // i.e. a more accurate bounding volume like a OBB or
+            // convex hull or an exact geometrical test.
+
+            label c = coupledPatchRangeTree.shapes().cellLabels()[elemI];
+
+            rwfil_[bbI][i] = c;
+        }
+    }
+
+    // Perform subset of rwfil_, to remove any referred wallFaces that do
+    // not interact.  They will not be sent from originating
+    // processors.  This assumes that the disappearance of the wallFace
+    // from the sending list of the source processor, simply removes
+    // the referred wallFace from the rwfil_, all of the subsequent indices
+    // shuffle down one, but the order and structure is preserved,
+    // i.e. it, is as if the wallFace had never been referred in the first
+    // place.
+
+    inplaceSubset(wallFaceBbRequiredByAnyCell, rwfil_);
+
+    // Send information about which wallFaces are actually required
+    // back to originating processors.
+
+    // At this point, wallFaceBbsToExchange does not need to be
+    // maintained or distributed as it is not longer needed.
+
+    wallFaceBbsToExchange.setSize(0);
+
+    wallFaceMap().reverseDistribute
+    (
+        preDistributionWallFaceMapSize,
+        wallFaceBbRequiredByAnyCell
+    );
+
+    wallFaceMap().reverseDistribute
+    (
+        preDistributionWallFaceMapSize,
+        wallFaceIAndTToExchange
+    );
+
+    // Perform ordering of wallFaces to send, this invalidates the
+    // previous value of preDistributionWallFaceMapSize.
+
+    preDistributionWallFaceMapSize = -1;
+
+    // Move all of the used wallFaces to refer to the start of the
+    // list and truncate it
+
+    inplaceSubset(wallFaceBbRequiredByAnyCell, wallFaceIAndTToExchange);
+
+    inplaceSubset(wallFaceBbRequiredByAnyCell, procToDistributeWallFaceTo);
+
+    preDistributionWallFaceMapSize = procToDistributeWallFaceTo.size();
+
+    // Rebuild mapDistribute with only required referred wallFaces
+    buildMap(wallFaceMapPtr_, procToDistributeWallFaceTo);
+
+    // Store wallFaceIndexAndTransformToDistribute
+    wallFaceIndexAndTransformToDistribute_.transfer(wallFaceIAndTToExchange);
+
+    // Refer wall faces to the appropriate processor
+    referredWallFaces_.setSize(wallFaceIndexAndTransformToDistribute_.size());
+
+    forAll(referredWallFaces_, rwfI)
+    {
+        const labelPair& wfiat = wallFaceIndexAndTransformToDistribute_[rwfI];
+
+        label wallFaceIndex = globalTransforms_.index(wfiat);
+
+        const vector& transform = globalTransforms_.transform
+        (
+            globalTransforms_.transformIndex(wfiat)
+        );
+
+        Tuple2<face, pointField>& referredWallFace = referredWallFaces_[rwfI];
+
+        const labelList& facePts = mesh_.faces()[wallFaceIndex];
+
+        referredWallFace.first() = face(identity(facePts.size()));
+
+        referredWallFace.second().setSize(facePts.size());
+
+        forAll(facePts, fPtI)
+        {
+            referredWallFace.second()[fPtI] =
+            mesh_.points()[facePts[fPtI]] - transform;
         }
     }
 
+    wallFaceMap().distribute(referredWallFaces_);
+
+    writeReferredWallFaces();
+
+    // Direct interaction list and direct wall faces
+
+    Info<< "    Building direct interaction lists" << endl;
+
     indexedOctree<treeDataFace> wallFacesTree
     (
-        treeDataFace(true, mesh, localWallFaces),
+        treeDataFace(true, mesh_, localWallFaces),
         procBbRndExt,
         8,              // maxLevel,
         10,             // leafSize,
@@ -698,7 +929,7 @@ Foam::InteractionLists<ParticleType>::InteractionLists
 
     dil_.setSize(mesh_.nCells());
 
-    directWallFaces_.setSize(mesh.nCells());
+    dwfil_.setSize(mesh_.nCells());
 
     forAll(cellBbs, cellI)
     {
@@ -742,7 +973,7 @@ Foam::InteractionLists<ParticleType>::InteractionLists
         // Find all wall faces intersecting extendedBb
         interactingElems = wallFacesTree.findBox(extendedBb);
 
-        directWallFaces_[cellI].setSize(interactingElems.size(), -1);
+        dwfil_[cellI].setSize(interactingElems.size(), -1);
 
         forAll(interactingElems, i)
         {
@@ -750,7 +981,7 @@ Foam::InteractionLists<ParticleType>::InteractionLists
 
             label f = wallFacesTree.shapes().faceLabels()[elemI];
 
-            directWallFaces_[cellI][i] = f;
+            dwfil_[cellI][i] = f;
         }
     }
 }
@@ -766,7 +997,7 @@ Foam::InteractionLists<ParticleType>::~InteractionLists()
 // * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
 
 template<class ParticleType>
-void Foam::InteractionLists<ParticleType>::sendReferredParticles
+void Foam::InteractionLists<ParticleType>::sendReferredData
 (
     const List<DynamicList<ParticleType*> >& cellOccupancy,
     PstreamBuffers& pBufs
@@ -774,14 +1005,12 @@ void Foam::InteractionLists<ParticleType>::sendReferredParticles
 {
     prepareParticlesToRefer(cellOccupancy);
 
-    // Stream data into buffer
     for (label domain = 0; domain < Pstream::nProcs(); domain++)
     {
-        const labelList& subMap = map().subMap()[domain];
+        const labelList& subMap = cellMap().subMap()[domain];
 
         if (subMap.size())
         {
-            // Put data into send buffer
             UOPstream toDomain(domain, pBufs);
 
             UIndirectList<IDLList<ParticleType> > subMappedParticles
@@ -803,18 +1032,18 @@ void Foam::InteractionLists<ParticleType>::sendReferredParticles
 
 
 template<class ParticleType>
-void Foam::InteractionLists<ParticleType>::receiveReferredParticles
+void Foam::InteractionLists<ParticleType>::receiveReferredData
 (
     PstreamBuffers& pBufs
 )
 {
     Pstream::waitRequests();
 
-    referredParticles_.setSize(map().constructSize());
+    referredParticles_.setSize(cellMap().constructSize());
 
     for (label domain = 0; domain < Pstream::nProcs(); domain++)
     {
-        const labelList& constructMap = map().constructMap()[domain];
+        const labelList& constructMap = cellMap().constructMap()[domain];
 
         if (constructMap.size())
         {
diff --git a/src/lagrangian/basic/InteractionLists/InteractionLists.H b/src/lagrangian/basic/InteractionLists/InteractionLists.H
index 3746914f2078542870a247c7ac024fbb855b4da6..dc99558e44bb44b636129e6101188392bc25e661 100644
--- a/src/lagrangian/basic/InteractionLists/InteractionLists.H
+++ b/src/lagrangian/basic/InteractionLists/InteractionLists.H
@@ -38,9 +38,9 @@ Description
 
     @verbatim
     PstreamBuffers pBufs(Pstream::nonBlocking);
-    il_.sendReferredParticles(cellOccupancy_, pBufs);
+    il_.sendReferredData(cellOccupancy_, pBufs);
     // Do other things
-    il_.receiveReferredParticles(pBufs);
+    il_.receiveReferredData(pBufs);
     @endverbatim
 
     Requiring data:
@@ -62,6 +62,7 @@ SourceFiles
 #include "polyMesh.H"
 #include "globalIndexAndTransform.H"
 #include "indexedOctree.H"
+#include "Tuple2.H"
 #include "treeDataCell.H"
 #include "treeDataFace.H"
 #include "mapDistribute.H"
@@ -91,8 +92,11 @@ class InteractionLists
         //  with the referred particles, hence gets written out
         const Switch writeCloud_;
 
-        //- mapDistribute to exchange particles
-        autoPtr<mapDistribute> mapPtr_;
+        //- mapDistribute to exchange referred particles into referred cells
+        autoPtr<mapDistribute> cellMapPtr_;
+
+        //- mapDistribute to exchange wall face data
+        autoPtr<mapDistribute> wallFaceMapPtr_;
 
         //- Storage and encoding/decoding for all possible transforms
         //  of the geometry
@@ -105,12 +109,12 @@ class InteractionLists
         labelListList dil_;
 
         //- Wall faces on this processor that are in interaction range
-        //  of each each cell
-        labelListList directWallFaces_;
+        //  of each each cell (direct wall face interaction list)
+        labelListList dwfil_;
 
         //- Referred interaction list - which real cells are to be
-        //  supplied with particles from the referred particle
-        //  container with the same index.
+        //  supplied with particle interactions from the referred
+        //  particle container with the same index.
         labelListList ril_;
 
         //- Inverse addressing for referred cells, specifies which
@@ -119,10 +123,22 @@ class InteractionLists
         //  indexed in this container.
         labelListList rilInverse_;
 
-        //- Which cells are to be sent via the map, and an index
+        //- Which real cells on this on this processor are in
+        //  interaction range of each referred wall face (referred
+        //  wall face interaction list)
+        labelListList rwfil_;
+
+        //- Which cells are to be sent via the cellMap, and an index
         //  specifying how they should be transformed.
         List<labelPair> cellIndexAndTransformToDistribute_;
 
+        //- Which wallFaces are to be sent via the wallFaceMap, and an index
+        //  specifying how they should be transformed.
+        List<labelPair> wallFaceIndexAndTransformToDistribute_;
+
+        //- Referred wall faces
+        List<Tuple2<face, pointField> > referredWallFaces_;
+
         //- Referred particle container
         List<IDLList<ParticleType> > referredParticles_;
 
@@ -141,8 +157,13 @@ class InteractionLists
             List<label>& extendedProcBbsOrigProc
         );
 
-        //- Build the mapDistribute
-        void buildMap(const List<label>& toProc);
+        //- Build the mapDistribute from information about which entry
+        //  is to be sent to which processor
+        void buildMap
+        (
+            autoPtr<mapDistribute>& mapPtr,
+            const List<label>& toProc
+        );
 
         //- Fill the referredParticles container with particles that
         //  will be referred
@@ -155,12 +176,15 @@ class InteractionLists
         void prepareParticleToBeReferred
         (
             ParticleType* particle,
-            labelPair giat
+            labelPair iat
         );
 
         //- Fill the referredParticles so that it will be written out
         void fillReferredParticleCloud();
 
+        //- Write the referred wall faces out for debug
+        void writeReferredWallFaces() const;
+
         //- Disallow default bitwise copy construct
         InteractionLists(const InteractionLists&);
 
@@ -187,23 +211,28 @@ public:
 
     // Member Functions
 
-        //- Prepare and send referred particles, nonBlocking communication
-        void sendReferredParticles
+        //- Prepare and send referred particles and wall data,
+        //  nonBlocking communication
+        void sendReferredData
         (
             const List<DynamicList<ParticleType*> >& cellOccupancy,
             PstreamBuffers& pBufs
         );
 
-        //- Receive referred particles
-        void receiveReferredParticles(PstreamBuffers& pBufs);
+        //- Receive referred data
+        void receiveReferredData(PstreamBuffers& pBufs);
+
 
         // Access
 
             //- Return access to the mesh
             inline const polyMesh& mesh() const;
 
-            //- Return access to the mapDistribute
-            inline const mapDistribute& map() const;
+            //- Return access to the cellMap
+            inline const mapDistribute& cellMap() const;
+
+            //- Return access to the wallFaceMap
+            inline const mapDistribute& wallFaceMap() const;
 
             //- Return access to the globalTransforms
             inline const globalIndexAndTransform& globalTransforms() const;
@@ -211,8 +240,8 @@ public:
             //- Return access to the direct interaction list
             inline const labelListList& dil() const;
 
-            //- Return access to the direct wall faces
-            inline const labelListList& directWallFaces() const;
+            //- Return access to the direct wall face interaction list
+            inline const labelListList& dwfil() const;
 
             //- Return access to the referred interaction list
             inline const labelListList& ril() const;
@@ -220,16 +249,27 @@ public:
             //- Return access to the inverse referred interaction list
             inline const labelListList& rilInverse() const;
 
+            //- Return access to the referred wall face interaction list
+            inline const labelListList& rwfil() const;
+
             //- Return access to the cellIndexAndTransformToDistribute list
             inline const List<labelPair>&
             cellIndexAndTransformToDistribute() const;
 
+            //- Return access to the wallFaceIndexAndTransformToDistribute list
+            inline const List<labelPair>&
+            wallFaceIndexAndTransformToDistribute() const;
+
+            //- Return access to the referred wall faces
+            const List<Tuple2<face, pointField> >& referredWallFaces() const;
+
             //- Return access to the referred particle container
             inline const List<IDLList<ParticleType> >&
             referredParticles() const;
 
             //- Return non-const access to the referred particle container
             inline List<IDLList<ParticleType> >& referredParticles();
+
 };
 
 
diff --git a/src/lagrangian/basic/InteractionLists/InteractionListsI.H b/src/lagrangian/basic/InteractionLists/InteractionListsI.H
index 2cae738240f7a92c4692b942839a76530ae4749e..26a49eede30f3ffe65cf7a2e4c2fb2ba4b83b3ac 100644
--- a/src/lagrangian/basic/InteractionLists/InteractionListsI.H
+++ b/src/lagrangian/basic/InteractionLists/InteractionListsI.H
@@ -36,9 +36,17 @@ const Foam::polyMesh& Foam::InteractionLists<ParticleType>::mesh() const
 
 template<class ParticleType>
 const Foam::mapDistribute&
-Foam::InteractionLists<ParticleType>::map() const
+Foam::InteractionLists<ParticleType>::cellMap() const
 {
-    return mapPtr_();
+    return cellMapPtr_();
+}
+
+
+template<class ParticleType>
+const Foam::mapDistribute&
+Foam::InteractionLists<ParticleType>::wallFaceMap() const
+{
+    return wallFaceMapPtr_();
 }
 
 
@@ -59,9 +67,9 @@ const Foam::labelListList& Foam::InteractionLists<ParticleType>::dil() const
 
 template<class ParticleType>
 const Foam::labelListList&
-Foam::InteractionLists<ParticleType>::directWallFaces() const
+Foam::InteractionLists<ParticleType>::dwfil() const
 {
-    return directWallFaces_;
+    return dwfil_;
 }
 
 
@@ -72,6 +80,13 @@ const Foam::labelListList& Foam::InteractionLists<ParticleType>::ril() const
 }
 
 
+template<class ParticleType>
+const Foam::labelListList& Foam::InteractionLists<ParticleType>::rwfil() const
+{
+    return rwfil_;
+}
+
+
 template<class ParticleType>
 const Foam::List<Foam::labelPair>&
 Foam::InteractionLists<ParticleType>::cellIndexAndTransformToDistribute() const
@@ -80,6 +95,15 @@ Foam::InteractionLists<ParticleType>::cellIndexAndTransformToDistribute() const
 }
 
 
+template<class ParticleType>
+const Foam::List<Foam::labelPair>&
+Foam::InteractionLists<ParticleType>::
+wallFaceIndexAndTransformToDistribute() const
+{
+    return wallFaceIndexAndTransformToDistribute_;
+}
+
+
 template<class ParticleType>
 const Foam::labelListList&
 Foam::InteractionLists<ParticleType>::rilInverse() const
@@ -88,6 +112,14 @@ Foam::InteractionLists<ParticleType>::rilInverse() const
 }
 
 
+template<class ParticleType>
+const Foam::List<Foam::Tuple2<Foam::face, Foam::pointField> >&
+Foam::InteractionLists<ParticleType>::referredWallFaces() const
+{
+    return referredWallFaces_;
+}
+
+
 template<class ParticleType>
 const Foam::List<Foam::IDLList<ParticleType> >&
 Foam::InteractionLists<ParticleType>::referredParticles() const
@@ -104,6 +136,4 @@ Foam::InteractionLists<ParticleType>::referredParticles()
 }
 
 
-
-
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C
index fd88481394876b6f0826675409358ffc2cf98121..c208a9c3efb7e2db225c20889d392f0077baf563 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C
@@ -61,11 +61,11 @@ void Foam::PairCollision<CloudType>::parcelInteraction()
 {
     PstreamBuffers pBufs(Pstream::nonBlocking);
 
-    il_.sendReferredParticles(cellOccupancy_, pBufs);
+    il_.sendReferredData(cellOccupancy_, pBufs);
 
     realRealInteraction();
 
-    il_.receiveReferredParticles(pBufs);
+    il_.receiveReferredData(pBufs);
 
     realReferredInteraction();
 }
@@ -173,7 +173,7 @@ void Foam::PairCollision<CloudType>::wallInteraction()
 
     const labelListList& dil = il_.dil();
 
-    const labelListList directWallFaces = il_.directWallFaces();
+    const labelListList directWallFaces = il_.dwfil();
 
     // const ReferredCellList<typename CloudType::parcelType>& ril = il_.ril();