Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision 0321109831bdc3ef68b98abcca525ea8d18e34a5)
+++ kernel/generic/src/mm/as.c	(revision 6193351ef49847d1fa832d3534dcc119207d7747)
@@ -152,5 +152,5 @@
 	 * reference count never drops to zero.
 	 */
-	atomic_set(&AS_KERNEL->refcount, 1);
+	as_hold(AS_KERNEL);
 }
 
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 0321109831bdc3ef68b98abcca525ea8d18e34a5)
+++ kernel/generic/src/proc/task.c	(revision 6193351ef49847d1fa832d3534dcc119207d7747)
@@ -210,6 +210,10 @@
 	btree_create(&ta->futexes);
 	
+	/*
+	 * Get a reference to the address space.
+	 */
+	as_hold(ta->as);
+
 	ipl = interrupts_disable();
-	atomic_inc(&as->refcount);
 	spinlock_lock(&tasks_lock);
 	ta->taskid = ++task_counter;
@@ -250,6 +254,5 @@
 	 * Drop our reference to the address space.
 	 */
-	if (atomic_predec(&t->as->refcount) == 0) 
-		as_destroy(t->as);
+	as_release(t->as);
 	
 	slab_free(task_slab, t);
