Index: Makefile
===================================================================
--- Makefile	(revision 75e1db00d0ee9a3395d39a41f301594454557f36)
+++ Makefile	(revision d6e852916cb4672682728fa0540fe558bca857b2)
@@ -178,6 +178,5 @@
 
 depend: archlinks
-	-makedepend $(DEFS) $(CFLAGS) -f - $(ARCH_SOURCES) $(GENARCH_SOURCES) $(GENERIC_SOURCES) >Makefile.depend 2>/dev/null
-	#$(CC) $(DEFS) $(CFLAGS) -M $(ARCH_SOURCES) $(GENARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend
+	-makedepend $(DEFS) $(CFLAGS) -f - $(ARCH_SOURCES) $(GENARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
 
 arch/$(ARCH)/_link.ld: arch/$(ARCH)/_link.ld.in
@@ -195,5 +194,4 @@
 	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > kernel.objdump
 	tools/genmap.py kernel.map.pre kernel.objdump generic/src/debug/real_map.bin 
-	
 
 generic/src/debug/real_map.o: generic/src/debug/real_map.bin
@@ -207,5 +205,5 @@
 
 boot: kernel.bin
-	$(MAKE) -C arch/$(ARCH)/boot build KERNEL_SIZE="`cat kernel.bin | wc -c`" CC=$(CC) AS=$(AS) LD=$(LD)
+	if [ -d arch/$(ARCH)/boot ] ; then $(MAKE) -C arch/$(ARCH)/boot build KERNEL_SIZE="`cat kernel.bin | wc -c`" CC=$(CC) AS=$(AS) LD=$(LD) ; fi
 
 disasm: kernel.raw
Index: ch/ia32/boot/Makefile
===================================================================
--- arch/ia32/boot/Makefile	(revision 75e1db00d0ee9a3395d39a41f301594454557f36)
+++ 	(revision )
@@ -1,5 +1,0 @@
-.PHONY: build clean
-
-build:
-
-clean:
Index: arch/ppc32/include/arch.h
===================================================================
--- arch/ppc32/include/arch.h	(revision 75e1db00d0ee9a3395d39a41f301594454557f36)
+++ arch/ppc32/include/arch.h	(revision d6e852916cb4672682728fa0540fe558bca857b2)
@@ -32,10 +32,3 @@
 #include <genarch/ofw/ofw.h>
 
-#ifdef early_mapping
-#undef early_mapping
 #endif
-
-#define early_mapping(stack, size) \
-	ofw_claim((void *) stack, size, 0);
-
-#endif
Index: ch/sparc64/boot/Makefile
===================================================================
--- arch/sparc64/boot/Makefile	(revision 75e1db00d0ee9a3395d39a41f301594454557f36)
+++ 	(revision )
@@ -1,6 +1,0 @@
-.PHONY: build clean
-
-build:
-
-clean:
-
Index: generic/include/arch.h
===================================================================
--- generic/include/arch.h	(revision 75e1db00d0ee9a3395d39a41f301594454557f36)
+++ generic/include/arch.h	(revision d6e852916cb4672682728fa0540fe558bca857b2)
@@ -43,8 +43,4 @@
 #define PREEMPTION_DISABLED	THE->preemption_disabled
 
-#ifndef early_mapping
-#define early_mapping(stack, size)
-#endif /* early_mapping */
-
 /**
  * For each possible kernel stack, structure
Index: generic/include/config.h
===================================================================
--- generic/include/config.h	(revision 75e1db00d0ee9a3395d39a41f301594454557f36)
+++ generic/include/config.h	(revision d6e852916cb4672682728fa0540fe558bca857b2)
@@ -41,13 +41,18 @@
 
 struct config {
+	count_t cpu_count;
+	volatile count_t cpu_active;
+
 	__address base;
 	size_t memory_size;
-	size_t kernel_size;
 	
 	__address init_addr;
 	size_t init_size;
-
-	count_t cpu_count;
-	volatile count_t cpu_active;
+	
+	__address heap_addr;
+	size_t heap_size;
+	size_t heap_delta;            /**< Extra space between heap and stack (enforced by alignment requirements) */
+	
+	size_t kernel_size;           /**< Size of memory in bytes taken by kernel, heap and stack */
 };
 
Index: generic/src/main/main.c
===================================================================
--- generic/src/main/main.c	(revision 75e1db00d0ee9a3395d39a41f301594454557f36)
+++ generic/src/main/main.c	(revision d6e852916cb4672682728fa0540fe558bca857b2)
@@ -83,5 +83,4 @@
 #endif
 
-
 config_t config;
 context_t ctx;
@@ -98,21 +97,4 @@
 __address init_addr = 0;
 size_t init_size = 0;
-
-/**
- * Size of memory in bytes taken by kernel and heap.
- */
-static size_t kernel_size;
-
-/**
- * Size of heap.
- */
-static size_t heap_size;
-
-
-/**
- * Extra space between heap and stack
- * enforced by alignment requirements.
- */
-static size_t heap_delta;
 
 void main_bsp(void);
@@ -141,18 +123,23 @@
 	config.cpu_count = 1;
 	config.cpu_active = 1;
+	
 	config.base = hardcoded_load_address;
 	config.memory_size = get_memory_size();
 	config.init_addr = init_addr;
 	config.init_size = init_size;
-
-	heap_size = CONFIG_HEAP_SIZE + (config.memory_size/FRAME_SIZE)*sizeof(frame_t);
-	kernel_size = ALIGN_UP(hardcoded_ktext_size + hardcoded_kdata_size + heap_size, PAGE_SIZE);
-	heap_delta = kernel_size - (hardcoded_ktext_size + hardcoded_kdata_size + heap_size);
-	
-	config.kernel_size = kernel_size + CONFIG_STACK_SIZE;
+	
+	if (init_size > 0)
+		config.heap_addr = init_addr + init_size;
+	else
+		config.heap_addr = hardcoded_load_address + hardcoded_ktext_size + hardcoded_kdata_size;
+	
+	config.heap_size = CONFIG_HEAP_SIZE + (config.memory_size / FRAME_SIZE) * sizeof(frame_t);
+	
+	config.kernel_size = ALIGN_UP(config.heap_addr - hardcoded_load_address + config.heap_size, PAGE_SIZE);
+	config.heap_delta = config.kernel_size - (config.heap_addr - hardcoded_load_address + config.heap_size);
+	config.kernel_size = config.kernel_size + CONFIG_STACK_SIZE;
 	
 	context_save(&ctx);
-	early_mapping(config.base + hardcoded_ktext_size + hardcoded_kdata_size, CONFIG_STACK_SIZE + heap_size + heap_delta);
-	context_set(&ctx, FADDR(main_bsp_separated_stack), config.base + kernel_size, CONFIG_STACK_SIZE);
+	context_set(&ctx, FADDR(main_bsp_separated_stack), config.base + config.kernel_size, CONFIG_STACK_SIZE);
 	context_restore(&ctx);
 	/* not reached */
@@ -186,10 +173,10 @@
 	
 	arch_pre_mm_init();
-	early_heap_init(config.base + hardcoded_ktext_size + hardcoded_kdata_size, heap_size + heap_delta);
+	early_heap_init(config.heap_addr, config.heap_size + config.heap_delta);
 	frame_init();
 	page_init();
 	tlb_init();
 	arch_post_mm_init();
-
+	
 	printf("%s, release %s (%s)%s\nBuilt%s for %s\n%s\n", project, release, name, revision, timestamp, arch, copyright);
 	printf("%P: hardcoded_ktext_size=%dK, hardcoded_kdata_size=%dK\n",
