diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C
index 083d622c043b4050cf8191911b70af8165ddc15a..a0965ff941f8b03fd8bae131981af9c5d2d900b8 100644
--- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C
+++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C
@@ -47,7 +47,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::writeIntersectionOBJ
     const pointField f1pts = f1.points(f1Points);
     const pointField f2pts = f2.points(f2Points);
 
-    Info<< "Face intersection area (" << count <<  "):" << nl
+    Pout<< "Face intersection area (" << count <<  "):" << nl
         << "    f1 face = " << f1 << nl
         << "    f1 pts  = " << f1pts << nl
         << "    f2 face = " << f2 << nl
@@ -95,7 +95,12 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::checkPatches
 
     // check bounds of source and target
     boundBox bbSrc(srcPatch.points(), srcPatch.meshPoints());
+    reduce(bbSrc.min(), minOp<point>());
+    reduce(bbSrc.max(), maxOp<point>());
+
     boundBox bbTgt(tgtPatch.points(), tgtPatch.meshPoints());
+    reduce(bbTgt.min(), minOp<point>());
+    reduce(bbTgt.max(), maxOp<point>());
 
     boundBox bbTgtInf(bbTgt);
     bbTgtInf.inflate(maxBoundsError);
@@ -222,7 +227,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::distributePatches
                 pp.points()
             );
 
-            if (debug)
+            if (debug & 2)
             {
                 Pout<< "distributePatches: to processor " << domain
                     << " sending faces " << subPatch.faceCentres() << endl;
@@ -253,7 +258,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::distributePatches
         );
 
         // Receive
-        if (debug)
+        if (debug & 2)
         {
             Pout<< "distributePatches: to processor " << Pstream::myProcNo()
                 << " sending faces " << subPatch.faceCentres() << endl;
@@ -441,6 +446,18 @@ Foam::AMIInterpolation<SourcePatch, TargetPatch>::calcProcMap
     Pstream::gatherList(procBb);
     Pstream::scatterList(procBb);
 
+
+    if (debug)
+    {
+        Info<< "Determining extent of srcPatch per processor:" << nl
+            << "\tproc\tbb" << endl;
+        forAll(procBb, procI)
+        {
+            Info<< '\t' << procI << '\t' << procBb[procI] << endl;
+        }
+    }
+
+
     // Determine which faces of tgtPatch overlaps srcPatch per proc
     const faceList& faces = tgtPatch.localFaces();
     const pointField& points = tgtPatch.localPoints();
@@ -481,6 +498,17 @@ Foam::AMIInterpolation<SourcePatch, TargetPatch>::calcProcMap
         }
     }
 
+    // Debug printing
+    if (debug)
+    {
+        Pout<< "Of my " << faces.size() << " I need to send to:" << nl
+            << "\tproc\tfaces" << endl;
+        forAll(sendMap, procI)
+        {
+            Pout<< '\t' << procI << '\t' << sendMap[procI].size() << endl;
+        }
+    }
+
 
     // Send over how many faces I need to receive
     labelListList sendSizes(Pstream::nProcs());
@@ -616,7 +644,7 @@ Foam::label Foam::AMIInterpolation<SourcePatch, TargetPatch>::findTargetFace
 
     if (debug)
     {
-        Info<< "Source point = " << srcPt << ", Sample point = "
+        Pout<< "Source point = " << srcPt << ", Sample point = "
             << sample.hitPoint() << ", Sample index = " << sample.index()
             << endl;
     }
@@ -753,7 +781,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::setNextFaces
         // perform new search to find match
         if (debug)
         {
-            Info<< "Advancing front stalled: searching for new "
+            Pout<< "Advancing front stalled: searching for new "
                 << "target face" << endl;
         }
 
@@ -854,6 +882,21 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::calcAddressing
                 << srcPatch.size() << ", target faces = " << tgtPatch.size()
                 << endl;
         }
+    }
+
+    if (!srcPatch.size())
+    {
+        return;
+    }
+    else if (!tgtPatch.size())
+    {
+        WarningIn
+        (
+            "AMIInterpolation::calcAddressing"
+            "(const primitivePatch&, const primitivePatch&, "
+            " label, label)"
+        ) << "Have " << srcPatch.size() << " source faces but no target faces."
+          << endl;
 
         return;
     }
@@ -901,7 +944,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::calcAddressing
 
     if (debug)
     {
-        Info<< "AMI: initial target face = " << tgtFaceI << endl;
+        Pout<< "AMI: initial target face = " << tgtFaceI << endl;
     }
 
 
@@ -1312,7 +1355,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::agglomerate
         "source",
         srcAddress,
         srcWeights,
-        true
+        false
     );
 }
 
@@ -1716,6 +1759,16 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::update
         normaliseWeights(srcMagSf_, "source", srcAddress_, srcWeights_, true);
         normaliseWeights(tgtMagSf_, "target", tgtAddress_, tgtWeights_, true);
     }
+
+    if (debug)
+    {
+        Info<< "AMIInterpolation : Constructed addressing and weights." << nl
+            << "    triMode        :" << triMode_ << nl
+            << "    singlePatchProc:" << singlePatchProc_ << nl
+            << "    srcMagSf       :" << gSum(srcMagSf_) << nl
+            << "    tgtMagSf       :" << gSum(tgtMagSf_) << nl
+            << endl;
+    }
 }