diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index b2c88babc41a11c1be8353a09370e383f5db623a..e8b116df9bae4dc01bb9370e6a977c2a0f37c46d 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -367,13 +367,14 @@ int _do_env_set (int flag, int argc, char * const argv[])
 	return 0;
 }
 
-int setenv(char *varname, char *varvalue)
+int setenv(const char *varname, const char *varvalue)
 {
-	char * const argv[4] = { "setenv", varname, varvalue, NULL };
+	const char * const argv[4] = { "setenv", varname, varvalue, NULL };
+
 	if ((varvalue == NULL) || (varvalue[0] == '\0'))
-		return _do_env_set(0, 2, argv);
+		return _do_env_set(0, 2, (char * const *)argv);
 	else
-		return _do_env_set(0, 3, argv);
+		return _do_env_set(0, 3, (char * const *)argv);
 }
 
 int do_env_set(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
@@ -482,7 +483,7 @@ int do_env_edit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  * return address of storage for that variable,
  * or NULL if not found
  */
-char *getenv(char *name)
+char *getenv(const char *name)
 {
 	if (gd->flags & GD_FLG_ENV_READY) {	/* after import into hashtable */
 		ENTRY e, *ep;
@@ -507,7 +508,7 @@ char *getenv(char *name)
 /*
  * Look up variable from environment for restricted C runtime env.
  */
-int getenv_f(char *name, char *buf, unsigned len)
+int getenv_f(const char *name, char *buf, unsigned len)
 {
 	int i, nxt;
 
diff --git a/include/common.h b/include/common.h
index 157279122b9b3de5ade66134913608171aae9a50..b994e705f3a5f98042cbefc4d3eb03e2834e325c 100644
--- a/include/common.h
+++ b/include/common.h
@@ -262,13 +262,13 @@ void	doc_probe(unsigned long physadr);
 int	env_init     (void);
 void	env_relocate (void);
 int	envmatch     (uchar *, int);
-char	*getenv	     (char *);
-int	getenv_f     (char *name, char *buf, unsigned len);
+char	*getenv	     (const char *);
+int	getenv_f     (const char *name, char *buf, unsigned len);
 int	saveenv	     (void);
 #ifdef CONFIG_PPC		/* ARM version to be fixed! */
-int inline setenv   (char *, char *);
+int inline setenv    (const char *, const char *);
 #else
-int	setenv	     (char *, char *);
+int	setenv	     (const char *, const char *);
 #endif /* CONFIG_PPC */
 #ifdef CONFIG_ARM
 # include <asm/mach-types.h>
diff --git a/include/exports.h b/include/exports.h
index e14d727ed6dee4197985b3dc7c443deb47202da6..94925664ee6eccc8318b10854071d18614665209 100644
--- a/include/exports.h
+++ b/include/exports.h
@@ -21,8 +21,8 @@ unsigned long get_timer(unsigned long);
 int vprintf(const char *, va_list);
 unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base);
 int strict_strtoul(const char *cp, unsigned int base, unsigned long *res);
-char *getenv (char *name);
-int setenv (char *varname, char *varvalue);
+char *getenv (const char *name);
+int setenv (const char *varname, const char *varvalue);
 long simple_strtol(const char *cp,char **endp,unsigned int base);
 int strcmp(const char * cs,const char * ct);
 int ustrtoul(const char *cp, char **endp, unsigned int base);
diff --git a/include/search.h b/include/search.h
index c827d4dbee946f3ffa39a2499a4b2da9dcbf350c..b4edd43103554882e7a755d081bb8d2f9446f9f0 100644
--- a/include/search.h
+++ b/include/search.h
@@ -39,7 +39,7 @@ typedef enum {
 } ACTION;
 
 typedef struct entry {
-	char *key;
+	const char *key;
 	char *data;
 } ENTRY;
 
diff --git a/lib/hashtable.c b/lib/hashtable.c
index 19d5b158eeff52bf74606d17e391901ddeb226d3..026dbca2fadecbd4533ca5d552973dc532d78c97 100644
--- a/lib/hashtable.c
+++ b/lib/hashtable.c
@@ -155,7 +155,7 @@ void hdestroy_r(struct hsearch_data *htab)
 		if (htab->table[i].used > 0) {
 			ENTRY *ep = &htab->table[i].entry;
 
-			free(ep->key);
+			free((void *)ep->key);
 			free(ep->data);
 		}
 	}
@@ -416,7 +416,7 @@ int hdelete_r(const char *key, struct hsearch_data *htab)
 	/* free used ENTRY */
 	debug("hdelete: DELETING key \"%s\"\n", key);
 
-	free(ep->key);
+	free((void *)ep->key);
 	free(ep->data);
 	htab->table[idx].used = -1;
 
@@ -564,7 +564,7 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep,
 	 * export sorted list of result data
 	 */
 	for (i = 0, p = res; i < n; ++i) {
-		char *s;
+		const char *s;
 
 		s = list[i]->key;
 		while (*s)