Index: boot/arch/amd64/Makefile.inc
===================================================================
--- boot/arch/amd64/Makefile.inc	(revision 09285268680b736d54a4a59cd29ffeff37e8a272)
+++ boot/arch/amd64/Makefile.inc	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
@@ -49,11 +49,7 @@
 	$(USPACEDIR)/app/tester/tester \
 	$(USPACEDIR)/app/klog/klog \
-	$(USPACEDIR)/app/cli/cli
-ifneq ($(RDFMT),tmpfs)
-	RD_TASKS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs
-endif
-ifneq ($(RDFMT),fat)
-	RD_TASKS += $(USPACEDIR)/srv/fs/fat/fat
-endif
+	$(USPACEDIR)/app/cli/cli \
+	$(USPACEDIR)/srv/fs/tmpfs/tmpfs \
+	$(USPACEDIR)/srv/fs/fat/fat
 
 build: $(BASE)/image.iso
@@ -76,9 +72,11 @@
 	done
 ifeq ($(RDFMT),tmpfs)
-	$(BASE)/tools/mktmpfs.py 4096 $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.img
+	$(BASE)/tools/mktmpfs.py $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.fs.img
 endif
 ifeq ($(RDFMT),fat)
-	$(BASE)/tools/mkfat.sh $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.img
+	$(BASE)/tools/mkfat.sh $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.fs.img
 endif
+	$(BASE)/tools/mkhord.py 4096 arch/$(ARCH)/iso/boot/initrd.fs.img arch/$(ARCH)/iso/boot/initrd.img
+	rm arch/$(ARCH)/iso/boot/initrd.fs.img
 	mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o $(BASE)/image.iso arch/$(ARCH)/iso/
 
Index: boot/arch/arm32/loader/Makefile
===================================================================
--- boot/arch/arm32/loader/Makefile	(revision 09285268680b736d54a4a59cd29ffeff37e8a272)
+++ boot/arch/arm32/loader/Makefile	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
@@ -123,5 +123,7 @@
 		cp $$task $(USPACEDIR)/dist/sbin/ ; \
 	done
-	../../../../tools/mktmpfs.py 4096 $(USPACEDIR)/dist/ initrd.img
+	../../../../tools/mktmpfs.py $(USPACEDIR)/dist/ initrd.fs.img
+	../../../../tools/mkhord.py 4096 initrd.fs.img initrd.img
+	rm initrd.fs.img
 	../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 4096 "unsigned int" $(COMPONENTS) ./initrd.img
 
Index: boot/arch/ia32/Makefile.inc
===================================================================
--- boot/arch/ia32/Makefile.inc	(revision 09285268680b736d54a4a59cd29ffeff37e8a272)
+++ boot/arch/ia32/Makefile.inc	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
@@ -60,5 +60,7 @@
 		cp $$task $(USPACEDIR)/dist/sbin/ ; \
 	done
-	$(BASE)/tools/mktmpfs.py 4096 $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.img
+	$(BASE)/tools/mktmpfs.py $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.fs.img
+	$(BASE)/tools/mkhord.py 4096 arch/$(ARCH)/iso/boot/initrd.fs.img arch/$(ARCH)/iso/boot/initrd.img
+	rm arch/$(ARCH)/iso/boot/initrd.fs.img
 	mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o $(BASE)/image.iso arch/$(ARCH)/iso/
 
Index: boot/arch/mips32/loader/Makefile
===================================================================
--- boot/arch/mips32/loader/Makefile	(revision 09285268680b736d54a4a59cd29ffeff37e8a272)
+++ boot/arch/mips32/loader/Makefile	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
@@ -124,5 +124,7 @@
 		cp $$task $(USPACEDIR)/dist/sbin/ ; \
 	done
-	../../../../tools/mktmpfs.py 16384 $(USPACEDIR)/dist/ initrd.img
+	../../../../tools/mktmpfs.py $(USPACEDIR)/dist/ initrd.fs.img
+	../../../../tools/mkhord.py 16384 initrd.fs.img initrd.img
+	rm initrd.fs.img
 	../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 16384 "unsigned int" $(COMPONENTS) ./initrd.img
 
Index: boot/arch/ppc32/loader/Makefile
===================================================================
--- boot/arch/ppc32/loader/Makefile	(revision 09285268680b736d54a4a59cd29ffeff37e8a272)
+++ boot/arch/ppc32/loader/Makefile	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
@@ -118,5 +118,7 @@
 		cp $$task $(USPACEDIR)/dist/sbin/ ; \
 	done
-	../../../../tools/mktmpfs.py 4096 $(USPACEDIR)/dist/ initrd.img
+	../../../../tools/mktmpfs.py $(USPACEDIR)/dist/ initrd.fs.img
+	../../../../tools/mkhord.py 4096 initrd.fs.img initrd.img
+	rm initrd.fs.img
 	../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 4096 "unsigned int" $(COMPONENTS) ./initrd.img
 
Index: boot/arch/sparc64/loader/Makefile
===================================================================
--- boot/arch/sparc64/loader/Makefile	(revision 09285268680b736d54a4a59cd29ffeff37e8a272)
+++ boot/arch/sparc64/loader/Makefile	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
@@ -121,5 +121,7 @@
 		cp $$task $(USPACEDIR)/dist/sbin/ ; \
 	done
-	../../../../tools/mktmpfs.py 16384 $(USPACEDIR)/dist/ initrd.img
+	../../../../tools/mktmpfs.py $(USPACEDIR)/dist/ initrd.fs.img
+	../../../../tools/mkhord.py 16384 initrd.fs.img initrd.img
+	rm initrd.fs.img
 	../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 1 "unsigned long" $(COMPONENTS) ./initrd.img
 
Index: tools/mkhord.py
===================================================================
--- tools/mkhord.py	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
+++ tools/mkhord.py	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2008 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+"""
+HORD encapsulator
+"""
+
+import sys
+import os
+import struct
+
+def align_up(size, alignment):
+	"Align upwards to a given alignment"
+	return (((size) + ((alignment) - 1)) & ~((alignment) - 1))
+
+
+def usage(prname):
+	"Print usage syntax"
+	print prname + " <ALIGNMENT> <FS_IMAGE> <HORD_IMAGE>" 
+
+def main():
+	if (len(sys.argv) < 4):
+		usage(sys.argv[0])
+		return
+	
+	if (not sys.argv[1].isdigit()):
+		print "<ALIGNMENT> must be a number"
+		return
+	
+	align = int(sys.argv[1], 0)
+	fs_image = os.path.abspath(sys.argv[2])
+	if (not os.path.isfile(fs_image)):
+		print "<FS_IMAGE> must be a directory"
+		return
+	
+	inf = file(fs_image, "rb")
+	outf = file(sys.argv[3], "wb")
+
+	header_size = align_up(18, align)
+	aligned_size = align_up(os.path.getsize(fs_image), align)
+
+	
+	outf.write(struct.pack("<4sBBLQ", "HORD", 1, 1, header_size, aligned_size))
+	outf.write(struct.pack("<" + ("%d" % (header_size - 18)) + "x"))
+	
+	outf.write(inf.read())
+	
+	padding = aligned_size - os.path.getsize(fs_image)
+	if (padding > 0):
+		outf.write(struct.pack("<" + ("%d" % padding) + "x"))
+	
+	inf.close()
+	outf.close()
+
+if __name__ == '__main__':
+	main()
Index: tools/mktmpfs.py
===================================================================
--- tools/mktmpfs.py	(revision 09285268680b736d54a4a59cd29ffeff37e8a272)
+++ tools/mktmpfs.py	(revision 677f6201e4a3431c59769072f16bf8689cd8452c)
@@ -34,8 +34,4 @@
 import os
 import struct
-
-def align_up(size, alignment):
-	"Align upwards to a given alignment"
-	return (((size) + ((alignment) - 1)) & ~((alignment) - 1))
 
 def usage(prname):
@@ -77,39 +73,21 @@
 
 def main():
-	if (len(sys.argv) < 4):
+	if (len(sys.argv) < 3):
 		usage(sys.argv[0])
 		return
 	
-	if (not sys.argv[1].isdigit()):
-		print "<ALIGNMENT> must be a number"
-		return
-	
-	align = int(sys.argv[1], 0)
-	path = os.path.abspath(sys.argv[2])
+	path = os.path.abspath(sys.argv[1])
 	if (not os.path.isdir(path)):
 		print "<PATH> must be a directory"
 		return
 	
-	header_size = align_up(18, align)
-	outf = file(sys.argv[3], "w")
-	outf.write(struct.pack("<" + ("%d" % header_size) + "x"))
+	outf = file(sys.argv[2], "w")
 	
 	outf.write(struct.pack("<5s", "TMPFS"))
-	payload_size = 5
-	
-	payload_size += recursion(path, outf)
+	recursion(path, outf)
+	outf.write(struct.pack("<BL", 0, 0))
+
+	outf.close()
 		
-	outf.write(struct.pack("<BL", 0, 0))
-	payload_size += 5
-	
-	aligned_size = align_up(payload_size, align)
-	
-	if (aligned_size - payload_size > 0):
-		outf.write(struct.pack("<" + ("%d" % (aligned_size - payload_size)) + "x"))
-		
-	outf.seek(0)
-	outf.write(struct.pack("<4sBBLQ", "HORD", 1, 1, header_size, aligned_size))
-	outf.close()
-
 if __name__ == '__main__':
 	main()
