Index: generic/src/adt/btree.c
===================================================================
--- generic/src/adt/btree.c	(revision bd571f44726d852be3f6d326344dd5d2ef1c08b2)
+++ generic/src/adt/btree.c	(revision 152b2b0ca223d7a95abf0fbd5e89c977c114a9ce)
@@ -51,4 +51,5 @@
 #include <print.h>
 
+static void btree_destroy_subtree(btree_node_t *root);
 static void _btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *rsubtree, btree_node_t *node);
 static void _btree_remove(btree_t *t, btree_key_t key, btree_node_t *node);
@@ -102,6 +103,5 @@
 void btree_destroy(btree_t *t)
 {
-	ASSERT(!t->root->keys);
-	slab_free(btree_node_slab, t->root);
+	btree_destroy_subtree(t->root);
 }
 
@@ -127,4 +127,21 @@
 	
 	_btree_insert(t, key, value, NULL, lnode);
+}
+
+/** Destroy subtree rooted in a node.
+ *
+ * @param root Root of the subtree.
+ */
+void btree_destroy_subtree(btree_node_t *root)
+{
+	int i;
+
+	if (root->keys) {
+		for (i = 0; i < root->keys + 1; i++) { 
+			if (root->subtree[i])
+				btree_destroy_subtree(root->subtree[i]);
+		}
+	}
+	slab_free(btree_node_slab, root);
 }
 
Index: generic/src/mm/as.c
===================================================================
--- generic/src/mm/as.c	(revision bd571f44726d852be3f6d326344dd5d2ef1c08b2)
+++ generic/src/mm/as.c	(revision 152b2b0ca223d7a95abf0fbd5e89c977c114a9ce)
@@ -162,10 +162,9 @@
 		ASSERT(!list_empty(&as->as_area_btree.leaf_head));
 		node = list_get_instance(&as->as_area_btree.leaf_head.next, btree_node_t, leaf_link);
-		if ((cond = node->keys)) {
+		if ((cond = node->keys))
 			as_area_destroy(as, node->key[0]);
-			btree_remove(&as->as_area_btree, node->key[0], node);
-		}
-	}
-	
+	}
+	
+	btree_destroy(&as->as_area_btree);
 	page_table_destroy(as->page_table);
 
@@ -461,6 +460,4 @@
 				page_table_unlock(as, false);
 			}
-			if (!used_space_remove(area, b, i))
-				panic("Could not remove used space.\n");
 		}
 	}
@@ -1490,5 +1487,4 @@
 			if ((cond = node->keys)) {
 				frame_free(ADDR2PFN((__address) node->value[0]));
-				btree_remove(&sh_info->pagemap, node->key[0], node);
 			}
 		}
