Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision de0af3afebf0198d5752b631cae05c2546287398)
+++ kernel/generic/include/mm/as.h	(revision be912f539ceff330c68a2726d4baf6dd4f0a10bb)
@@ -45,5 +45,4 @@
 #include <synch/mutex.h>
 #include <adt/list.h>
-#include <adt/btree.h>
 #include <adt/odict.h>
 #include <lib/elf.h>
@@ -158,4 +157,27 @@
 } as_pagemap_t;
 
+/** Used space interval */
+typedef struct {
+	/** Containing used_space structure */
+	struct used_space *used_space;
+	/** Link to @c used_space->ivals */
+	odlink_t lused_space;
+	/** First page address */
+	uintptr_t page;
+	/** Count of pages */
+	size_t count;
+} used_space_ival_t;
+
+/** Map of used space in an address space area */
+typedef struct used_space {
+	/**
+	 * Dictionary of intervals by start address.
+	 * Members are of type @c used_space_ival_t.
+	 */
+	odict_t ivals;
+	/** Total number of used pages. */
+	size_t pages;
+} used_space_t;
+
 /**
  * This structure contains information associated with the shared address space
@@ -240,12 +262,9 @@
 	size_t pages;
 
-	/** Number of resident pages in the area. */
-	size_t resident;
-
 	/** Base address of this area. */
 	uintptr_t base;
 
 	/** Map of used space. */
-	btree_t used_space;
+	used_space_t used_space;
 
 	/**
@@ -313,6 +332,8 @@
 extern bool as_area_check_access(as_area_t *, pf_access_t);
 extern size_t as_area_get_size(uintptr_t);
-extern bool used_space_insert(as_area_t *, uintptr_t, size_t);
-extern bool used_space_remove(as_area_t *, uintptr_t, size_t);
+extern used_space_ival_t *used_space_first(used_space_t *);
+extern used_space_ival_t *used_space_next(used_space_ival_t *);
+extern used_space_ival_t *used_space_find_gteq(used_space_t *, uintptr_t);
+extern bool used_space_insert(used_space_t *, uintptr_t, size_t);
 
 /* Interface to be implemented by architectures. */
