diff --git a/src/bedToBam/bedToBam.cpp b/src/bedToBam/bedToBam.cpp
index 41f5c021634771563ed694e209d5de2ceb0471b8..3c55809f42a9206a77ee963fb674eecd0a88cd4f 100755
--- a/src/bedToBam/bedToBam.cpp
+++ b/src/bedToBam/bedToBam.cpp
@@ -184,8 +184,7 @@ void DetermineBedInput(BedFile *bed, GenomeFile *genome, bool isBED12, int mapQu
 
 void ProcessBed(istream &bedInput, BedFile *bed, GenomeFile *genome, bool isBED12, int mapQual) {
 
-	// open the BAM file for writing.
-	BamWriter writer;
+	BamWriter *writer = new BamWriter();
 	
 	// build a BAM header from the genomeFile
 	RefVector refs;
@@ -193,37 +192,29 @@ void ProcessBed(istream &bedInput, BedFile *bed, GenomeFile *genome, bool isBED1
 	map<string, int, std::less<string> > chromToId;
 	MakeBamHeader(genome->getGenomeFileName(), refs, bamHeader, chromToId);
 	
-	// add the reference headers to the BAM file
-	writer.Open("stdout", bamHeader, refs);
-
-
-	string bedLine;                                                                                                                    
-	int lineNum = 0;					// current input line number
-	vector<string> bedFields;			// vector for a BED entry
-	bedFields.reserve(12);	
-		
-	// process each entry in A
-	while (getline(bedInput, bedLine)) {
-
-		lineNum++;
-		Tokenize(bedLine,bedFields);
-		
-		BED theBed;
-		BamAlignment theBam;
-		if (bed->parseLine(theBed, bedFields, lineNum)) {			
-			if (bed->bedType >= 4) {
-				ConvertBedToBam(theBed, theBam, chromToId, isBED12, mapQual, lineNum);
-				writer.SaveAlignment(theBam);
-			}
-			else {
-				cerr << "Error: BED entry without name found at line: " << lineNum << ".  Exiting!" << endl;
-				exit (1);
-			}
+	// open a BAM and add the reference headers to the BAM file
+	writer->Open("stdout", bamHeader, refs);
+	// open the BED file for reading.
+	bed->Open();
+
+	// process each BED entry and convert to BAM
+	BED bedEntry, nullBed;
+	int lineNum = 0;
+	while (bed->GetNextBed(bedEntry, lineNum)) {
+		BamAlignment bamEntry;
+		if (bed->bedType >= 4) {
+			ConvertBedToBam(bedEntry, bamEntry, chromToId, isBED12, mapQual, lineNum);
+			writer->SaveAlignment(bamEntry);
 		}
-		// reset for the next input line
-		bedFields.clear();
+		else {
+			cerr << "Error: BED entry without name found at line: " << lineNum << ".  Exiting!" << endl;
+			exit (1);
+		}
+		bedEntry = nullBed;
 	}
-	writer.Close();
+	// close up
+	bed->Close();
+	writer->Close();
 }
 
 
@@ -254,6 +245,8 @@ void ConvertBedToBam(const BED &bed, BamAlignment &bam, map<string, int, std::le
 	bam.InsertSize   = 0;
 	bam.MateRefID    = -1;
 	
+	bam.CigarData.clear();
+	
 	if (isBED12 == false) {
 		CigarOp cOp;
 		cOp.Type = 'M';
diff --git a/src/closestBed/closestBed.cpp b/src/closestBed/closestBed.cpp
index f339eec573821560c26858287fdf981bdae76c4e..5a016867e2c63e0446936687ba3d6b8907ef2562 100755
--- a/src/closestBed/closestBed.cpp
+++ b/src/closestBed/closestBed.cpp
@@ -178,7 +178,7 @@ void BedClosest::FindClosestBed() {
 	// that we can easily compare "A" to it for overlaps
 	_bedB->loadBedFileIntoMap();
 	
-	BED a;
+	BED a, nullBed;
 	int lineNum = 0;					// current input line number
 	vector<BED> hits;					// vector of potential hits
 	hits.reserve(100);
@@ -188,6 +188,7 @@ void BedClosest::FindClosestBed() {
 	while (_bedA->GetNextBed(a, lineNum)) {
 		FindWindowOverlaps(a, hits);
 		hits.clear();
+		a = nullBed;
 	}
 	_bedA->Close();
 }
diff --git a/src/coverageBed/coverageBed.cpp b/src/coverageBed/coverageBed.cpp
index 13f619394d34533b59a9001b242ec3e1ac477a42..176c4f945f0559c206b1b323cd94d268653b5018 100755
--- a/src/coverageBed/coverageBed.cpp
+++ b/src/coverageBed/coverageBed.cpp
@@ -56,11 +56,12 @@ void BedCoverage::CollectCoverageBed() {
 	_bedB->loadBedFileIntoMap();
 
 	int lineNum = 0;					// current input line number
-	BED a;		
+	BED a, nullBed;		
 	// process each entry in A
 	while (_bedA->GetNextBed(a, lineNum)) {
 		// count a as a hit with all the relevant features in B
 		_bedB->countHits(a, _forceStrand);
+		a = nullBed;
 	}	
 	
 	// report the coverage (summary or histogram) for BED B.
diff --git a/src/genomeCoverageBed/genomeCoverageBed.cpp b/src/genomeCoverageBed/genomeCoverageBed.cpp
index 1d845c807935cb24071a4febf256c06f7b267604..79ddfeb625f09cbe9ebd8371e951b7e2cc1babb5 100755
--- a/src/genomeCoverageBed/genomeCoverageBed.cpp
+++ b/src/genomeCoverageBed/genomeCoverageBed.cpp
@@ -58,7 +58,7 @@ void BedGenomeCoverage::CoverageBed() {
 	int currChromSize = 0;
 	int start, end;
 	
-	BED a;
+	BED a, nullBed;
 	int lineNum = 0;					// current input line number
 	
 	_bed->Open();
@@ -109,6 +109,7 @@ void BedGenomeCoverage::CoverageBed() {
 		}
 		prevChrom     = currChrom;
 		prevChromSize = currChromSize;
+		a = nullBed;
 	}
 	_bed->Close();
 	
diff --git a/src/intersectBed/intersectBed.cpp b/src/intersectBed/intersectBed.cpp
index 15491a6fdd0a8f77d6efa14d59819b13ff9db1a7..3137038a78fdb246cc41f837ea4fa7b27320d222 100755
--- a/src/intersectBed/intersectBed.cpp
+++ b/src/intersectBed/intersectBed.cpp
@@ -194,13 +194,14 @@ void BedIntersect::IntersectBed() {
 	int lineNum = 0;
 	vector<BED> hits;
 	hits.reserve(100);
-	BED a;	
+	BED a, nullBed;	
 	
 	// open the "A" file, process each BED entry and searh for overlaps.
 	_bedA->Open();
 	while (_bedA->GetNextBed(a, lineNum) == true) {
 		FindOverlaps(a, hits);
 		hits.clear();
+		a = nullBed;
 	}
 	_bedA->Close();
 	
diff --git a/src/linksBed/linksBed.cpp b/src/linksBed/linksBed.cpp
index 25097157f19d6a69330ac278cefc63f9289f7737..3f03f999604eea28fb7d7dc358a8db1bce8ddcd2 100755
--- a/src/linksBed/linksBed.cpp
+++ b/src/linksBed/linksBed.cpp
@@ -102,12 +102,13 @@ void BedLinks::CreateLinks() {
 	cout << "<h3>BED Entries from: stdin </h3>" << endl;
 	
 	int lineNum = 0;
-	BED bedEntry;
+	BED bedEntry, nullBed;
 
 	_bed->Open();
 	while (_bed->GetNextBed(bedEntry, lineNum)) {
 		bedEntry.count = 0;
 		WriteURL(bedEntry, base);
+		bedEntry = nullBed;
 	}
 	_bed->Close();
 
diff --git a/src/shuffleBed/shuffleBed.cpp b/src/shuffleBed/shuffleBed.cpp
index faa62d1ecf0db9263f483c041d299efb7cfa4375..4ed5ae1a821899f27ff9ecba7a666cdb187f4b00 100755
--- a/src/shuffleBed/shuffleBed.cpp
+++ b/src/shuffleBed/shuffleBed.cpp
@@ -67,12 +67,13 @@ BedShuffle::~BedShuffle(void) {
 void BedShuffle::Shuffle() {
 
 	int lineNum = 0;
-	BED bedEntry;     // used to store the current BED line from the BED file.
+	BED bedEntry, nullBed;     // used to store the current BED line from the BED file.
 	
 	_bed->Open();
 	while (_bed->GetNextBed(bedEntry, lineNum)) {
 		ChooseLocus(bedEntry);			
 		_bed->reportBedNewLine(bedEntry);
+		bedEntry = nullBed;
 	}
 	_bed->Close();
 }
diff --git a/src/slopBed/slopBed.cpp b/src/slopBed/slopBed.cpp
index 118eb758146e63f48d5f1e918d1309c24fda60e5..ddf2c4f6ef0afa626a7bef8b9e4f7827f4868ec5 100755
--- a/src/slopBed/slopBed.cpp
+++ b/src/slopBed/slopBed.cpp
@@ -37,12 +37,13 @@ BedSlop::~BedSlop(void) {
 void BedSlop::SlopBed() {
 	
 	int lineNum = 0;
-	BED bedEntry;     // used to store the current BED line from the BED file.
+	BED bedEntry, nullBed;     // used to store the current BED line from the BED file.
 
 	_bed->Open();
 	while (_bed->GetNextBed(bedEntry, lineNum)) {
 		AddSlop(bedEntry);
-		_bed->reportBedNewLine(bedEntry);			
+		_bed->reportBedNewLine(bedEntry);
+		bedEntry = nullBed;					
 	}
 	_bed->Close();
 }
diff --git a/src/subtractBed/subtractBed.cpp b/src/subtractBed/subtractBed.cpp
index 0bc3f7f3ea8a8df5ac3b3db83e55456603326691..aa571a0626743c24710f03743278dae14766215d 100755
--- a/src/subtractBed/subtractBed.cpp
+++ b/src/subtractBed/subtractBed.cpp
@@ -154,7 +154,7 @@ void BedSubtract::SubtractBed() {
 	// that we can easily compare "A" to it for overlaps
 	_bedB->loadBedFileIntoMap();
 
-	BED a;                                                                                                                    
+	BED a, nullBed;                                                                                                                    
 	int lineNum = 0;					// current input line number
 	vector<BED> hits;					// vector of potential hits	
 	// reserve some space
@@ -165,6 +165,7 @@ void BedSubtract::SubtractBed() {
 	while (_bedA->GetNextBed(a, lineNum)) {
 		FindAndSubtractOverlaps(a, hits);
 		hits.clear();
+		a = nullBed;
 	}
 	_bedA->Close();
 	
diff --git a/src/utils/bedFile/bedFile.cpp b/src/utils/bedFile/bedFile.cpp
index d0457bf307a350b52ab089fe9bb202ce4f3490b2..b8b4e521a1433bbd31a5eba7849d5394fe1eff66 100755
--- a/src/utils/bedFile/bedFile.cpp
+++ b/src/utils/bedFile/bedFile.cpp
@@ -658,7 +658,7 @@ bool BedFile::parseGffLine (BED &bed, const vector<string> &lineVector, int line
 
 void BedFile::loadBedFileIntoMap() {
 
-	BED bedEntry;
+	BED bedEntry, nullBed;
 	int lineNum = 0;
 	
 	Open();
@@ -667,6 +667,8 @@ void BedFile::loadBedFileIntoMap() {
 		bedEntry.count = 0;
 		bedEntry.minOverlapStart = INT_MAX;
 		bedMap[bedEntry.chrom][bin].push_back(bedEntry);
+		
+		bedEntry = nullBed;
 	}
 	Close();
 }
@@ -674,7 +676,7 @@ void BedFile::loadBedFileIntoMap() {
 
 void BedFile::loadBedFileIntoMapNoBin() {
 	
-	BED bedEntry;
+	BED bedEntry, nullBed;
 	int lineNum = 0;
 	
 	Open();
@@ -682,6 +684,8 @@ void BedFile::loadBedFileIntoMapNoBin() {
 		bedEntry.count = 0;
 		bedEntry.minOverlapStart = INT_MAX;
 		bedMapNoBin[bedEntry.chrom].push_back(bedEntry);
+		
+		bedEntry = nullBed;		
 	}
 	Close();
 }