diff --git a/libIRDB/test/SConscript b/libIRDB/test/SConscript
index 6a8156d2a984364bcc0ebecbc48bd86f0a1b2f8b..c94a07a0ab9fb0c3de4af52ea649f7b54f084908 100644
--- a/libIRDB/test/SConscript
+++ b/libIRDB/test/SConscript
@@ -34,7 +34,7 @@ if 'build_tools' not in myenv or myenv['build_tools'] is None or int(myenv['buil
 	Default(install)
 	installed=installed+install
 
-	pgm=myenv.Program("fill_in_cfg.exe",  split_eh_frame+Split("fill_in_cfg.cpp"), LIBPATH=LIBPATH, LIBS=LIBS)
+	pgm=myenv.Program("fill_in_cfg.exe",  split_eh_frame+Split("fill_in_cfg_driver.cpp fill_in_cfg.cpp"), LIBPATH=LIBPATH, LIBS=LIBS)
 	install=myenv.Install("$SECURITY_TRANSFORMS_HOME/bin/", pgm)
 	Default(install)
 	installed=installed+install
diff --git a/libIRDB/test/fill_in_cfg.cpp b/libIRDB/test/fill_in_cfg.cpp
index abc42ec43f36cf1179815c91042757a3f71f7f37..676f866442038a6538c28d18453079100525c2f3 100644
--- a/libIRDB/test/fill_in_cfg.cpp
+++ b/libIRDB/test/fill_in_cfg.cpp
@@ -32,7 +32,7 @@ using namespace libIRDB;
 using namespace std;
 using namespace EXEIO;
 
-void populate_instruction_map
+void PopulateCFG::populate_instruction_map
 	(
 		map< pair<db_id_t,virtual_offset_t>, Instruction_t*> &insnMap,
 		FileIR_t *firp
@@ -61,7 +61,7 @@ void populate_instruction_map
 
 }
 
-void set_fallthrough
+void PopulateCFG::set_fallthrough
 	(
 	map< pair<db_id_t,virtual_offset_t>, Instruction_t*> &insnMap,
 	DecodedInstruction_t *disasm, Instruction_t *insn, FileIR_t *firp
@@ -112,7 +112,7 @@ void set_fallthrough
 }
 
 
-void set_target
+void PopulateCFG::set_target
 	(
 	map< pair<db_id_t,virtual_offset_t>, Instruction_t*> &insnMap,
 	DecodedInstruction_t *disasm, Instruction_t *insn, FileIR_t *firp
@@ -187,14 +187,14 @@ void set_target
 	}
 }
 
-static File_t* find_file(FileIR_t* firp, db_id_t fileid)
+File_t* PopulateCFG::find_file(FileIR_t* firp, db_id_t fileid)
 {
 	assert(firp->GetFile()->GetBaseID()==fileid);
 	return firp->GetFile();
 }
 
 
-void add_new_instructions(FileIR_t *firp)
+void PopulateCFG::add_new_instructions(FileIR_t *firp)
 {
 	int found_instructions=0;
 	for(
@@ -324,7 +324,7 @@ void add_new_instructions(FileIR_t *firp)
 
 }
 
-void fill_in_cfg(FileIR_t *firp)
+void PopulateCFG::fill_in_cfg(FileIR_t *firp)
 {
 	int round=0;
 	
@@ -406,7 +406,7 @@ void fill_in_cfg(FileIR_t *firp)
 
 }
 
-static bool is_in_relro_segment(const int secndx)
+bool PopulateCFG::is_in_relro_segment(const int secndx)
 {
 	ELFIO::elfio *real_elfiop = reinterpret_cast<ELFIO::elfio*>(elfiop->get_elfio()); 
 	if(!real_elfiop)
@@ -448,7 +448,7 @@ static bool is_in_relro_segment(const int secndx)
 	return false;
 }
 
-void fill_in_scoops(FileIR_t *firp)
+void PopulateCFG::fill_in_scoops(FileIR_t *firp)
 {
 
 	auto max_base_id=firp->GetMaxBaseID();
@@ -522,7 +522,7 @@ void fill_in_scoops(FileIR_t *firp)
 
 }
 
-void fill_in_landing_pads(FileIR_t *firp)
+void PopulateCFG::fill_in_landing_pads(FileIR_t *firp)
 {
 	const auto eh_frame_rep_ptr = split_eh_frame_t::factory(firp);
 	// eh_frame_rep_ptr->parse(); already parsed now.
@@ -580,11 +580,11 @@ void fill_in_landing_pads(FileIR_t *firp)
 	
 }
 
-PopulateCFG ParseAndConstruct
+PopulateCFG PopulateCFG::Factory
         (
         int argc, 
         char* argv[], 
-        pqxxDB_t the_pqxx_interface,
+        pqxxDB_t* the_pqxx_interface,
         list<FileIR_t *> the_firp_list
         )
 {
@@ -608,15 +608,13 @@ PopulateCFG ParseAndConstruct
             }
     }
     
-    return PopulateCFG(p_fix_landing_pads, the_pqxx_interface, the_firp_list);
+    return PopulateCFG(the_pqxx_interface, the_firp_list, p_fix_landing_pads);
 }
 
-bool execute()
+bool PopulateCFG::execute()
 {
     try 
 	{
-		assert(pqxx_interface);
-                
 		for( FileIR_t* firp : firp_list)
 		{
 			assert(firp);
@@ -626,7 +624,7 @@ bool execute()
 			int elfoid=firp->GetFile()->GetELFOID();
 
 			pqxx::largeobject lo(elfoid);
-                	lo.to_file(pqxx_interface.GetTransaction(),"readeh_tmp_file.exe");
+                	lo.to_file(pqxx_interface->GetTransaction(),"readeh_tmp_file.exe");
 
 			elfiop=new EXEIO::exeio;
 			assert(elfiop);
diff --git a/libIRDB/test/fill_in_cfg.hpp b/libIRDB/test/fill_in_cfg.hpp
index 7f598fe8ab066b14abaa7a28d380f266a084bf26..abe5abc1239fce2f070e809cc3367731fdf28c32 100644
--- a/libIRDB/test/fill_in_cfg.hpp
+++ b/libIRDB/test/fill_in_cfg.hpp
@@ -9,14 +9,14 @@
 class PopulateCFG
 {
     public:
-        PopulateCFG(bool p_fix_landing_pads = true,
-                    libIRDB::pqxxDB_t the_pqxx_interface,
-                    std::list<libIRDB::FileIR_t *> the_firp_list
+        PopulateCFG(libIRDB::pqxxDB_t* the_pqxx_interface,
+                    std::list<libIRDB::FileIR_t *> the_firp_list,
+                    bool p_fix_landing_pads = true
             )
             :
-            fix_landing_pads(p_fix_landing_pads),
             pqxx_interface(the_pqxx_interface),
-            firp_list(the_firp_list)
+            firp_list(the_firp_list),
+            fix_landing_pads(p_fix_landing_pads)
         {
             odd_target_count = 0;
             bad_target_count = 0;
@@ -25,7 +25,7 @@ class PopulateCFG
        
             elfiop = NULL;
         }
-        static PopulateCFG ParseAndConstruct(int argc, char* argv[], libIRDB::pqxxDB_t, std::list<libIRDB::FileIR_t *>);
+        static PopulateCFG Factory(int argc, char* argv[], libIRDB::pqxxDB_t*, std::list<libIRDB::FileIR_t *>);
         bool execute();
     
     private: // methods
@@ -38,40 +38,38 @@ class PopulateCFG
         // helpers
         void populate_instruction_map
 	(
-		std::map< std::pair<libIRDB::db_id_t,libIRDB::virtual_offset_t>, libIRDB::Instruction_t*>,
+		std::map< std::pair<libIRDB::db_id_t,libIRDB::virtual_offset_t>, libIRDB::Instruction_t*>&,
 		libIRDB::FileIR_t *
 	);
         
         void set_fallthrough
 	(
-                std::map< std::pair<libIRDB::db_id_t,libIRDB::virtual_offset_t>, libIRDB::Instruction_t*>,
+                std::map< std::pair<libIRDB::db_id_t,libIRDB::virtual_offset_t>, libIRDB::Instruction_t*>&,
                 libIRDB::DecodedInstruction_t *, libIRDB::Instruction_t *, libIRDB::FileIR_t *
 	);
         
         void set_target
 	(
-                std::map< std::pair<libIRDB::db_id_t,libIRDB::virtual_offset_t>, libIRDB::Instruction_t*>,
+                std::map< std::pair<libIRDB::db_id_t,libIRDB::virtual_offset_t>, libIRDB::Instruction_t*>&,
                 libIRDB::DecodedInstruction_t *, libIRDB::Instruction_t *, libIRDB::FileIR_t *
 	);
         
-        static libIRDB::File_t* find_file(libIRDB::FileIR_t *, libIRDB::db_id_t);
+        libIRDB::File_t* find_file(libIRDB::FileIR_t *, libIRDB::db_id_t);
         void add_new_instructions(libIRDB::FileIR_t *);
-        static bool is_in_relro_segment(const int);
+        bool is_in_relro_segment(const int);
     
     private: //data
         
-        // options
-        bool fix_landing_pads;
-        
         // stats
         int odd_target_count;
         int bad_target_count;
         int bad_fallthrough_count;
-        auto failed_target_count;
+        unsigned int failed_target_count;
         
         // non-optional
-        libIRDB::pqxxDB_t pqxx_interface;
+        libIRDB::pqxxDB_t* pqxx_interface;
         std::list<libIRDB::FileIR_t *> firp_list;
+        bool fix_landing_pads;
         
         EXEIO::exeio *elfiop;
         std::set< std::pair<libIRDB::db_id_t,libIRDB::virtual_offset_t> > missed_instructions;
diff --git a/libIRDB/test/fill_in_cfg_driver.cpp b/libIRDB/test/fill_in_cfg_driver.cpp
index bbd66d9e059a20fb326ec92b59953dde2af2cd45..aee0cf8d678c0c0de3dc7d6d09dedf94df87b5fa 100644
--- a/libIRDB/test/fill_in_cfg_driver.cpp
+++ b/libIRDB/test/fill_in_cfg_driver.cpp
@@ -22,19 +22,19 @@ int main(int argc, char* argv[])
 		cout<<"New Variant, after reading registration, is: "<<*pidp << endl;
 
                 // setup
-		for(set<File_t*> it : pidp->GetFiles())
+		for(File_t* it : pidp->GetFiles())
 		{
-			File_t* this_file=*it;
+			File_t* this_file=it;
 			assert(this_file);
                         
 			// read the db  
-			firp=new FileIR_t(*pidp, this_file);
+			FileIR_t* firp=new FileIR_t(*pidp, this_file);
 			assert(firp);
                         the_firp_list.push_back(firp);
                 }
                 
                 // fill_in_cfg for all files
-                PopulateCFG fill_in_cfg = PopulateCFG::ParseAndConstruct(argc, argv, the_pqxx_interface, the_firp_list);
+                PopulateCFG fill_in_cfg = PopulateCFG::Factory(argc, argv, &the_pqxx_interface, the_firp_list);
                 
                 bool success = fill_in_cfg.execute();
                 if(!success)
@@ -45,13 +45,13 @@ int main(int argc, char* argv[])
                 
                 // cleanup
                 for(FileIR_t* the_firp : the_firp_list)
+		{
                         assert(the_firp);
                         // write the DB back and commit our changes 
 			the_firp->WriteToDB();
 			delete the_firp;
-			the_firp=NULL;
 		}
-		pqxx_interface.Commit();
+		the_pqxx_interface.Commit();
 	}
 	catch (DatabaseError_t pnide)
 	{