diff --git a/include/inc-core/eh.hpp b/include/inc-core/eh.hpp
index 99cc954f89e0ac807c3e67a36ce61f79717eab16..de66dde36bce5125e6ac4611d8bf1af3087af5ed 100644
--- a/include/inc-core/eh.hpp
+++ b/include/inc-core/eh.hpp
@@ -21,6 +21,8 @@ namespace IRDB_SDK
 			virtual void setCodeAlignmentFactor(const uint64_t caf) = 0;
 			virtual void setDataAlignmentFactor(const int64_t daf)  = 0;
 			virtual void setReturnRegNumber    (const uint8_t rr  ) = 0;
+			virtual void setCIEProgram(const EhProgramListing_t& p) = 0;
+			virtual void setFDEProgram(const EhProgramListing_t& p) = 0;
 
 			// helpers
 			virtual void print() const = 0;
diff --git a/include/inc-core/fileir.hpp b/include/inc-core/fileir.hpp
index 3395ac320020459cfffeaf7749d65cbd81588f13..ee9c49232015b4e804988c9ea5947f04b74da53d 100644
--- a/include/inc-core/fileir.hpp
+++ b/include/inc-core/fileir.hpp
@@ -25,22 +25,23 @@ namespace IRDB_SDK
 			virtual DataScoop_t*            findScoop(
 			         const VirtualOffset_t &p_addr)             const = 0;
 
-			virtual void         setBaseIDS()                                                   = 0;
-			virtual void         assembleRegistry()                                             = 0;
-			virtual void         registerAssembly(Instruction_t *p_instr, string p_assembly)    = 0;
-			virtual void         unregisterAssembly(Instruction_t *p_instr)                     = 0;
-			virtual string       lookupAssembly(Instruction_t *p_instr)                         = 0;
-			virtual void         changeRegistryKey(
-			                                   Instruction_t* p_orig, Instruction_t* p_updated) = 0;
-			virtual void         splitScoop(
-			                                DataScoop_t *p_to_split, 
-			                                const VirtualOffset_t &p_addr, 
-			                                size_t p_size, 
-			                                DataScoop_t* &p_before,
-			                                DataScoop_t* &p_containing, 
-			                                DataScoop_t* &p_after, 
-			                                DatabaseID_t *p_max_id=NULL
-			                               )                                                    = 0;
+			virtual void   setAllEhPrograms(const EhProgramSet_t& new_pgms)               = 0;
+			virtual void   setBaseIDS()                                                   = 0;
+			virtual void   assembleRegistry()                                             = 0;
+			virtual void   registerAssembly(Instruction_t *p_instr, string p_assembly)    = 0;
+			virtual void   unregisterAssembly(Instruction_t *p_instr)                     = 0;
+			virtual string lookupAssembly(Instruction_t *p_instr)                         = 0;
+			virtual void   changeRegistryKey(
+					             Instruction_t* p_orig, Instruction_t* p_updated) = 0;
+			virtual void   splitScoop(
+						DataScoop_t *p_to_split, 
+						const VirtualOffset_t &p_addr, 
+						size_t p_size, 
+						DataScoop_t* &p_before,
+						DataScoop_t* &p_containing, 
+						DataScoop_t* &p_after, 
+						DatabaseID_t *p_max_id=NULL
+					       )                                                    = 0;
 
 			virtual void writeToDB(std::ostream *verbose_logging=&std::cerr) = 0;
 
@@ -88,6 +89,7 @@ namespace IRDB_SDK
 
 			virtual void removeScoop(DataScoop_t* s) = 0;
 			virtual void moveRelocation(Relocation_t* reloc, Instruction_t* from, Instruction_t* to) = 0;
+			virtual EhProgram_t* copyEhProgram(const EhProgram_t& orig) = 0;
 
 
 		// static methods