Index: uspace/lib/libc/generic/getopt.c
===================================================================
--- uspace/lib/libc/generic/getopt.c	(revision 92fd52d7f8133beb8043e6bcd17498477fe735ea)
+++ uspace/lib/libc/generic/getopt.c	(revision 7afb4a53710d7b78f26a51c1825abc447de3ea5b)
@@ -242,5 +242,5 @@
 	}
 	if ((optchar = (int)*place++) == (int)':' ||
-	    (oli = strchr(options + (IGNORE_FIRST ? 1 : 0), optchar)) == NULL) {
+	    (oli = str_chr(options + (IGNORE_FIRST ? 1 : 0), optchar)) == NULL) {
 		/* option letter unknown or ':' */
 		if (!*place)
@@ -378,5 +378,5 @@
 			return -1;
 		}
-		if ((has_equal = strchr(current_argv, '=')) != NULL) {
+		if ((has_equal = str_chr(current_argv, '=')) != NULL) {
 			/* argument found (--option=arg) */
 			current_argv_len = has_equal - current_argv;
Index: uspace/lib/libc/generic/string.c
===================================================================
--- uspace/lib/libc/generic/string.c	(revision 92fd52d7f8133beb8043e6bcd17498477fe735ea)
+++ uspace/lib/libc/generic/string.c	(revision 7afb4a53710d7b78f26a51c1825abc447de3ea5b)
@@ -536,5 +536,4 @@
  *
  * @return Pointer to character in @a str or NULL if not found.
- *
  */
 const char *str_chr(const char *str, wchar_t ch)
@@ -549,4 +548,26 @@
 	
 	return NULL;
+}
+
+/** Find last occurence of character in string.
+ *
+ * @param str String to search.
+ * @param ch  Character to look for.
+ *
+ * @return Pointer to character in @a str or NULL if not found.
+ */
+const char *str_rchr(const char *str, wchar_t ch)
+{
+	wchar_t acc;
+	size_t off = 0;
+	char *res;
+
+	res = NULL;
+	while ((acc = str_decode(str, &off, STR_NO_LIMIT)) != 0) {
+		if (acc == ch)
+			res = (str + off);
+	}
+
+	return res;
 }
 
@@ -626,42 +647,4 @@
 	
 	return (tolower(a[c]) - tolower(b[c]));
-}
-
-/** Return pointer to the first occurence of character c in string.
- *
- * @param str		Scanned string.
- * @param c		Searched character (taken as one byte).
- * @return		Pointer to the matched character or NULL if it is not
- * 			found in given string.
- */
-char *strchr(const char *str, int c)
-{
-	while (*str != '\0') {
-		if (*str == (char) c)
-			return (char *) str;
-		str++;
-	}
-
-	return NULL;
-}
-
-/** Return pointer to the last occurence of character c in string.
- *
- * @param str		Scanned string.
- * @param c		Searched character (taken as one byte).
- * @return		Pointer to the matched character or NULL if it is not
- * 			found in given string.
- */
-char *strrchr(const char *str, int c)
-{
-	char *retval = NULL;
-
-	while (*str != '\0') {
-		if (*str == (char) c)
-			retval = (char *) str;
-		str++;
-	}
-
-	return (char *) retval;
 }
 
@@ -870,9 +853,9 @@
 
 	/* Skip over leading delimiters. */
-	while (*s && (strchr(delim, *s) != NULL)) ++s;
+	while (*s && (str_chr(delim, *s) != NULL)) ++s;
 	start = s;
 
 	/* Skip over token characters. */
-	while (*s && (strchr(delim, *s) == NULL)) ++s;
+	while (*s && (str_chr(delim, *s) == NULL)) ++s;
 	end = s;
 	*next = (*s ? s + 1 : s);
Index: uspace/lib/libc/include/string.h
===================================================================
--- uspace/lib/libc/include/string.h	(revision 92fd52d7f8133beb8043e6bcd17498477fe735ea)
+++ uspace/lib/libc/include/string.h	(revision 7afb4a53710d7b78f26a51c1825abc447de3ea5b)
@@ -74,4 +74,5 @@
 
 extern const char *str_chr(const char *str, wchar_t ch);
+extern const char *str_rchr(const char *str, wchar_t ch);
 
 extern bool wstr_linsert(wchar_t *str, wchar_t ch, count_t pos, count_t max_pos);
@@ -92,7 +93,4 @@
 extern char *strdup(const char *);
 
-extern char *strchr(const char *, int);
-extern char *strrchr(const char *, int);
-
 extern long int strtol(const char *, char **, int);
 extern unsigned long strtoul(const char *, char **, int);
Index: uspace/srv/fs/fat/fat_dentry.c
===================================================================
--- uspace/srv/fs/fat/fat_dentry.c	(revision 92fd52d7f8133beb8043e6bcd17498477fe735ea)
+++ uspace/srv/fs/fat/fat_dentry.c	(revision 7afb4a53710d7b78f26a51c1825abc447de3ea5b)
@@ -67,5 +67,5 @@
 	if (!(rc = stricmp(name, component)))
 		return rc;
-	if (!strchr(name, '.')) {
+	if (!str_chr(name, '.')) {
 		/*
 		 * There is no '.' in the name, so we know that there is enough
Index: uspace/srv/loader/main.c
===================================================================
--- uspace/srv/loader/main.c	(revision 92fd52d7f8133beb8043e6bcd17498477fe735ea)
+++ uspace/srv/loader/main.c	(revision 7afb4a53710d7b78f26a51c1825abc447de3ea5b)
@@ -276,5 +276,5 @@
 	
 	/* Set the task name. */
-	cp = strrchr(pathname, '/');
+	cp = str_rchr(pathname, '/');
 	cp = (cp == NULL) ? pathname : (cp + 1);
 	task_set_name(cp);
