diff --git a/include/zipr_impl.h b/include/zipr_impl.h
index 9ebbcda2b2de7e454e9e7ebe2cae636f29db72a4..c4194c3b6a07689a73cab681fe202487f1a9257f 100644
--- a/include/zipr_impl.h
+++ b/include/zipr_impl.h
@@ -475,6 +475,8 @@ class ZiprImpl_t : public Zipr_t
 		RangeAddress_t bss_needed;
 		bool use_stratafier_mode;
 
+		libIRDB::DataScoopSet_t m_zipr_scoops;
+
 		ZiprPluginManager_t plugman;
 
 		std::map<libIRDB::Instruction_t*,
diff --git a/src/utils.cpp b/src/utils.cpp
index 67ad3977c18afde7d6701d848c9dfe0b31988736..af396ad949e8ba1f2890b740276a510ec60807e8 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -8,7 +8,7 @@ void PrintStat(std::ostream &out, std::string description, double value)
 	out << description << ": " << std::dec << value << std::endl;
 }
 
-size_t CALLBACK_TRAMPOLINE_SIZE=9;
+size_t CALLBACK_TRAMPOLINE_SIZE=10;
 size_t TRAMPOLINE_SIZE=5;
 size_t SHORT_PIN_SIZE=2;
 size_t LONG_PIN_SIZE=5;
@@ -108,7 +108,7 @@ size_t DetermineWorstCaseInsnSize(Instruction_t* insn, bool account_for_jump)
 		default:
 		{
 			required_size=insn->GetDataBits().size();
-			if (insn->GetCallback()!="") required_size+=CALLBACK_TRAMPOLINE_SIZE;
+			if (insn->GetCallback()!="") required_size=CALLBACK_TRAMPOLINE_SIZE;
 			break;
 		}
 	}
diff --git a/src/zipr.cpp b/src/zipr.cpp
index 023e9c6b13b87700ab115577a0c1513785672aca..c55873daf1678967128bf10d0b7c08d6ee92f108 100644
--- a/src/zipr.cpp
+++ b/src/zipr.cpp
@@ -499,6 +499,7 @@ void ZiprImpl_t::CreateExecutableScoops(const std::map<RangeAddress_t, int> &ord
 		m_firp->GetDataScoops().insert(text_scoop);
 	
 		cout<<"Adding scoop "<<text_scoop->GetName()<<hex<<" at "<<hex<<text_start->GetVirtualOffset()<<" - "<<text_end->GetVirtualOffset()<<endl;
+		m_zipr_scoops.insert(text_scoop);
 		memory_space.AddFreeRange(Range_t(text_start->GetVirtualOffset(),text_end->GetVirtualOffset()), true);
 	}
 }
@@ -623,7 +624,6 @@ void ZiprImpl_t::FindFreeRanges(const std::string &name)
 	RangeAddress_t new_free_page=page_round_up(max_addr);
 
 
-
 	memory_space.AddFreeRange(Range_t(new_free_page,(RangeAddress_t)-1), true);
 	if (m_verbose)
 		printf("Adding (mysterious) free range 0x%p to EOF\n", (void*)new_free_page);
@@ -4149,8 +4149,8 @@ void ZiprImpl_t::dump_map()
 void ZiprImpl_t::UpdateScoops()
 {
 	for(
-		DataScoopSet_t::iterator it=m_firp->GetDataScoops().begin(); 
-		it!=m_firp->GetDataScoops().end();
+		DataScoopSet_t::iterator it=m_zipr_scoops.begin(); 
+		it!=m_zipr_scoops.end();
 	   )
 	{
 		DataScoop_t* scoop=*it;
@@ -4160,6 +4160,7 @@ void ZiprImpl_t::UpdateScoops()
 			++it;
 			continue;
 		}
+		assert(m_zipr_scoops.find(scoop)!=m_zipr_scoops.end());
 
 		virtual_offset_t first_valid_address=0;
 		virtual_offset_t last_valid_address=0;