diff --git a/src/utils/BinTree/BinTree.cpp b/src/utils/BinTree/BinTree.cpp
index 36e5b36e9e02f8deeb9997bc0614f1ed11769ec2..12da7a1e0427f3f92e11934145a81e7cddedcd61 100644
--- a/src/utils/BinTree/BinTree.cpp
+++ b/src/utils/BinTree/BinTree.cpp
@@ -111,6 +111,7 @@ void BinTree::getHits(Record *record, RecordKeyList &hitSet)
 	if (_showBinMetrics) {
 		return; //don't care about query entries just yet.
 	}
+
     const QuickString &chr = record->getChrName();
 	mainMapType::iterator mainIter = _mainMap.find(chr);
 	if (mainIter == _mainMap.end()) {
@@ -173,7 +174,6 @@ bool BinTree::addRecordToTree(const Record *record)
 	uint32_t startPos = (uint32_t)(record->getStartPos());
 	uint32_t endPos = (uint32_t)(record->getEndPos());
 
-
 	//is this chr currently in the main map?
 	allBinsType bins = NULL;
 	mainMapType::iterator mainIter = _mainMap.find(chr);
diff --git a/src/utils/FileRecordTools/FileRecordMgr.cpp b/src/utils/FileRecordTools/FileRecordMgr.cpp
index 2931286eae615fc098a74939091e52be48485d23..08998aaa0f6f69ac8a2394e636774e13f313cfeb 100644
--- a/src/utils/FileRecordTools/FileRecordMgr.cpp
+++ b/src/utils/FileRecordTools/FileRecordMgr.cpp
@@ -124,7 +124,12 @@ Record *FileRecordMgr::allocateAndGetNextRecord()
 		_recordMgr->deleteRecord(record);
 		return NULL;
 	}
-
+	// In the rare case of Bam records where both the read and it's mate failed to map,
+	// Ignore the record. Delete and return null
+	if (record->isUnmapped() && record->isMateUnmapped()) {
+		_recordMgr->deleteRecord(record);
+		return NULL;
+	}
 	if (!record->coordsValid()) {
 		cerr << "Error: Invalid record in file " << _filename << ". Record is " << endl << *record << endl;
 		exit(1);
@@ -160,7 +165,7 @@ void FileRecordMgr::testInputSortOrder(Record *record)
 
 	// Special: For BAM records that aren't mapped, we actually don't want
 	// to test the sort order. Another ugly hack sponsored by the letters B, A, and M.
-	if (record->getType() == FileRecordTypeChecker::BAM_RECORD_TYPE && (static_cast<const BamRecord *>(record))->isUnmapped()) {
+	if (record->isUnmapped()) {
 		return;
 	}
 
@@ -269,9 +274,6 @@ bool FileRecordMgr::allocateAndGetNextMergedRecord(RecordKeyList & recList, WANT
 			startRecord = NULL;
 		}
 	}
-	if (startRecord->getStartPos() == 107071272) {
-		printf("Break point.\n");
-	}
 
 	// OK!! We have a start record!
 
diff --git a/src/utils/FileRecordTools/Records/BamRecord.cpp b/src/utils/FileRecordTools/Records/BamRecord.cpp
index 4b6286138d4542d5e80db48e91c8a316b92a8492..39096456be53b1289fb23ca965d8fe9749e5f957 100644
--- a/src/utils/FileRecordTools/Records/BamRecord.cpp
+++ b/src/utils/FileRecordTools/Records/BamRecord.cpp
@@ -44,6 +44,7 @@ bool BamRecord::initFromFile(BamFileReader *bamFileReader)
 
 	_bamAlignment = bamFileReader->getAlignment();
 	_isUnmapped = !_bamAlignment.IsMapped();
+	_isMateUnmapped = !_bamAlignment.IsMateMapped();
 	return true;
 }
 
diff --git a/src/utils/FileRecordTools/Records/Record.cpp b/src/utils/FileRecordTools/Records/Record.cpp
index f42031531f2a81eefc0b8f4c91b8b22c286b1ee0..e5bc1e6fb65ecd971708e13d7538fd4535908170 100644
--- a/src/utils/FileRecordTools/Records/Record.cpp
+++ b/src/utils/FileRecordTools/Records/Record.cpp
@@ -8,7 +8,8 @@ Record::Record()
   _endPos(-1),
   _strand(UNKNOWN),
   _zeroLength(false),
-  _isUnmapped(false)
+  _isUnmapped(false),
+  _isMateUnmapped(false)
 {
 }
 
@@ -38,7 +39,7 @@ void Record::clear() {
 	_endPosStr.clear();
 	_zeroLength = false;
 	_isUnmapped = false;
-
+	_isMateUnmapped = false;
 }
 
 void Record::setStrand(char val)
diff --git a/src/utils/FileRecordTools/Records/Record.h b/src/utils/FileRecordTools/Records/Record.h
index 47cf3b34b5803849b65f359846a332ca2abda908..9c5c3ff181d16360dbcea5a065e9b655bf1e14a9 100644
--- a/src/utils/FileRecordTools/Records/Record.h
+++ b/src/utils/FileRecordTools/Records/Record.h
@@ -91,6 +91,7 @@ public:
 	// because we want to short circuit the intersects method if either record is an unmapped
 	// Bam record.
 	bool isUnmapped() const { return _isUnmapped; }
+	bool isMateUnmapped() const { return _isMateUnmapped; }
 
 
 	virtual bool operator < (const Record &other) const;
@@ -132,6 +133,7 @@ protected:
 	strandType _strand;
 	bool _zeroLength;
 	bool _isUnmapped;
+	bool _isMateUnmapped;
 };