diff --git a/src/overset/cellCellStencil/inverseDistance/inverseDistanceCellCellStencil.C b/src/overset/cellCellStencil/inverseDistance/inverseDistanceCellCellStencil.C
index a595d80d15c4889520427226109d48ed661490a9..4915401d461543862474afb6085a58b1e217c5f3 100644
--- a/src/overset/cellCellStencil/inverseDistance/inverseDistanceCellCellStencil.C
+++ b/src/overset/cellCellStencil/inverseDistance/inverseDistanceCellCellStencil.C
@@ -564,7 +564,7 @@ void Foam::cellCellStencils::inverseDistance::markDonors
     forAll(tgtCellMap, tgtCelli)
     {
         label celli = tgtCellMap[tgtCelli];
-        if (allStencil[celli].empty())
+        if (srcOverlapProcs.size())
         {
             treeBoundBox subBb(cellBb(mesh_, celli));
             subBb.min() -= smallVec_;
diff --git a/src/overset/cellCellStencil/trackingInverseDistance/trackingInverseDistanceCellCellStencil.C b/src/overset/cellCellStencil/trackingInverseDistance/trackingInverseDistanceCellCellStencil.C
index 6f6ffdedc84b5ac853511eef3595c8d402c78cc3..4f3ba709cacc8de0cc16457b66192d041201899f 100644
--- a/src/overset/cellCellStencil/trackingInverseDistance/trackingInverseDistanceCellCellStencil.C
+++ b/src/overset/cellCellStencil/trackingInverseDistance/trackingInverseDistanceCellCellStencil.C
@@ -322,6 +322,7 @@ void Foam::cellCellStencils::trackingInverseDistance::markDonors
     PstreamBuffers& pBufs,
     const List<treeBoundBoxList>& meshBb,
     const PtrList<voxelMeshSearch>& meshSearches,
+    const labelList& allCellTypes,
 
     const label srcI,
     const label tgtI,
@@ -344,13 +345,19 @@ void Foam::cellCellStencils::trackingInverseDistance::markDonors
         forAll(tgtCellMap, tgtCelli)
         {
             label srcCelli = meshSearch.findCell(tgtCc[tgtCelli]);
-            if (srcCelli != -1)
+            if (srcCelli != -1 && allCellTypes[srcCellMap[srcCelli]] != HOLE)
             {
-                label globalDonor = globalCells_.toGlobal(srcCellMap[srcCelli]);
                 label celli = tgtCellMap[tgtCelli];
-                allStencil[celli].setSize(1);
-                allStencil[celli][0] = globalDonor;
-                allDonor[celli] = srcI;
+
+                // TBD: check for multiple donors. Maybe better one? For
+                //      now check 'nearer' mesh
+                if (betterDonor(tgtI, allDonor[celli], srcI))
+                {
+                    allStencil[celli].setSize(1);
+                    allStencil[celli][0] =
+                        globalCells_.toGlobal(srcCellMap[srcCelli]);
+                    allDonor[celli] = srcI;
+                }
             }
         }
     }
@@ -393,9 +400,11 @@ void Foam::cellCellStencils::trackingInverseDistance::markDonors
     forAll(tgtCellMap, tgtCelli)
     {
         label celli = tgtCellMap[tgtCelli];
-        if (allStencil[celli].empty())
+        if (srcOverlapProcs.size())
         {
-            const treeBoundBox subBb(cellBb(mesh_, celli));
+            treeBoundBox subBb(cellBb(mesh_, celli));
+            subBb.min() -= smallVec_;
+            subBb.max() += smallVec_;
 
             forAll(srcOverlapProcs, i)
             {
@@ -434,7 +443,7 @@ void Foam::cellCellStencils::trackingInverseDistance::markDonors
         forAll(samples, sampleI)
         {
             label srcCelli = meshSearch.findCell(samples[sampleI]);
-            if (srcCelli != -1)
+            if (srcCelli != -1 && allCellTypes[srcCellMap[srcCelli]] != HOLE)
             {
                 donors[sampleI] = globalCells_.toGlobal(srcCellMap[srcCelli]);
             }
@@ -469,7 +478,7 @@ void Foam::cellCellStencils::trackingInverseDistance::markDonors
                 label celli = tgtCellMap[cellIDs[donorI]];
 
                 // TBD: check for multiple donors. Maybe better one?
-                if (allStencil[celli].empty())
+                if (betterDonor(tgtI, allDonor[celli], srcI))
                 {
                     allStencil[celli].setSize(1);
                     allStencil[celli][0] = globalDonor;
@@ -798,6 +807,7 @@ bool Foam::cellCellStencils::trackingInverseDistance::update()
                 pBufs,
                 meshBb,
                 meshSearches,
+                allCellTypes,   // to exclude hole donors
 
                 tgti,
                 srci,
@@ -809,6 +819,7 @@ bool Foam::cellCellStencils::trackingInverseDistance::update()
                 pBufs,
                 meshBb,
                 meshSearches,
+                allCellTypes,   // to exclude hole donors
 
                 srci,
                 tgti,
diff --git a/src/overset/cellCellStencil/trackingInverseDistance/trackingInverseDistanceCellCellStencil.H b/src/overset/cellCellStencil/trackingInverseDistance/trackingInverseDistanceCellCellStencil.H
index d5caa9acb6ab491dc8fd3afe56e45e1fad950edd..9504e8da3a773368c4fa307015fac4d82e3fc14b 100644
--- a/src/overset/cellCellStencil/trackingInverseDistance/trackingInverseDistanceCellCellStencil.H
+++ b/src/overset/cellCellStencil/trackingInverseDistance/trackingInverseDistanceCellCellStencil.H
@@ -108,6 +108,7 @@ protected:
             PstreamBuffers& pBufs,
             const List<treeBoundBoxList>& meshBb,
             const PtrList<voxelMeshSearch>& meshSearches,
+            const labelList& allCellTypes,
 
             const label srcI,
             const label tgtI,