diff --git a/tools/transforms/PNMain.cpp b/tools/transforms/PNMain.cpp
index ed09a6869a33a51947853d14d20a3fb119c910e4..0c9c1ee064cbb6ef703ed2a19fdecaa506e141ab 100644
--- a/tools/transforms/PNMain.cpp
+++ b/tools/transforms/PNMain.cpp
@@ -21,9 +21,6 @@
 #include <set>
 #include <cstdlib>
 
-
-bool DO_CANARIES = true;
-
 using namespace std;
 using namespace libIRDB;
 using namespace MEDS_Annotation;
@@ -61,7 +58,6 @@ static double p1threshold;
 
 void pn_init()
 {
-    DO_CANARIES=true;
     p1threshold=0.0;
 }
 
@@ -155,6 +151,7 @@ int main(int argc, char **argv)
     char *coverage_file=NULL;
     char *only_validate=NULL;
     bool validate_p1=true;
+    bool do_canaries=true;
     while((c = getopt_long(argc, argv, "", long_options, NULL)) != -1)
     {
 	switch(c)
@@ -193,11 +190,11 @@ int main(int argc, char **argv)
 	{
 	    if(strcasecmp("on",optarg)==0)
 	    {
-		DO_CANARIES=true;
+		do_canaries=true;
 	    }
 	    else if(strcasecmp("off",optarg)==0)
 	    {
-		DO_CANARIES=false;
+		do_canaries=false;
 	    }
 	    else
 	    {
@@ -272,6 +269,7 @@ int main(int argc, char **argv)
 
 	transform_driver.AddBlacklist(blackListOfFunctions);
 	transform_driver.AddOnlyValidateList(onlyValidateFunctions);
+	transform_driver.SetDoCanaries(do_canaries);
 	
 	OffsetInference *offset_inference = new OffsetInference();
 
diff --git a/tools/transforms/PNTransformDriver.cpp b/tools/transforms/PNTransformDriver.cpp
index 476e8bc71dd7fc537e18b9e66a16ae278e81cbeb..b256d88fa81bd0150248dda391e157a8166ed881 100644
--- a/tools/transforms/PNTransformDriver.cpp
+++ b/tools/transforms/PNTransformDriver.cpp
@@ -11,7 +11,6 @@ using namespace std;
 using namespace libIRDB;
 
 //TODO: this var is a hack for TNE
-extern bool DO_CANARIES;
 extern map<string, set<Instruction_t*> > inserted_instr;
 extern map<string, set<AddressID_t*> > inserted_addr;
 
@@ -43,6 +42,7 @@ PNTransformDriver::PNTransformDriver(VariantID_t *pidp,string BED_script)
     orig_progid = pidp->GetOriginalVariantID();
     orig_virp = new VariantIR_t(*pidp);
     this->BED_script = BED_script;
+    do_canaries = true;
 }
 
 PNTransformDriver::~PNTransformDriver()
@@ -70,6 +70,11 @@ void PNTransformDriver::AddInference(PNStackLayoutInference *inference, int leve
     transform_hierarchy[level].push_back(inference);
 }
 
+void PNTransformDriver::SetDoCanaries(bool do_canaries)
+{
+    this->do_canaries = do_canaries;
+}
+
 void PNTransformDriver::AddBlacklist(set<string> &blacklist)
 {
     set<string>::iterator it;
@@ -222,7 +227,7 @@ void PNTransformDriver::GenerateTransformsInit()
 bool PNTransformDriver::CanaryTransformHandler(PNStackLayout *layout, Function_t *func, bool validate)
 {
     //TODO: hack for TNE: if not doing canaries, use padding transform handler instead
-    if(!DO_CANARIES)
+    if(!do_canaries)
     {
 	cerr<<"PNTransformDriver: canary transformations turned off, attempting padding transformation."<<endl;
 	return PaddingTransformHandler(layout, func, validate);	
diff --git a/tools/transforms/PNTransformDriver.hpp b/tools/transforms/PNTransformDriver.hpp
index adc737ff90652bec2a412f5c977eb46d80ef5dea..dbcf3bf097b1f79cb90a8f455a3b839083882b30 100644
--- a/tools/transforms/PNTransformDriver.hpp
+++ b/tools/transforms/PNTransformDriver.hpp
@@ -23,6 +23,7 @@ protected:
     libIRDB::VariantIR_t *orig_virp;
     std::string BED_script;
     int orig_progid;
+    bool do_canaries;
     
     std::vector< std::vector<PNStackLayoutInference*> > transform_hierarchy;
     PNRegularExpressions pn_regex;
@@ -76,6 +77,7 @@ public:
     virtual void AddBlacklist(std::set<std::string> &blacklist);
     virtual void AddBlacklistFunction(std::string func_name);
     virtual void AddOnlyValidateList(std::set<std::string> &only_validate_list);
+    virtual void SetDoCanaries(bool do_canaries);
     virtual void GenerateTransforms();
     virtual void GenerateTransforms(std::map<std::string,double> coverage_map, double threshold, int threshold_level, int never_validate_level);
 };