diff --git a/src/closestBed/closestBed.cpp b/src/closestBed/closestBed.cpp
index 046db2077c98ca89c0961accd25221032c0f7957..735e2a9ebfe3a8012592c58a30c61dc3827e3370 100644
--- a/src/closestBed/closestBed.cpp
+++ b/src/closestBed/closestBed.cpp
@@ -23,7 +23,7 @@ const int SLOPGROWTH = 2048000;
 */
 BedClosest::BedClosest(string &bedAFile, string &bedBFile, bool sameStrand, bool diffStrand,
                        string &tieMode, bool reportDistance, bool signDistance, string &_strandedDistMode,
-                       bool ignoreOverlaps) 
+                       bool ignoreOverlaps, bool printHeader) 
     : _bedAFile(bedAFile)
     , _bedBFile(bedBFile)
     , _tieMode(tieMode)
@@ -33,6 +33,7 @@ BedClosest::BedClosest(string &bedAFile, string &bedBFile, bool sameStrand, bool
     , _signDistance(signDistance)
     , _strandedDistMode(_strandedDistMode)
     , _ignoreOverlaps(ignoreOverlaps)
+    , _printHeader(printHeader)
 {
     _bedA           = new BedFile(_bedAFile);
     _bedB           = new BedFile(_bedBFile);
@@ -220,6 +221,10 @@ void BedClosest::FindClosestBed() {
     BedLineStatus bedStatus;
 
     _bedA->Open();
+    // report A's header first if asked.
+    if (_printHeader == true) {
+        _bedA->PrintHeader();
+    }
     // process each entry in A in search of the closest feature in B
     while ((bedStatus = _bedA->GetNextBed(a, lineNum)) != BED_INVALID) {
         if (bedStatus == BED_VALID) {
diff --git a/src/closestBed/closestBed.h b/src/closestBed/closestBed.h
index 82bd9b40b5fc6f6c2de1d246502f586f5ccdf923..8190dec93ee25443cb85c9a8a10a71547851d28a 100644
--- a/src/closestBed/closestBed.h
+++ b/src/closestBed/closestBed.h
@@ -30,7 +30,7 @@ public:
     BedClosest(string &bedAFile, string &bedBFile, 
                bool sameStrand, bool diffStrand, string &tieMode, 
                bool reportDistance, bool signDistance, string &strandedDistMode,
-               bool ignoreOverlaps);
+               bool ignoreOverlaps, bool printHeader);
 
     // destructor
     ~BedClosest(void);
@@ -50,6 +50,7 @@ private:
     bool   _signDistance;
     string _strandedDistMode;
     bool   _ignoreOverlaps;
+    bool   _printHeader;
 
     BedFile *_bedA, *_bedB;
 
diff --git a/src/closestBed/closestMain.cpp b/src/closestBed/closestMain.cpp
index 8b34a70743ef21688f3ed2067ca7da1c001d501c..0128af24fc6edbb4fa20558e56a1b541774be9b1 100644
--- a/src/closestBed/closestMain.cpp
+++ b/src/closestBed/closestMain.cpp
@@ -43,6 +43,7 @@ int main(int argc, char* argv[]) {
     bool reportDistance = false;
     bool signDistance   = false;
     bool haveStrandedDistMode = false;
+    bool printHeader        = false;
 
 
     // check to see if we should print out some help
@@ -106,6 +107,9 @@ int main(int argc, char* argv[]) {
                 i++;
             }
         }
+        else if(PARAMETER_CHECK("-header", 7, parameterLength)) {
+            printHeader = true;
+        }
         else {
             cerr << endl << "*****ERROR: Unrecognized parameter: " << argv[i] << " *****" << endl << endl;
             showHelp = true;
@@ -136,7 +140,9 @@ int main(int argc, char* argv[]) {
     }
     
     if (!showHelp) {
-        BedClosest *bc = new BedClosest(bedAFile, bedBFile, sameStrand, diffStrand, tieMode, reportDistance, signDistance, strandedDistMode, ignoreOverlaps);
+        BedClosest *bc = new BedClosest(bedAFile, bedBFile, sameStrand, 
+                                        diffStrand, tieMode, reportDistance, 
+                                        signDistance, strandedDistMode, ignoreOverlaps, printHeader);
         delete bc;
         return 0;
     }
@@ -191,6 +197,8 @@ void ShowHelp(void) {
     cerr                        << "\t\t- \"all\"    Report all ties (default)." << endl;
     cerr                        << "\t\t- \"first\"  Report the first tie that occurred in the B file." << endl;
     cerr                        << "\t\t- \"last\"   Report the last tie that occurred in the B file." << endl << endl;
+    
+    cerr << "\t-header\t"       << "Print the header from the A file prior to results." << endl << endl;
 
     cerr << "Notes: " << endl;
     cerr << "\tReports \"none\" for chrom and \"-1\" for all other fields when a feature" << endl;
diff --git a/src/flankBed/flankBed.cpp b/src/flankBed/flankBed.cpp
index 33ff711b5c8ad5377a518c746bd1f10e8d9604f2..f7e12495120281194aa38f5c22aa1695bb2e83a7 100644
--- a/src/flankBed/flankBed.cpp
+++ b/src/flankBed/flankBed.cpp
@@ -13,14 +13,18 @@
 #include "flankBed.h"
 
 
-BedFlank::BedFlank(string &bedFile, string &genomeFile, bool forceStrand, float leftFlank, float rightFlank, bool fractional) {
+BedFlank::BedFlank(string &bedFile, string &genomeFile, bool forceStrand, 
+                   float leftFlank, float rightFlank, bool fractional,
+                   bool printHeader) 
+{
 
     _bedFile      = bedFile;
     _genomeFile   = genomeFile;
     _forceStrand  = forceStrand;
     _leftFlank    = leftFlank;
     _rightFlank   = rightFlank;
-    _fractional   = fractional; 
+    _fractional   = fractional;
+    _printHeader  = printHeader;
 
     _bed    = new BedFile(bedFile);
     _genome = new GenomeFile(genomeFile);
@@ -42,6 +46,11 @@ void BedFlank::FlankBed() {
     BedLineStatus bedStatus;
 
     _bed->Open();
+    // report A's header first if asked.
+    if (_printHeader == true) {
+        _bed->PrintHeader();
+    }
+        
     bedStatus = _bed->GetNextBed(bedEntry, lineNum);
     while (bedStatus != BED_INVALID) {
         if (bedStatus == BED_VALID) {
diff --git a/src/flankBed/flankBed.h b/src/flankBed/flankBed.h
index a77326a80637d6602b007447d4b15dd6df068e41..f344f60f18686f84f796618a4ad1659a52430189 100644
--- a/src/flankBed/flankBed.h
+++ b/src/flankBed/flankBed.h
@@ -30,7 +30,9 @@ class BedFlank {
 public:
 
     // constructor
-    BedFlank(string &bedFile, string &genomeFile, bool forceStrand, float leftSlop, float rightSlop, bool fractional);
+    BedFlank(string &bedFile, string &genomeFile, bool forceStrand, 
+             float leftSlop, float rightSlop, bool fractional,
+             bool printHeader);
 
     // destructor
     ~BedFlank(void);
@@ -46,6 +48,7 @@ private:
     float  _leftFlank;
     float  _rightFlank;
     bool   _fractional;
+    bool   _printHeader;
 
     BedFile *_bed;
     GenomeFile *_genome;
diff --git a/src/flankBed/flankBedMain.cpp b/src/flankBed/flankBedMain.cpp
index 107db20e044e3d63b898a12a7805d7545338d51e..062839e6a377298ce849bd209ea5d9e093df46f5 100644
--- a/src/flankBed/flankBedMain.cpp
+++ b/src/flankBed/flankBedMain.cpp
@@ -43,6 +43,7 @@ int main(int argc, char* argv[]) {
     float leftSlop   = 0.0;
     float rightSlop  = 0.0;
     bool  fractional = false;
+    bool printHeader        = false;
 
     for(int i = 1; i < argc; i++) {
         int parameterLength = (int)strlen(argv[i]);
@@ -101,6 +102,9 @@ int main(int argc, char* argv[]) {
         else if(PARAMETER_CHECK("-pct", 4, parameterLength)) {
             fractional = true;
         }
+        else if(PARAMETER_CHECK("-header", 7, parameterLength)) {
+            printHeader = true;
+        }
         else {
           cerr << endl << "*****ERROR: Unrecognized parameter: " << argv[i] << " *****" << endl << endl;
             showHelp = true;
@@ -126,7 +130,8 @@ int main(int argc, char* argv[]) {
     }
 
     if (!showHelp) {
-        BedFlank *bc = new BedFlank(bedFile, genomeFile, forceStrand, leftSlop, rightSlop, fractional);
+        BedFlank *bc = new BedFlank(bedFile, genomeFile, forceStrand, 
+                                    leftSlop, rightSlop, fractional, printHeader);
         delete bc;
 
         return 0;
@@ -163,6 +168,8 @@ void ShowHelp(void) {
     cerr << "\t-pct\t"              << "Define -l and -r as a fraction of the feature's length." << endl;
     cerr                            << "\t\tE.g. if used on a 1000bp feature, -l 0.50, " << endl;
     cerr                            << "\t\twill add 500 bp \"upstream\".  Default = false." << endl << endl;
+    
+    cerr << "\t-header\t"           << "Print the header from the input file prior to results." << endl << endl;
 
     cerr << "Notes: " << endl;
     cerr << "\t(1)  Starts will be set to 0 if options would force it below 0." << endl;
diff --git a/src/slopBed/slopBed.cpp b/src/slopBed/slopBed.cpp
index be9e37687c14f1e21cd626d24525dc43b65bf764..68eda5a2859aa7760aae8341d04f330865e45f87 100644
--- a/src/slopBed/slopBed.cpp
+++ b/src/slopBed/slopBed.cpp
@@ -13,14 +13,17 @@
 #include "slopBed.h"
 
 
-BedSlop::BedSlop(string &bedFile, string &genomeFile, bool forceStrand, float leftSlop, float rightSlop, bool fractional) {
+BedSlop::BedSlop(string &bedFile, string &genomeFile, bool forceStrand, 
+                 float leftSlop, float rightSlop, bool fractional,
+                 bool printHeader) {
 
     _bedFile     = bedFile;
     _genomeFile  = genomeFile;
     _forceStrand = forceStrand;
     _leftSlop    = leftSlop;
     _rightSlop   = rightSlop;
-    _fractional  = fractional; 
+    _fractional  = fractional;
+    _printHeader = printHeader;
 
     _bed    = new BedFile(bedFile);
     _genome = new GenomeFile(genomeFile);
@@ -42,6 +45,11 @@ void BedSlop::SlopBed() {
     BedLineStatus bedStatus;
 
     _bed->Open();
+    // report header first if asked.
+    if (_printHeader == true) {
+        _bed->PrintHeader();
+    }
+        
     bedStatus = _bed->GetNextBed(bedEntry, lineNum);
     while (bedStatus != BED_INVALID) {
         if (bedStatus == BED_VALID) {
diff --git a/src/slopBed/slopBed.h b/src/slopBed/slopBed.h
index d22590c729a8da7c6241b07636dac784d3ed6e23..7de0afd728cce49b85f31f0ec60c1f2efbcd4001 100644
--- a/src/slopBed/slopBed.h
+++ b/src/slopBed/slopBed.h
@@ -30,7 +30,8 @@ class BedSlop {
 public:
 
     // constructor
-    BedSlop(string &bedFile, string &genomeFile, bool forceStrand, float leftSlop, float rightSlop, bool fractional);
+    BedSlop(string &bedFile, string &genomeFile, bool forceStrand, 
+            float leftSlop, float rightSlop, bool fractional, bool printHeader);
 
     // destructor
     ~BedSlop(void);
@@ -46,6 +47,7 @@ private:
     float  _leftSlop;
     float  _rightSlop;
     bool   _fractional;
+    bool   _printHeader;
 
     BedFile *_bed;
     GenomeFile *_genome;
diff --git a/src/slopBed/slopBedMain.cpp b/src/slopBed/slopBedMain.cpp
index 01e0164908b49cb981498ca9753e156b5f51697f..b5f148e56dc6aab8aa714a1f7cc45ba8f01ded44 100644
--- a/src/slopBed/slopBedMain.cpp
+++ b/src/slopBed/slopBedMain.cpp
@@ -43,6 +43,7 @@ int main(int argc, char* argv[]) {
     float leftSlop   = 0.0;
     float rightSlop  = 0.0;
     bool  fractional = false;
+    bool printHeader = false;
 
     for(int i = 1; i < argc; i++) {
         int parameterLength = (int)strlen(argv[i]);
@@ -101,6 +102,9 @@ int main(int argc, char* argv[]) {
         else if(PARAMETER_CHECK("-pct", 4, parameterLength)) {
             fractional = true;
         }
+        else if(PARAMETER_CHECK("-header", 7, parameterLength)) {
+            printHeader = true;
+        }
         else {
           cerr << endl << "*****ERROR: Unrecognized parameter: " << argv[i] << " *****" << endl << endl;
             showHelp = true;
@@ -126,7 +130,7 @@ int main(int argc, char* argv[]) {
     }
 
     if (!showHelp) {
-        BedSlop *bc = new BedSlop(bedFile, genomeFile, forceStrand, leftSlop, rightSlop, fractional);
+        BedSlop *bc = new BedSlop(bedFile, genomeFile, forceStrand, leftSlop, rightSlop, fractional, printHeader);
         delete bc;
 
         return 0;
@@ -164,6 +168,8 @@ void ShowHelp(void) {
     cerr                            << "\t\tE.g. if used on a 1000bp feature, -l 0.50, " << endl;
     cerr                            << "\t\twill add 500 bp \"upstream\".  Default = false." << endl << endl;
 
+    cerr << "\t-header\t"           << "Print the header from the input file prior to results." << endl << endl;
+
     cerr << "Notes: " << endl;
     cerr << "\t(1)  Starts will be set to 0 if options would force it below 0." << endl;
     cerr << "\t(2)  Ends will be set to the chromosome length if  requested slop would" << endl;
diff --git a/src/windowBed/windowBed.cpp b/src/windowBed/windowBed.cpp
index 513d91fef05c5cbc0a59d00f05d611d1b6a9bd88..b93ea4ae8fef38753f00afff61b6cb6acf03a008 100644
--- a/src/windowBed/windowBed.cpp
+++ b/src/windowBed/windowBed.cpp
@@ -18,7 +18,8 @@
 */
 BedWindow::BedWindow(string bedAFile, string bedBFile, int leftSlop, int rightSlop,
                      bool anyHit, bool noHit, bool writeCount, bool strandWindows,
-                     bool matchOnSameStrand, bool matchOnDiffStrand, bool bamInput, bool bamOutput, bool isUncompressedBam) {
+                     bool matchOnSameStrand, bool matchOnDiffStrand, bool bamInput, 
+                     bool bamOutput, bool isUncompressedBam, bool printHeader) {
 
     _bedAFile      = bedAFile;
     _bedBFile      = bedBFile;
@@ -35,6 +36,7 @@ BedWindow::BedWindow(string bedAFile, string bedBFile, int leftSlop, int rightSl
     _bamInput            = bamInput;
     _bamOutput           = bamOutput;
     _isUncompressedBam   = isUncompressedBam;
+    _printHeader         = printHeader;
 
     _bedA          = new BedFile(bedAFile);
     _bedB          = new BedFile(bedBFile);
@@ -133,6 +135,10 @@ void BedWindow::WindowIntersectBed() {
     hits.reserve(100);
 
     _bedA->Open();
+    // report A's header first if asked.
+    if (_printHeader == true) {
+        _bedA->PrintHeader();
+    }
     while ((bedStatus = _bedA->GetNextBed(a, lineNum)) != BED_INVALID) {
         if (bedStatus == BED_VALID) {
             FindWindowOverlaps(a, hits);
diff --git a/src/windowBed/windowBed.h b/src/windowBed/windowBed.h
index 84f1b1b1e9e4fa576be0cd35198699f56d499481..31c8a076c43c14c8ada993df96d94e1c9741226e 100644
--- a/src/windowBed/windowBed.h
+++ b/src/windowBed/windowBed.h
@@ -34,7 +34,8 @@ public:
     // constructor
     BedWindow(string bedAFile, string bedBFile, int leftSlop, int rightSlop,
               bool anyHit, bool noHit, bool writeCount, bool strandWindows,
-              bool matchOnSameStrand, bool matchOnDiffStrand, bool bamInput, bool bamOutput, bool isUncompressedBam);
+              bool matchOnSameStrand, bool matchOnDiffStrand, bool bamInput,
+              bool bamOutput, bool isUncompressedBam, bool printHeader);
 
     // destructor
     ~BedWindow(void);
@@ -53,7 +54,8 @@ private:
     bool _matchOnDiffStrand;
     bool _bamInput;
     bool _bamOutput;
-    bool  _isUncompressedBam;
+    bool _isUncompressedBam;
+    bool _printHeader;
 
     // instance of a bed file class.
     BedFile *_bedA, *_bedB;
diff --git a/src/windowBed/windowMain.cpp b/src/windowBed/windowMain.cpp
index 7d70f3a4359951b233cf83b31e8f1812390f8a1f..cbb5739a14120596893da0d89c26e34a78809249 100644
--- a/src/windowBed/windowMain.cpp
+++ b/src/windowBed/windowMain.cpp
@@ -37,20 +37,21 @@ int main(int argc, char* argv[]) {
     int leftSlop  = 1000;
     int rightSlop = 1000;
 
-    bool haveBedA        = false;
-    bool haveBedB        = false;
-    bool noHit           = false;
-    bool anyHit          = false;
-    bool writeCount      = false;
-    bool haveSlop        = false;
-    bool haveLeft        = false;
-    bool haveRight       = false;
-    bool strandWindows   = false;
+    bool haveBedA            = false;
+    bool haveBedB            = false;
+    bool noHit               = false;
+    bool anyHit              = false;
+    bool writeCount          = false;
+    bool haveSlop            = false;
+    bool haveLeft            = false;
+    bool haveRight           = false;
+    bool strandWindows       = false;
     bool matchOnSameStrand   = false;
     bool matchOnDiffStrand   = false;
-    bool inputIsBam      = false;
-    bool outputIsBam     = true;
-    bool uncompressedBam = false;
+    bool inputIsBam          = false;
+    bool outputIsBam         = true;
+    bool uncompressedBam     = false;
+    bool printHeader         = false;
 
     // check to see if we should print out some help
     if(argc <= 1) showHelp = true;
@@ -139,6 +140,9 @@ int main(int argc, char* argv[]) {
         else if(PARAMETER_CHECK("-ubam", 5, parameterLength)) {
             uncompressedBam = true;
         }
+        else if(PARAMETER_CHECK("-header", 7, parameterLength)) {
+            printHeader = true;
+        }
         else {
             cerr << endl << "*****ERROR: Unrecognized parameter: " << argv[i] << " *****" << endl << endl;
             showHelp = true;
@@ -189,7 +193,7 @@ int main(int argc, char* argv[]) {
     if (!showHelp) {
         BedWindow *bi = new BedWindow(bedAFile, bedBFile, leftSlop, rightSlop, anyHit,
                                       noHit, writeCount, strandWindows, matchOnSameStrand, matchOnDiffStrand,
-                                      inputIsBam, outputIsBam, uncompressedBam);
+                                      inputIsBam, outputIsBam, uncompressedBam, printHeader);
         delete bi;
         return 0;
     }
@@ -257,6 +261,8 @@ void ShowHelp(void) {
 
     cerr << "\t-v\t"            << "Only report those entries in A that have _no overlaps_ with B." << endl;
     cerr                        << "\t\t- Similar to \"grep -v.\"" << endl << endl;
+    
+    cerr << "\t-header\t"       << "Print the header from the A file prior to results." << endl << endl;
 
     // end the program here
     exit(1);