 +			diffbufPair[2] = '\0';
 +		}
 +		ztzSeparator = "\tZT:Z:";
-+		snprintf(ztzbuf, 1024, "%d,%s,%s,%d,%d,%d,%lld,%lld,%d,%d",
++		snprintf(ztzbuf, 1024, "%d,%s,%s,%d,%d,%d,%lld,%lld,%d,%d,%d,%d",
 +				 -features.bestScore,
 +				 diffbuf,
 +				 diffbufPair,

 
     popularSeedsSkipped = 0;
 
@@ -390,6 +390,7 @@ Return Value:
     lvScoresAfterBestFound = 0;
     probabilityOfAllCandidates = 0.0;
     probabilityOfBestCandidate = 0.0;
+	minHashTableHits[FORWARD] = minHashTableHits[RC] = maxHitsToConsider;
 
     scoreLimit = maxK + extraSearchDepth; // For MAPQ computation
 
@@ -471,6 +472,9 @@ Return Value:
 
         nHashTableLookups++;
         lookupsThisRun++;
+        hitsThisRun += (nHits[FORWARD] + nHits[RC]);
+		minHashTableHits[FORWARD] = min(minHashTableHits[FORWARD], nHits[FORWARD]);
+		minHashTableHits[RC] = min(minHashTableHits[RC], nHits[RC]);
 
 
 #ifdef  _DEBUG
@@ -762,8 +766,23 @@ Return Value:
                 // answer.
                 //
                 primaryResult->score = bestScore;
+				_int64 minHits = min(minHashTableHits[FORWARD], minHashTableHits[RC]);
+				_int64 minHitsInDirection = minHashTableHits[primaryResult->direction];
                 if (bestScore <= maxK) {
                     primaryResult->location = bestScoreGenomeLocation;
+					float hitsPerLookup = (float)hitsThisRun / lookupsThisRun;

                                 bestPairScore = pairScore;
                                 probabilityOfBestPair = pairProbability;
                                 bestResultGenomeLocation[readWithFewerHits] = candidate->readWithFewerHitsGenomeLocation + fewerEndGenomeLocationOffset;
@@ -771,6 +780,9 @@ IntersectingPairedEndAligner::align(
 
                                 isBestHit = true;
                             } else {
