Index: generic/src/mm/frame.c
===================================================================
--- generic/src/mm/frame.c	(revision c23502d0c116fcac041f6a339a7791811e9f2e9c)
+++ generic/src/mm/frame.c	(revision b7dcabb5c2118ec7d9e0680db5929cb212188518)
@@ -135,7 +135,7 @@
 	spinlock_lock(&zones.lock);
 	/* Try to merge */
-	if (zones.count+1 == ZONES_MAX)
+	if (zones.count + 1 == ZONES_MAX)
 		panic("Maximum zone(%d) count exceeded.", ZONES_MAX);
-	for (i=0; i < zones.count; i++) {
+	for (i = 0; i < zones.count; i++) {
 		/* Check for overflow */
 		z = zones.info[i];
@@ -149,6 +149,6 @@
 	}
 	/* Move other zones up */
-	for (j=i;j < zones.count;j++)
-		zones.info[j+1] = zones.info[j];
+	for (j = i;j < zones.count; j++)
+		zones.info[j + 1] = zones.info[j];
 	zones.info[i] = newzone;
 	zones.count++;
@@ -690,6 +690,6 @@
 	/* Replace existing zones in zoneinfo list */
 	zones.info[z1] = newzone;
-	for (i=z2+1;i < zones.count;i++)
-		zones.info[i-1] = zones.info[i];
+	for (i = z2 + 1; i < zones.count; i++)
+		zones.info[i - 1] = zones.info[i];
 	zones.count--;
 
@@ -809,17 +809,22 @@
 	confcount = SIZE2FRAMES(zone_conf_size(count));
 	if (confframe >= start && confframe < start+count) {
-		for (;confframe < start+count;confframe++) {
+		for (;confframe < start + count; confframe++) {
 			addr = PFN2ADDR(confframe);
-			if (overlaps(addr, PFN2ADDR(confcount),
-				     KA2PA(config.base),config.kernel_size))
+			if (overlaps(addr, PFN2ADDR(confcount), KA2PA(config.base), config.kernel_size))
 				continue;
-			if (config.init_addr)
-				if (overlaps(addr,PFN2ADDR(confcount), 
-					     KA2PA(config.init_addr),
-					     config.init_size))
-					continue;
+			
+			bool overlap = false;
+			count_t i;
+			for (i = 0; i < init.cnt; i++)
+				if (overlaps(addr, PFN2ADDR(confcount), KA2PA(init.tasks[i].addr), init.tasks[i].size)) {
+					overlap = true;
+					break;
+				}
+			if (overlap)
+				continue;
+			
 			break;
 		}
-		if (confframe >= start+count)
+		if (confframe >= start + count)
 			panic("Cannot find configuration data for zone.");
 	}
@@ -990,7 +995,8 @@
 		pfn_t lastframe = ADDR2PFN(KA2PA(config.base+config.kernel_size));
 		frame_mark_unavailable(firstframe,lastframe-firstframe+1);
-		if (config.init_size > 0)
-			frame_mark_unavailable(ADDR2PFN(KA2PA(config.init_addr)),
-					       SIZE2FRAMES(config.init_size));
+		
+		count_t i;
+		for (i = 0; i < init.cnt; i++)
+			frame_mark_unavailable(ADDR2PFN(KA2PA(init.tasks[i].addr)), SIZE2FRAMES(init.tasks[i].size));
 	}
 }
@@ -1010,5 +1016,5 @@
 	printf("#  Base address\tFree Frames\tBusy Frames\n");
 	printf("   ------------\t-----------\t-----------\n");
-	for (i=0;i<zones.count;i++) {
+	for (i = 0; i < zones.count; i++) {
 		zone = zones.info[i];
 		spinlock_lock(&zone->lock);
@@ -1033,5 +1039,5 @@
 	spinlock_lock(&zones.lock);
 
-	for (i=0;i < zones.count; i++) {
+	for (i = 0; i < zones.count; i++) {
 		if (i == num || PFN2ADDR(zones.info[i]->base) == num) {
 			zone = zones.info[i];
