diff --git a/include/zipr_mem_space.h b/include/zipr_mem_space.h
index 18a782761f55e513535f21e7bcbfc034aeba857c..8706d63eb6421702738f74ebafae535cd852c202 100644
--- a/include/zipr_mem_space.h
+++ b/include/zipr_mem_space.h
@@ -46,7 +46,8 @@ class ZiprMemorySpace_t : public MemorySpace_t
 		void MergeFreeRange(RangeAddress_t addr);
 		RangeSet_t::iterator FindFreeRange(RangeAddress_t addr);
 		Range_t GetFreeRange(int size);
-		Range_t GetNearbyFreeRange(const RangeAddress_t hint);
+		std::pair<RangeSet_t::const_iterator,RangeSet_t::const_iterator>
+			GetNearbyFreeRanges(const RangeAddress_t hint, size_t count = 0);
 		void AddFreeRange(Range_t newRange);
 		void RemoveFreeRange(Range_t newRange);
 
diff --git a/src/memory_space.cpp b/src/memory_space.cpp
index 3932ff6ba8e4b0b4eaaff329999a1c44bedb9c55..f8ed44678ffc455e2b24ac66417a44955f309514 100644
--- a/src/memory_space.cpp
+++ b/src/memory_space.cpp
@@ -161,18 +161,16 @@ bool ZiprMemorySpace_t::IsValidRange(RangeSet_t::iterator it)
 	return it!=free_ranges.end();
 }
 
-Range_t ZiprMemorySpace_t::GetNearbyFreeRange(const RangeAddress_t hint)
+std::pair<RangeSet_t::const_iterator,RangeSet_t::const_iterator>
+	ZiprMemorySpace_t::GetNearbyFreeRanges(const RangeAddress_t hint,size_t count)
 {
-	RangeSet_t::iterator result;
 	Range_t search(hint, hint+1);
+	RangeSet_t::const_iterator result = free_ranges.upper_bound(search);
 	/*
 	 * TODO: Not quite sure what to make of this.
 	 */
-	if (free_ranges.end() == (result = free_ranges.upper_bound(search))) {
-		cout << "Oops: GetNearbyFreeRange() is BAD" << endl;
-		return Range_t(0,0);
-	}
-	return *result;
+	return std::pair<RangeSet_t::const_iterator,RangeSet_t::const_iterator>(
+		result, free_ranges.end());
 }
 
 Range_t ZiprMemorySpace_t::GetFreeRange(int size)