Index: kernel/generic/include/adt/odict.h
===================================================================
--- kernel/generic/include/adt/odict.h	(revision 6f7071b562c845499c96c4a1354e9a5d3ce94a05)
+++ kernel/generic/include/adt/odict.h	(revision 6454db5ed3c97ed717ab7fd81dbe7d23c997b2c7)
@@ -45,4 +45,5 @@
 
 extern void odict_initialize(odict_t *, odgetkey_t, odcmp_t);
+extern void odict_finalize(odict_t *);
 extern void odlink_initialize(odlink_t *);
 extern void odict_insert(odlink_t *, odict_t *, odlink_t *);
Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision 6f7071b562c845499c96c4a1354e9a5d3ce94a05)
+++ kernel/generic/include/mm/as.h	(revision 6454db5ed3c97ed717ab7fd81dbe7d23c997b2c7)
@@ -46,4 +46,5 @@
 #include <adt/list.h>
 #include <adt/btree.h>
+#include <adt/odict.h>
 #include <lib/elf.h>
 #include <arch.h>
@@ -115,6 +116,9 @@
 	mutex_t lock;
 
-	/** B+tree of address space areas. */
-	btree_t as_area_btree;
+	/** Address space areas in this address space by base address.
+	 *
+	 * Members are of type as_area_t.
+	 */
+	odict_t as_areas;
 
 	/** Non-generic content. */
@@ -204,4 +208,7 @@
 	as_t *as;
 
+	/** Link to @c as->as_areas */
+	odlink_t las_areas;
+
 	/** Memory flags. */
 	unsigned int flags;
@@ -273,4 +280,6 @@
     uintptr_t *, uintptr_t);
 extern errno_t as_area_change_flags(as_t *, unsigned int, uintptr_t);
+extern as_area_t *as_area_first(as_t *);
+extern as_area_t *as_area_next(as_area_t *);
 
 extern unsigned int as_area_get_flags(as_area_t *);
