Index: include/mm/frame.h
===================================================================
--- include/mm/frame.h	(revision 23443b234c61ff792992747d700dd8319e281c2a)
+++ include/mm/frame.h	(revision 48411044bd932431c1cfec24cf648466ae4b05ac)
@@ -45,14 +45,13 @@
 	frame_t *frames;	/**< array of frame_t structures in this zone */
 	link_t free_head;	/**< list of free frame_t structures */
-	link_t busy_head;	/**< list of busy frame_t structures */
 	count_t free_count;	/**< number of frame_t structures in free list */
-	count_t busy_count;	/**< number of frame_t structures in busy list */
+	count_t busy_count;	/**< number of frame_t structures not in free list */
 	int flags;
 };
 
 struct frame {
-	count_t refcount;	/**< when > 0, the frame is in busy list, otherwise the frame is in free list */
-	link_t link;		/**< link either to frame_zone free or busy list */
-};
+	count_t refcount;	/**< when == 0, the frame is in free list */
+	link_t link;		/**< link to zone free list when refcount == 0 */
+} __attribute__ ((packed));
 
 extern spinlock_t zone_head_lock;	/**< this lock protects zone_head list */
Index: src/main/main.c
===================================================================
--- src/main/main.c	(revision 23443b234c61ff792992747d700dd8319e281c2a)
+++ src/main/main.c	(revision 48411044bd932431c1cfec24cf648466ae4b05ac)
@@ -36,8 +36,6 @@
 #include <proc/thread.h>
 #include <proc/task.h>
-#include <mm/vm.h>
 #include <main/kinit.h>
 #include <cpu.h>
-#include <mm/heap.h>
 
 #ifdef __SMP__
@@ -49,7 +47,10 @@
 
 #include <arch/mm/memory_init.h>
+#include <mm/heap.h>
 #include <mm/frame.h>
 #include <mm/page.h>
 #include <mm/tlb.h>
+#include <mm/vm.h>
+
 #include <synch/waitq.h>
 
Index: src/mm/frame.c
===================================================================
--- src/mm/frame.c	(revision 23443b234c61ff792992747d700dd8319e281c2a)
+++ src/mm/frame.c	(revision 48411044bd932431c1cfec24cf648466ae4b05ac)
@@ -116,5 +116,4 @@
 	frame->refcount++;
 	list_remove(tmp);			/* remove frame from free_head */
-	list_append(tmp, &zone->busy_head);	/* append frame to busy_head */
 	zone->free_count--;
 	zone->busy_count++;
@@ -181,5 +180,4 @@
 
 	if (!--frame->refcount) {
-		list_remove(&frame->link);			/* remove frame from busy_head */
 		list_append(&frame->link, &zone->free_head);	/* append frame to free_head */
 		zone->free_count++;
@@ -196,5 +194,5 @@
  *
  * Find respective frame structrue for supplied addr.
- * Increment frame reference count and move the frame structure to busy list.
+ * Increment frame reference count and remove the frame structure from free list.
  *
  * @param addr Address of the frame to be marked. It must be a multiple of FRAME_SIZE.
@@ -242,5 +240,4 @@
 
 		list_remove(&frame->link);			/* remove frame from free_head */
-		list_append(&frame->link, &zone->busy_head);	/* append frame to busy_head */
 		zone->free_count--;
 		zone->busy_count++;
@@ -314,5 +311,4 @@
 
 		z->busy_count = 0;
-		list_initialize(&z->busy_head);
 		
 		z->frames = (frame_t *) malloc(cnt * sizeof(frame_t));
