Index: generic/include/mm/frame.h
===================================================================
--- generic/include/mm/frame.h	(revision 2cc5e0500c1e81f5b8a5a9df9e905047828173f1)
+++ generic/include/mm/frame.h	(revision d3dfa425724cd92c2f2469df0b8c92dc1ea66a61)
@@ -99,6 +99,6 @@
 
 extern void frame_init(void);
-__address frame_alloc_generic(__u8 order, int flags, int * status, int *pzone);
-extern void frame_free(__address addr);
+extern pfn_t frame_alloc_generic(__u8 order, int flags, int * status, int *pzone);
+extern void frame_free(pfn_t pfn);
 
 extern int zone_create(pfn_t start, count_t count, pfn_t confframe, int flags);
Index: generic/src/mm/frame.c
===================================================================
--- generic/src/mm/frame.c	(revision 2cc5e0500c1e81f5b8a5a9df9e905047828173f1)
+++ generic/src/mm/frame.c	(revision d3dfa425724cd92c2f2469df0b8c92dc1ea66a61)
@@ -311,5 +311,4 @@
 	}
 	
-
 	if (frame_index_valid(zone, index)) {
 		if (zone->frames[index].buddy_order == frame->buddy_order && 
@@ -470,9 +469,9 @@
 	if (!--frame->refcount) {
 		buddy_system_free(zone->buddy_system, &frame->buddy_link);
-	}
-
-	/* Update zone information. */
-	zone->free_count += (1 << order);
-	zone->busy_count -= (1 << order);
+	
+		/* Update zone information. */
+		zone->free_count += (1 << order);
+		zone->busy_count -= (1 << order);
+	}
 }
 
@@ -601,5 +600,4 @@
 	}
 }
-
 
 /** Reduce allocated block to count of order 0 frames
@@ -709,5 +707,4 @@
 }
 
-
 /**
  * Merge all zones into one big zone
@@ -773,5 +770,4 @@
 }
 
-
 /** Compute configuration data size for zone */
 __address zone_conf_size(count_t count)
@@ -784,5 +780,4 @@
 	return size;
 }
-
 
 /** Create and add zone to system
