diff --git a/libIRDB/include/core/fileir.hpp b/libIRDB/include/core/fileir.hpp
index 9cfa4dd2ab166e7bc68f236dd1abae53a0b6c12a..7668dabaf3094753e0235894546627d1896356ea 100644
--- a/libIRDB/include/core/fileir.hpp
+++ b/libIRDB/include/core/fileir.hpp
@@ -123,7 +123,7 @@ class FileIR_t : public BaseObj_t
 		RelocationSet_t   relocs;
 		TypeSet_t         types;
 		DataScoopSet_t    scoops;
-		VariantID_t*      progid;    // Not owned by fileIR
+	        VariantID_t&      progid;    // Not owned by fileIR
 		ICFSSet_t         icfs_set;
 		File_t*           fileptr;   // Owned by variant, not fileIR
 		EhProgramSet_t    eh_pgms;
diff --git a/libIRDB/src/core/fileir.cpp b/libIRDB/src/core/fileir.cpp
index 9be39c644e8c93973b9247b87af6a35c5ce4f7ab..a46336a57fde879856f47329b13de221500d134e 100644
--- a/libIRDB/src/core/fileir.cpp
+++ b/libIRDB/src/core/fileir.cpp
@@ -82,18 +82,18 @@ static virtual_offset_t strtovo(std::string s)
 }
 
 // Create a Variant from the database
-FileIR_t::FileIR_t(const VariantID_t &newprogid, File_t* fid) : BaseObj_t(NULL)
+FileIR_t::FileIR_t(const VariantID_t &newprogid, File_t* fid) 
+			: BaseObj_t(NULL), progid((VariantID_t&) newprogid)
 	
 {
 	orig_variant_ir_p=NULL;
-	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 b45d6fd4551415d706c77e5cc770b75b1b8652fd..c70a735171424d8ae2d8f4a0c1c4b62f0cf85411 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(