diff --git a/src/memory_space.cpp b/src/memory_space.cpp
index 4d2465dc05b3a381c83760e1042a208c96d0d170..4788d3ca57b3a8255768bdb3819fb538da051a67 100644
--- a/src/memory_space.cpp
+++ b/src/memory_space.cpp
@@ -176,7 +176,7 @@ std::pair<RangeSet_t::const_iterator,RangeSet_t::const_iterator>
 	ZiprMemorySpace_t::GetNearbyFreeRanges(const RangeAddress_t hint,size_t count)
 {
 	Range_t search(hint, hint+1);
-	RangeSet_t::const_iterator result = free_ranges.upper_bound(search);
+	RangeSet_t::const_iterator result = free_ranges.lower_bound(search);
 	/*
 	 * TODO: Not quite sure what to make of this.
 	 */
diff --git a/src/zipr.cpp b/src/zipr.cpp
index 7a13e966207cf4cbdeea134ef4025c03f5eba741..744f9426d9354314590d09ceefbcba22c2f404fd 100644
--- a/src/zipr.cpp
+++ b/src/zipr.cpp
@@ -1429,7 +1429,8 @@ void ZiprImpl_t::PlaceDollops()
 						 << std::hex << placement.GetEnd()
 						 << endl;
 
-			if ((placement.GetEnd()-placement.GetStart()) < minimum_valid_req_size){
+			if ((placement.GetEnd()-placement.GetStart()) < minimum_valid_req_size &&
+			    placement.GetEnd()-placement.GetStart() < to_place->GetSize()) {
 				if (m_verbose)
 					cout << "Bad GetNearbyFreeRange() result." << endl;
 				placed = false;