Index: uspace/lib/c/generic/rtld/module.c
===================================================================
--- uspace/lib/c/generic/rtld/module.c	(revision 4f205248dfb2dd7692ef1b857648ba9d96fe496c)
+++ uspace/lib/c/generic/rtld/module.c	(revision f3fdecce464c06501b2695dccee1cdc8874f6f1e)
@@ -202,16 +202,16 @@
 	str_cpy(name_buf + 5, NAME_BUF_SIZE - 5, name);
 
-	/* FIXME: need to real allocation of address space */
-	m->bias = rtld->next_bias;
-	rtld->next_bias += 0x100000;
 
 	DPRINTF("filename:'%s'\n", name_buf);
-	DPRINTF("load '%s' at 0x%zx\n", name_buf, m->bias);
-
-	rc = elf_load_file_name(name_buf, m->bias, ELDF_RW, &info);
+
+	rc = elf_load_file_name(name_buf, ELDF_RW, &info);
 	if (rc != EE_OK) {
 		printf("Failed to load '%s'\n", name_buf);
 		exit(1);
 	}
+
+	m->bias = elf_get_bias(info.base);
+
+	DPRINTF("loaded '%s' at 0x%zx\n", name_buf, m->bias);
 
 	if (info.dynamic == NULL) {
Index: uspace/lib/c/generic/rtld/rtld.c
===================================================================
--- uspace/lib/c/generic/rtld/rtld.c	(revision 4f205248dfb2dd7692ef1b857648ba9d96fe496c)
+++ uspace/lib/c/generic/rtld/rtld.c	(revision f3fdecce464c06501b2695dccee1cdc8874f6f1e)
@@ -53,5 +53,4 @@
 	list_initialize(&runtime_env->modules);
 	list_initialize(&runtime_env->imodules);
-	runtime_env->next_bias = 0x2000000;
 	runtime_env->program = NULL;
 	runtime_env->next_id = 1;
@@ -121,7 +120,4 @@
 	env->program = prog;
 
-	/* Work around non-existent memory space allocation. */
-	env->next_bias = 0x1000000;
-
 	/*
 	 * Now we can continue with loading all other modules.
