diff --git a/src/memory_space.cpp b/src/memory_space.cpp
index 903cf4ae81d4c2243dbb3b8a579905d3846dd429..29c23b32d1836d2d4255fa3d6c3da977f16f56c1 100644
--- a/src/memory_space.cpp
+++ b/src/memory_space.cpp
@@ -65,10 +65,8 @@ void MemorySpace_t::MergeFreeRange(RangeAddress_t addr)
 				printf("from: %p to %p\n", (void*)r.GetStart(), (void*)r.GetEnd());
 				printf("to: %p to %p\n", (void*)nnr.GetStart(), (void*)nnr.GetEnd());
 			}
-			free_ranges.insert(it, nnr);
-			free_ranges.erase(it);
 			nr = nnr;
-			merged = true;
+			free_ranges.erase(it);
 			break;
 		} else if ((addr-1) == r.GetEnd()) {
 			/*
@@ -82,17 +80,12 @@ void MemorySpace_t::MergeFreeRange(RangeAddress_t addr)
 				printf("from: %p to %p\n", (void*)r.GetStart(), (void*)r.GetEnd());
 				printf("to: %p to %p\n", (void*)nnr.GetStart(), (void*)nnr.GetEnd());
 			}
-			free_ranges.insert(it, nnr);
-			free_ranges.erase(it);
 			nr = nnr;
-			merged = true;
+			free_ranges.erase(it);
 			break;
 		}
 	}
 
-	if (!merged)
-		free_ranges.insert(it, nr);
-
 	/*
 	 * Correctness: 
 	 * Take a pass through and see if there are
@@ -110,15 +103,19 @@ void MemorySpace_t::MergeFreeRange(RangeAddress_t addr)
 				 * <--r-->
 				 *    <--nr-->
 				 */
-				(r.GetEnd() >= nr.GetStart() &&
+				((r.GetEnd()+1) >= nr.GetStart() &&
 				r.GetEnd() <= nr.GetEnd()) ||
 				/*
-				 *     <--r-->
 				 * <--nr-->
+				 *     <--r-->
 				 */
-				(r.GetStart() <= nr.GetEnd() &&
-				r.GetEnd() >= nr.GetEnd())
+				((nr.GetEnd()+1) >= r.GetStart() &&
+				nr.GetEnd() <= r.GetEnd())
 				) &&
+				/*
+				 * The ranges themselves are not
+				 * identical.
+				 */
 				(r.GetStart() != nr.GetStart() ||
 				r.GetEnd() != nr.GetEnd()))
 		{
@@ -135,9 +132,17 @@ void MemorySpace_t::MergeFreeRange(RangeAddress_t addr)
 			}
 			free_ranges.insert(it, merged_range);
 			free_ranges.erase(it);
-			return;
+			merged = true;
+			break;
 		}
 	}
+
+	if (!merged)
+	{
+		free_ranges.push_back(nr);
+	}
+}
+
 }
 
 std::list<Range_t>::iterator MemorySpace_t::FindFreeRange(RangeAddress_t addr)