diff --git a/src/spaces.cc b/src/spaces.cc
index 8e953e2a55..50530a1957 100644
--- a/src/spaces.cc
+++ b/src/spaces.cc
@@ -2202,6 +2202,11 @@ int FreeList::Free(Address start, int size_in_bytes) {
   // Insert other blocks at the head of a free list of the appropriate
   // magnitude.
   if (size_in_bytes <= kSmallListMax) {
+    ASSERT(!owner_->ConstantAllocationSize() ||
+        (owner_->identity() == MAP_SPACE && size_in_bytes >= Map::kSize) ||
+        (owner_->identity() == CELL_SPACE && size_in_bytes >= Cell::kSize) ||
+        (owner_->identity() == PROPERTY_CELL_SPACE &&
+            size_in_bytes >= JSGlobalPropertyCell::kSize));
     small_list_.Free(node, size_in_bytes);
     page->add_available_in_small_free_list(size_in_bytes);
   } else if (size_in_bytes <= kMediumListMax) {
@@ -2224,9 +2229,11 @@ FreeListNode* FreeList::FindNodeFor(int size_in_bytes, int* node_size) {
   FreeListNode* node = NULL;
   Page* page = NULL;
 
-  if (size_in_bytes <= kSmallAllocationMax) {
+  if ((owner_->ConstantAllocationSize() && size_in_bytes <= kSmallListMax) ||
+      size_in_bytes <= kSmallAllocationMax) {
     node = small_list_.PickNodeFromList(node_size);
     if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
       page = Page::FromAddress(node->address());
       page->add_available_in_small_free_list(-(*node_size));
       return node;
@@ -2236,6 +2243,7 @@ FreeListNode* FreeList::FindNodeFor(int size_in_bytes, int* node_size) {
   if (size_in_bytes <= kMediumAllocationMax) {
     node = medium_list_.PickNodeFromList(node_size);
     if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
       page = Page::FromAddress(node->address());
       page->add_available_in_medium_free_list(-(*node_size));
       return node;
@@ -2245,6 +2253,7 @@ FreeListNode* FreeList::FindNodeFor(int size_in_bytes, int* node_size) {
   if (size_in_bytes <= kLargeAllocationMax) {
     node = large_list_.PickNodeFromList(node_size);
     if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
       page = Page::FromAddress(node->address());
       page->add_available_in_large_free_list(-(*node_size));
       return node;
diff --git a/src/spaces.h b/src/spaces.h
index ca61081ded..56be1406b6 100644
--- a/src/spaces.h
+++ b/src/spaces.h
@@ -1820,6 +1820,11 @@ class PagedSpace : public Space {
     return area_size_;
   }
 
+  bool ConstantAllocationSize() {
+    return identity() == MAP_SPACE || identity() == CELL_SPACE ||
+        identity() == PROPERTY_CELL_SPACE;
+  }
+
  protected:
   FreeList* free_list() { return &free_list_; }