diff --git a/common/image.c b/common/image.c
index e22c974..f3dd647 100644
--- a/common/image.c
+++ b/common/image.c
@@ -65,7 +65,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
+static const image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
 						int verify);
 #else
 #include "mkimage.h"
@@ -166,7 +166,7 @@
 /*****************************************************************************/
 /* Legacy format routines */
 /*****************************************************************************/
-int image_check_hcrc (image_header_t *hdr)
+int image_check_hcrc (const image_header_t *hdr)
 {
 	ulong hcrc;
 	ulong len = image_get_header_size ();
@@ -181,7 +181,7 @@
 	return (hcrc == image_get_hcrc (hdr));
 }
 
-int image_check_dcrc (image_header_t *hdr)
+int image_check_dcrc (const image_header_t *hdr)
 {
 	ulong data = image_get_data (hdr);
 	ulong len = image_get_data_size (hdr);
@@ -203,7 +203,7 @@
  * returns:
  *     number of components
  */
-ulong image_multi_count (image_header_t *hdr)
+ulong image_multi_count (const image_header_t *hdr)
 {
 	ulong i, count = 0;
 	uint32_t *size;
@@ -236,7 +236,7 @@
  *     data address and size of the component, if idx is valid
  *     0 in data and len, if idx is out of range
  */
-void image_multi_getimg (image_header_t *hdr, ulong idx,
+void image_multi_getimg (const image_header_t *hdr, ulong idx,
 			ulong *data, ulong *len)
 {
 	int i;
@@ -272,7 +272,7 @@
 	}
 }
 
-static void image_print_type (image_header_t *hdr)
+static void image_print_type (const image_header_t *hdr)
 {
 	const char *os, *arch, *type, *comp;
 
@@ -286,7 +286,7 @@
 
 /**
  * image_print_contents - prints out the contents of the legacy format image
- * @hdr: pointer to the legacy format image header
+ * @ptr: pointer to the legacy format image header
  * @p: pointer to prefix string
  *
  * image_print_contents() formats a multi line legacy image contents description.
@@ -296,8 +296,9 @@
  * returns:
  *     no returned results
  */
-void image_print_contents (image_header_t *hdr)
+void image_print_contents (const void *ptr)
 {
+	const image_header_t *hdr = (const image_header_t *)ptr;
 	const char *p;
 
 #ifdef USE_HOSTCC
@@ -363,10 +364,10 @@
  *     pointer to a ramdisk image header, if image was found and valid
  *     otherwise, return NULL
  */
-static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
+static const image_header_t *image_get_ramdisk (ulong rd_addr, uint8_t arch,
 						int verify)
 {
-	image_header_t *rd_hdr = (image_header_t *)rd_addr;
+	const image_header_t *rd_hdr = (const image_header_t *)rd_addr;
 
 	if (!image_check_magic (rd_hdr)) {
 		puts ("Bad Magic Number\n");
@@ -628,13 +629,13 @@
  */
 int genimg_get_format (void *img_addr)
 {
-	ulong		format = IMAGE_FORMAT_INVALID;
-	image_header_t	*hdr;
+	ulong format = IMAGE_FORMAT_INVALID;
+	const image_header_t *hdr;
 #if defined(CONFIG_FIT) || defined(CONFIG_OF_LIBFDT)
-	char		*fit_hdr;
+	char *fit_hdr;
 #endif
 
-	hdr = (image_header_t *)img_addr;
+	hdr = (const image_header_t *)img_addr;
 	if (image_check_magic(hdr))
 		format = IMAGE_FORMAT_LEGACY;
 #if defined(CONFIG_FIT) || defined(CONFIG_OF_LIBFDT)
@@ -685,7 +686,7 @@
 		/* get data size */
 		switch (genimg_get_format ((void *)ram_addr)) {
 		case IMAGE_FORMAT_LEGACY:
-			d_size = image_get_data_size ((image_header_t *)ram_addr);
+			d_size = image_get_data_size ((const image_header_t *)ram_addr);
 			debug ("   Legacy format image found at 0x%08lx, size 0x%08lx\n",
 					ram_addr, d_size);
 			break;
@@ -762,7 +763,7 @@
 {
 	ulong rd_addr, rd_load;
 	ulong rd_data, rd_len;
-	image_header_t *rd_hdr;
+	const image_header_t *rd_hdr;
 #if defined(CONFIG_FIT)
 	void		*fit_hdr;
 	const char	*fit_uname_config = NULL;
@@ -1085,9 +1086,9 @@
 	puts (" - must RESET the board to recover.\n");
 }
 
-static image_header_t *image_get_fdt (ulong fdt_addr)
+static const image_header_t *image_get_fdt (ulong fdt_addr)
 {
-	image_header_t *fdt_hdr = (image_header_t *)fdt_addr;
+	const image_header_t *fdt_hdr = (const image_header_t *)fdt_addr;
 
 	image_print_contents (fdt_hdr);
 
@@ -1283,8 +1284,8 @@
 int boot_get_fdt (int flag, int argc, char *argv[], bootm_headers_t *images,
 		char **of_flat_tree, ulong *of_size)
 {
+	const image_header_t *fdt_hdr;
 	ulong		fdt_addr;
-	image_header_t	*fdt_hdr;
 	char		*fdt_blob = NULL;
 	ulong		image_start, image_end;
 	ulong		load_start, load_end;
diff --git a/include/image.h b/include/image.h
index beb3a16..a62669f 100644
--- a/include/image.h
+++ b/include/image.h
@@ -333,7 +333,7 @@
 }
 
 #define image_get_hdr_l(f) \
-	static inline uint32_t image_get_##f(image_header_t *hdr) \
+	static inline uint32_t image_get_##f(const image_header_t *hdr) \
 	{ \
 		return uimage_to_cpu (hdr->ih_##f); \
 	}
@@ -346,7 +346,7 @@
 image_get_hdr_l (dcrc);		/* image_get_dcrc */
 
 #define image_get_hdr_b(f) \
-	static inline uint8_t image_get_##f(image_header_t *hdr) \
+	static inline uint8_t image_get_##f(const image_header_t *hdr) \
 	{ \
 		return hdr->ih_##f; \
 	}
@@ -355,12 +355,12 @@
 image_get_hdr_b (type);		/* image_get_type */
 image_get_hdr_b (comp);		/* image_get_comp */
 
-static inline char *image_get_name (image_header_t *hdr)
+static inline char *image_get_name (const image_header_t *hdr)
 {
 	return (char *)hdr->ih_name;
 }
 
-static inline uint32_t image_get_data_size (image_header_t *hdr)
+static inline uint32_t image_get_data_size (const image_header_t *hdr)
 {
 	return image_get_size (hdr);
 }
@@ -376,16 +376,16 @@
  * returns:
  *     image payload data start address
  */
-static inline ulong image_get_data (image_header_t *hdr)
+static inline ulong image_get_data (const image_header_t *hdr)
 {
 	return ((ulong)hdr + image_get_header_size ());
 }
 
-static inline uint32_t image_get_image_size (image_header_t *hdr)
+static inline uint32_t image_get_image_size (const image_header_t *hdr)
 {
 	return (image_get_size (hdr) + image_get_header_size ());
 }
-static inline ulong image_get_image_end (image_header_t *hdr)
+static inline ulong image_get_image_end (const image_header_t *hdr)
 {
 	return ((ulong)hdr + image_get_image_size (hdr));
 }
@@ -418,8 +418,8 @@
 	strncpy (image_get_name (hdr), name, IH_NMLEN);
 }
 
-int image_check_hcrc (image_header_t *hdr);
-int image_check_dcrc (image_header_t *hdr);
+int image_check_hcrc (const image_header_t *hdr);
+int image_check_dcrc (const image_header_t *hdr);
 #ifndef USE_HOSTCC
 int getenv_yesno (char *var);
 ulong getenv_bootm_low(void);
@@ -427,31 +427,31 @@
 void memmove_wd (void *to, void *from, size_t len, ulong chunksz);
 #endif
 
-static inline int image_check_magic (image_header_t *hdr)
+static inline int image_check_magic (const image_header_t *hdr)
 {
 	return (image_get_magic (hdr) == IH_MAGIC);
 }
-static inline int image_check_type (image_header_t *hdr, uint8_t type)
+static inline int image_check_type (const image_header_t *hdr, uint8_t type)
 {
 	return (image_get_type (hdr) == type);
 }
-static inline int image_check_arch (image_header_t *hdr, uint8_t arch)
+static inline int image_check_arch (const image_header_t *hdr, uint8_t arch)
 {
 	return (image_get_arch (hdr) == arch);
 }
-static inline int image_check_os (image_header_t *hdr, uint8_t os)
+static inline int image_check_os (const image_header_t *hdr, uint8_t os)
 {
 	return (image_get_os (hdr) == os);
 }
 
-ulong image_multi_count (image_header_t *hdr);
-void image_multi_getimg (image_header_t *hdr, ulong idx,
+ulong image_multi_count (const image_header_t *hdr);
+void image_multi_getimg (const image_header_t *hdr, ulong idx,
 			ulong *data, ulong *len);
 
-void image_print_contents (image_header_t *hdr);
+void image_print_contents (const void *hdr);
 
 #ifndef USE_HOSTCC
-static inline int image_check_target_arch (image_header_t *hdr)
+static inline int image_check_target_arch (const image_header_t *hdr)
 {
 #if defined(__ARM__)
 	if (!image_check_arch (hdr, IH_ARCH_ARM))
diff --git a/tools/mkimage.h b/tools/mkimage.h
index 120970f..96f2ef8 100644
--- a/tools/mkimage.h
+++ b/tools/mkimage.h
@@ -104,7 +104,7 @@
 	 */
 	int (*verify_header) (unsigned char *, int, struct mkimage_params *);
 	/* Prints image information abstracting from image header */
-	void (*print_header) (void *);
+	void (*print_header) (const void *);
 	/*
 	 * The header or image contents need to be set as per image type to
 	 * be generated using this callback function.
