diff --git a/fastboot/bootimg.c b/fastboot/bootimg.c
index 1d77b3c..93db575 100644
--- a/fastboot/bootimg.c
+++ b/fastboot/bootimg.c
@@ -41,7 +41,8 @@ boot_img_hdr *mkbootimg(void *kernel, unsigned kernel_size,
                         void *ramdisk, unsigned ramdisk_size,
                         void *second, unsigned second_size,
                         unsigned page_size,
-                        unsigned *bootimg_size)
+                        unsigned *bootimg_size,
+						int islinuximg)
 {
     unsigned kernel_actual;
     unsigned ramdisk_actual;
@@ -66,15 +67,22 @@ boot_img_hdr *mkbootimg(void *kernel, unsigned kernel_size,
     memcpy(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE);
     
     hdr->kernel_size = kernel_size;
-    hdr->kernel_addr = 0x10008000;
     hdr->ramdisk_size = ramdisk_size;
-    hdr->ramdisk_addr = 0x11000000;
     hdr->second_size = second_size;
-    hdr->second_addr = 0x10F00000;
-    
-    hdr->tags_addr = 0x10000100;
     hdr->page_size = page_size;
 
+	if(islinuximg) {
+		hdr->kernel_addr = 0x10008000;
+		hdr->ramdisk_addr = 0x11000000;
+		hdr->second_addr = 0x10F00000;
+		hdr->tags_addr = 0x10000100;
+	} else {
+		hdr->kernel_addr = 0x10000000;
+		hdr->ramdisk_addr = 0x11000000;
+		hdr->second_addr = 0x10F00000;
+		hdr->tags_addr = 0x12000000;
+	}
+
     memcpy(hdr->magic + page_size, 
            kernel, kernel_size);
     memcpy(hdr->magic + page_size + kernel_actual, 
diff --git a/fastboot/fastboot.c b/fastboot/fastboot.c
index 4079a38..aaccc66 100644
--- a/fastboot/fastboot.c
+++ b/fastboot/fastboot.c
@@ -211,12 +211,19 @@ void usage(void)
             "  -p <product>                             specify product name\n"
             "  -c <cmdline>                             override kernel commandline\n"
             "  -i <vendor id>                           specify a custom USB vendor id\n"
+			"  -l4                                      link boot image at start of RAM\n"
         );
     exit(1);
 }
 
+boot_img_hdr *mkbootimg(void *kernel, unsigned kernel_size,
+                        void *ramdisk, unsigned ramdisk_size,
+                        void *second, unsigned second_size,
+                        unsigned page_size,
+                        unsigned *bootimg_size,
+						int islinuximg);
 void *load_bootable_image(const char *kernel, const char *ramdisk, 
-                          unsigned *sz, const char *cmdline)
+                          unsigned *sz, const char *cmdline, int islinuximg)
 {
     void *kdata = 0, *rdata = 0;
     unsigned ksize = 0, rsize = 0;
@@ -256,7 +263,7 @@ void *load_bootable_image(const char *kernel, const char *ramdisk,
     }
 
     fprintf(stderr,"creating boot image...\n");
-    bdata = mkbootimg(kdata, ksize, rdata, rsize, 0, 0, 2048, &bsize);
+    bdata = mkbootimg(kdata, ksize, rdata, rsize, 0, 0, 2048, &bsize, islinuximg);
     if(bdata == 0) {
         fprintf(stderr,"failed to create boot.img\n");
         return 0;
@@ -526,6 +533,7 @@ int main(int argc, char **argv)
     int wants_wipe = 0;
     int wants_reboot = 0;
     int wants_reboot_bootloader = 0;
+	int islinuximg = 1;
     void *data;
     unsigned sz;
 
@@ -556,6 +564,9 @@ int main(int argc, char **argv)
             require(2);
             cmdline = argv[1];
             skip(2);
+		} else if(!strcmp(*argv, "-l4")) {
+			islinuximg = 0;
+			skip(1);
         } else if(!strcmp(*argv, "-i")) {
             char *endptr = NULL;
             unsigned long val;
@@ -600,7 +611,7 @@ int main(int argc, char **argv)
                 rname = argv[0];
                 skip(1);
             }
-            data = load_bootable_image(kname, rname, &sz, cmdline);
+            data = load_bootable_image(kname, rname, &sz, cmdline, islinuximg);
             if (data == 0) return 1;
             fb_queue_download("boot.img", data, sz);
             fb_queue_command("boot", "booting");
@@ -630,7 +641,7 @@ int main(int argc, char **argv)
             } else {
                 skip(3);
             }
-            data = load_bootable_image(kname, rname, &sz, cmdline);
+            data = load_bootable_image(kname, rname, &sz, cmdline, islinuximg);
             if (data == 0) die("cannot load bootable image");
             fb_queue_flash(pname, data, sz);
         } else if(!strcmp(*argv, "flashall")) {

