diff --git a/libIRDB/include/core/fileir.hpp b/libIRDB/include/core/fileir.hpp
index b540d5287a2fc1e00474365653a2e52dac72f7d2..9cfa4dd2ab166e7bc68f236dd1abae53a0b6c12a 100644
--- a/libIRDB/include/core/fileir.hpp
+++ b/libIRDB/include/core/fileir.hpp
@@ -123,9 +123,9 @@ class FileIR_t : public BaseObj_t
 		RelocationSet_t   relocs;
 		TypeSet_t         types;
 		DataScoopSet_t    scoops;
-		VariantID_t       progid;
+		VariantID_t*      progid;    // Not owned by fileIR
 		ICFSSet_t         icfs_set;
-		File_t*           fileptr;
+		File_t*           fileptr;   // Owned by variant, not fileIR
 		EhProgramSet_t    eh_pgms;
 		EhCallSiteSet_t   eh_css;
 
diff --git a/libIRDB/include/core/variantid.hpp b/libIRDB/include/core/variantid.hpp
index f9536cf41028f1a0ffd2abd07a5baeacef067662..7a6390484a83660d124f0c24fd588ca9c55f7d61 100644
--- a/libIRDB/include/core/variantid.hpp
+++ b/libIRDB/include/core/variantid.hpp
@@ -49,10 +49,10 @@ class VariantID_t : public BaseObj_t
 	File_t* GetMainFile() const;
 
 	friend std::ostream& libIRDB::operator<<(std::ostream& out, const VariantID_t& pid);
-	friend class FileIR_T;
-	friend class Function_t;
-	friend class AddressID_t;
-	friend class Instruction_t;
+	//friend class FileIR_T;
+	//friend class Function_t;
+	//friend class AddressID_t;
+	//friend class Instruction_t;
 
 	db_id_t GetOriginalVariantID() const { return orig_pid;}
 	
diff --git a/libIRDB/src/core/fileir.cpp b/libIRDB/src/core/fileir.cpp
index 787fb0c554d9eaabc194304a0d1bc43b4271ee4b..9be39c644e8c93973b9247b87af6a35c5ce4f7ab 100644
--- a/libIRDB/src/core/fileir.cpp
+++ b/libIRDB/src/core/fileir.cpp
@@ -86,14 +86,14 @@ FileIR_t::FileIR_t(const VariantID_t &newprogid, File_t* fid) : BaseObj_t(NULL)
 	
 {
 	orig_variant_ir_p=NULL;
-	progid=newprogid;	
+	progid=(VariantID_t*) &newprogid;	
 
 	if(fid==NULL)
 		fileptr=newprogid.GetMainFile();
 	else
 		fileptr=fid;
 
-	if(progid.IsRegistered())
+	if(progid->IsRegistered())
 	{
 		ReadFromDB();
 		SetArchitecture();
diff --git a/libIRDB/src/core/generate_spri.cpp b/libIRDB/src/core/generate_spri.cpp
index c70a735171424d8ae2d8f4a0c1c4b62f0cf85411..b45d6fd4551415d706c77e5cc770b75b1b8652fd 100644
--- a/libIRDB/src/core/generate_spri.cpp
+++ b/libIRDB/src/core/generate_spri.cpp
@@ -837,7 +837,7 @@ static void generate_insn_to_insn_maps(FileIR_t *fileIRp, FileIR_t *orig_fileIRp
 //
 void FileIR_t::GenerateSPRI(ostream &fout, bool with_ilr)
 {
-	VariantID_t orig_varidp(progid.GetOriginalVariantID());
+	VariantID_t orig_varidp(progid->GetOriginalVariantID());
 	assert(orig_varidp.IsRegistered()==true);
 
 	for(
diff --git a/libIRDB/src/core/variantid.cpp b/libIRDB/src/core/variantid.cpp
index ac45b0d0e44aecd4baede4bce38b358b324a4ca4..4d6f4878ed51cf8db5f3fcfeabc611a706a11cb3 100644
--- a/libIRDB/src/core/variantid.cpp
+++ b/libIRDB/src/core/variantid.cpp
@@ -40,13 +40,10 @@ VariantID_t::VariantID_t() :
 
 VariantID_t::~VariantID_t()
 {
-	for(std::set<File_t*>::iterator 
-		it = files.begin();
-		it != files.end();
-		++it
-	   )	
+	cout << "VARIANT ID DESTRUCTOR" << endl;
+	for(auto it : files)	
 	{
-		delete *it;
+		delete it;
 	}
 }