Index: boot/Makefile.build
===================================================================
--- boot/Makefile.build	(revision 14f8fd4b8057885912cc5c2ed1e6ef6316a18ddb)
+++ boot/Makefile.build	(revision 81f70b45d8ee6e87fc6744c75c1902de7cf7a562)
@@ -34,5 +34,5 @@
 OPTIMIZATION = 3
 
-DEFS = -DRELEASE=$(RELEASE) "-DNAME=$(NAME)" -D__$(BITS)_BITS__ -D__$(ENDIANESS)__
+DEFS = -DRELEASE=$(RELEASE) "-DCOPYRIGHT=$(COPYRIGHT)" "-DNAME=$(NAME)" -D__$(BITS)_BITS__ -D__$(ENDIANESS)__
 
 GCC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
Index: boot/arch/ia64/src/main.c
===================================================================
--- boot/arch/ia64/src/main.c	(revision 14f8fd4b8057885912cc5c2ed1e6ef6316a18ddb)
+++ boot/arch/ia64/src/main.c	(revision 81f70b45d8ee6e87fc6744c75c1902de7cf7a562)
@@ -189,8 +189,20 @@
 	printf("\nInflating components ... ");
 	
+	/*
+	 * We will use the next available address for a copy of each component to
+	 * make sure that inflate() works with disjunctive memory regions.
+	 */
+	top = ALIGN_UP(top, PAGE_SIZE);
+
 	for (i = cnt; i > 0; i--) {
 		printf("%s ", components[i - 1].name);
 		
-		int err = inflate(components[i - 1].start, components[i - 1].size,
+		/*
+		 * Copy the component to a location which is guaranteed not to
+		 * overlap with the destination for inflate().
+		 */
+		memmove((void *) top, components[i - 1].start, components[i - 1].size);
+		
+		int err = inflate((void *) top, components[i - 1].size,
 		    dest[i - 1], components[i - 1].inflated);
 		
Index: boot/generic/include/memstr.h
===================================================================
--- boot/generic/include/memstr.h	(revision 14f8fd4b8057885912cc5c2ed1e6ef6316a18ddb)
+++ boot/generic/include/memstr.h	(revision 81f70b45d8ee6e87fc6744c75c1902de7cf7a562)
@@ -36,4 +36,5 @@
 
 extern void *memcpy(void *, const void *, size_t);
+extern void *memmove(void *, const void *, size_t);
 
 #endif
Index: boot/generic/src/memstr.c
===================================================================
--- boot/generic/src/memstr.c	(revision 14f8fd4b8057885912cc5c2ed1e6ef6316a18ddb)
+++ boot/generic/src/memstr.c	(revision 81f70b45d8ee6e87fc6744c75c1902de7cf7a562)
@@ -51,4 +51,49 @@
 }
 
+/** Move memory block with possible overlapping.
+ *
+ * Copy cnt bytes from src address to dst address. The source
+ * and destination memory areas may overlap.
+ *
+ * @param dst Destination address to copy to.
+ * @param src Source address to copy from.
+ * @param cnt Number of bytes to copy.
+ *
+ * @return Destination address.
+ *
+ */
+void *memmove(void *dst, const void *src, size_t cnt)
+{
+	/* Nothing to do? */
+	if (src == dst)
+		return dst;
+	
+	/* Non-overlapping? */
+	if ((dst >= src + cnt) || (src >= dst + cnt))
+		return memcpy(dst, src, cnt);
+	
+	uint8_t *dp;
+	const uint8_t *sp;
+	
+	/* Which direction? */
+	if (src > dst) {
+		/* Forwards. */
+		dp = dst;
+		sp = src;
+		
+		while (cnt-- != 0)
+			*dp++ = *sp++;
+	} else {
+		/* Backwards. */
+		dp = dst + (cnt - 1);
+		sp = src + (cnt - 1);
+		
+		while (cnt-- != 0)
+			*dp-- = *sp--;
+	}
+	
+	return dst;
+}
+
 /** @}
  */
Index: boot/generic/src/version.c
===================================================================
--- boot/generic/src/version.c	(revision 14f8fd4b8057885912cc5c2ed1e6ef6316a18ddb)
+++ boot/generic/src/version.c	(revision 81f70b45d8ee6e87fc6744c75c1902de7cf7a562)
@@ -32,5 +32,5 @@
 
 static const char *project = "HelenOS bootloader";
-static const char *copyright = "Copyright (c) 2001-2011 HelenOS project";
+static const char *copyright = STRING(COPYRIGHT);
 static const char *release = STRING(RELEASE);
 static const char *name = STRING(NAME);
