Index: kernel/genarch/include/mm/as_ht.h
===================================================================
--- kernel/genarch/include/mm/as_ht.h	(revision e71a61d2f187f60c13024e0c300fa8b4703b2c70)
+++ kernel/genarch/include/mm/as_ht.h	(revision b3f8fb771f871e7f2bb35ce9339717639e8f86d6)
@@ -36,7 +36,53 @@
 #define KERN_AS_HT_H_
 
-#include <mm/as.h>
+#include <mm/mm.h>
+#include <arch/mm/asid.h>
+#include <adt/list.h>
+#include <adt/btree.h>
+#include <synch/mutex.h>
 
-extern as_operations_t as_ht_operations;
+/** Address space structure.
+ *
+ * as_t contains the list of as_areas of userspace accessible
+ * pages for one or more tasks. Ranges of kernel memory pages are not
+ * supposed to figure in the list as they are shared by all tasks and
+ * set up during system initialization.
+ */
+typedef struct {
+	/** Protected by asidlock. */
+	link_t inactive_as_with_asid_link;
+
+	mutex_t lock;
+
+	/** Number of references (i.e tasks that reference this as). */
+	count_t refcount;
+
+	/** Number of processors on wich is this address space active. */
+	count_t cpu_refcount;
+
+	/** B+tree of address space areas. */
+	btree_t as_area_btree;
+
+	/** Address space identifier. Constant on architectures that do not support ASIDs.*/
+	asid_t asid;
+	
+	/** Architecture specific content. */
+	as_arch_t arch;
+} as_t;
+
+typedef struct {
+	link_t link;		/**< Page hash table link. */
+	as_t *as;		/**< Address space. */
+	uintptr_t page;		/**< Virtual memory page. */
+	uintptr_t frame;	/**< Physical memory frame. */
+	unsigned g : 1;		/**< Global page. */
+	unsigned x : 1;		/**< Execute. */
+	unsigned w : 1;		/**< Writable. */
+	unsigned k : 1;		/**< Kernel privileges required. */
+	unsigned c : 1;		/**< Cacheable. */
+	unsigned a : 1;		/**< Accessed. */
+	unsigned d : 1;		/**< Dirty. */
+	unsigned p : 1;		/**< Present. */
+} pte_t;
 
 #endif
Index: kernel/genarch/include/mm/as_pt.h
===================================================================
--- kernel/genarch/include/mm/as_pt.h	(revision e71a61d2f187f60c13024e0c300fa8b4703b2c70)
+++ kernel/genarch/include/mm/as_pt.h	(revision b3f8fb771f871e7f2bb35ce9339717639e8f86d6)
@@ -36,7 +36,43 @@
 #define KERN_AS_PT_H_
 
-#include <mm/as.h>
+#include <mm/mm.h>
+#include <arch/mm/asid.h>
+#include <adt/list.h>
+#include <adt/btree.h>
+#include <synch/mutex.h>
 
-extern as_operations_t as_pt_operations;
+#define AS_PAGE_TABLE
+
+/** Address space structure.
+ *
+ * as_t contains the list of as_areas of userspace accessible
+ * pages for one or more tasks. Ranges of kernel memory pages are not
+ * supposed to figure in the list as they are shared by all tasks and
+ * set up during system initialization.
+ */
+typedef struct {
+	/** Protected by asidlock. */
+	link_t inactive_as_with_asid_link;
+
+	mutex_t lock;
+
+	/** Number of references (i.e tasks that reference this as). */
+	count_t refcount;
+
+	/** Number of processors on wich is this address space active. */
+	count_t cpu_refcount;
+
+	/** B+tree of address space areas. */
+	btree_t as_area_btree;
+	
+	/** Page table pointer. */
+	pte_t *page_table;
+
+	/** Address space identifier. Constant on architectures that do not support ASIDs.*/
+	asid_t asid;
+	
+	/** Architecture specific content. */
+	as_arch_t arch;
+} as_t;
 
 #endif
Index: kernel/genarch/include/mm/page_ht.h
===================================================================
--- kernel/genarch/include/mm/page_ht.h	(revision e71a61d2f187f60c13024e0c300fa8b4703b2c70)
+++ kernel/genarch/include/mm/page_ht.h	(revision b3f8fb771f871e7f2bb35ce9339717639e8f86d6)
@@ -40,8 +40,8 @@
 #define KERN_PAGE_HT_H_
 
+#include <arch/types.h>
+#include <mm/as.h>
 #include <mm/page.h>
 #include <synch/mutex.h>
-#include <arch/types.h>
-#include <adt/list.h>
 #include <adt/hash_table.h>
 
@@ -62,20 +62,7 @@
 #define SET_PTL0_ADDRESS(x)
 
-struct pte {
-	link_t link;		/**< Page hash table link. */
-	as_t *as;		/**< Address space. */
-	uintptr_t page;		/**< Virtual memory page. */
-	uintptr_t frame;	/**< Physical memory frame. */
-	unsigned g : 1;		/**< Global page. */
-	unsigned x : 1;		/**< Execute. */
-	unsigned w : 1;		/**< Writable. */
-	unsigned k : 1;		/**< Kernel privileges required. */
-	unsigned c : 1;		/**< Cacheable. */
-	unsigned a : 1;		/**< Accessed. */
-	unsigned d : 1;		/**< Dirty. */
-	unsigned p : 1;		/**< Present. */
-};
+extern as_operations_t as_ht_operations;
+extern page_mapping_operations_t ht_mapping_operations;
 
-extern page_mapping_operations_t ht_mapping_operations;
 extern mutex_t page_ht_lock;
 extern hash_table_t page_ht;
Index: kernel/genarch/include/mm/page_pt.h
===================================================================
--- kernel/genarch/include/mm/page_pt.h	(revision e71a61d2f187f60c13024e0c300fa8b4703b2c70)
+++ kernel/genarch/include/mm/page_pt.h	(revision b3f8fb771f871e7f2bb35ce9339717639e8f86d6)
@@ -45,5 +45,5 @@
 
 #include <arch/types.h>
-#include <typedefs.h>
+#include <mm/as.h>
 #include <mm/page.h>
 
@@ -108,4 +108,5 @@
 #define PTE_EXECUTABLE(p)	PTE_EXECUTABLE_ARCH((p))
 
+extern as_operations_t as_pt_operations;
 extern page_mapping_operations_t pt_mapping_operations;
 
